logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

iflibtxrx — Device Dependent Transmit and Receive Functions

Authors

       This manual page was written by Nicole Graziano

Debian                                           April 16, 2019                                     IFLIBTXTX(9)

Data Structures

       The device dependent mechanisms for handling packet transmit and receive are  primarily  defined  by  the
       functions named above.  The if_pkt_info data structure contains statistics and identifying info necessary
       for packet transmission.  While the data structure for packet receipt is the if_rxd_info structure.

   Theif_pkt_infoStructure
       The fields of structif_pkt_info are as follows:

             ipi_len          (uint32_t) Denotes the size of packet to be sent on the transmit queue.

             ipi_segs         (bus_dma_segment_t*)  A pointer to the bus_dma_segment of the device independent
                              transfer queue defined in iflib.

             ipi_qsidx        Unique index  value  assigned  sequentially  to  each  transmit  queue.   Used  to
                              reference the currently transmitting queue.

             ipi_nsegs        (uint16_t)  Number  of  descriptors  to be read into the device dependent transfer
                              descriptors.

             ipi_ndescs       (uint16_t) Number of descriptors in use.  Calculated by subtracting the  old  pidx
                              value from the new pidx value.

             ipi_flags        (uint16_t) Flags defined on a per packet basis.

             ipi_pidx         (uint32_t)  Value  of  first pidx sent to the isc_encap function for encapsulation
                              and subsequent transmission.

             ipi_new_pidx     (uint32_t) Value set after the termination of the isc_encap function.  This  value
                              will  become  the first pidx sent to the isc-encap the next time that the function
                              is called.

             TheFollowingFieldsAreUsedForOffloadHandlingipi_csum_flags   (uint64_t) Flags describing the checksum values, used on a per packet basis.

             ipi_tso_segsz    (uint16_t) Size of the TSO Segment Size.

             ipi_mflags       (uint16_t) Flags describing the operational parameters of the mbuf.

             ipi_vtag         (uint16_t) Contains the VLAN information in the Ethernet Frame.

             ipi_etype        (uint16_t)  Type  of  ethernet  header  protocol  as  contained  by   the   struct
                              ether_vlan_header.

             ipi_ehrdlen      (uint8_t) Length of the Ethernet Header.

             ipi_ip_hlen      (uint8_t) Length of the TCP Header

             ipi_tcp_hlen     (uint8_t) Length of the TCP Header.

             ipi_tcp_hflags   (uint8_t) Flags describing the operational parameters of the TCP Header.

             ipi_ipproto      (uint8_t) Specifies the type of IP Protocol in use.  Example TCP, UDP, or SCTP.

   Theif_rxd_infoStructure
       The fields of structif_rxd_info are as follows:

             iri_qsidx        (uint16_t)  Unique  index value assigned sequentially to each receive queue.  Used
                              to reference the currently receiving queue.

             iri_vtag         (uint16_t) Contains the VLAN information in the Ethernet Frame.

             iri_len          (uint16_t) Denotes the size of a received packet.

             iri_next_offset  (uint16_t) Denotes the offset value for the next packet to  be  receive.   A  Null
                              value signifies the end of packet.

             iri_cidx         (uint32_t)  Denotes the index value of the packet currently being processed in the
                              consumer queue.

             iri_flowid       (uint32_t) Value of the RSS hash for the packet.

             iri_flags        (uint)
                               Flags describing the operational parameters of the mbuf contained in the
                               receive packet.

             iri_csum_flags   (uint32_t) Flags describing the checksum value contained in the receive packet.

             iri_csum_data    (uint32_t) Checksum data contained in the mbuf(9) packet header.

             iri_m            (structmbuf*) A mbuf for drivers that manage their own receive queues.

             iri_ifp          (structifnet*) A link back to the interface structure.  Utilized by drivers that
                              have multiple interface per softc.

             iri_rsstype      (uint8_t) The value of the RSS hash type.

             iri_pad          (uint8_t) The length of any padding contained by the received data.

             iri_qidx         (uint8_t) Represents the type of queue event.  If  value  >=  0  then  it  is  the
                              freelist id otherwise it is a completion queue event.

Functions

       All  function  calls are associated exclusively with either packet transmission or receipt.  The void *sc
       passed as the first argument to all of the following functions represents the driver's softc.

   TransmitPacketFunctionsisc_txd_encap()
             Transmit function that sends a packet on an interface.  The  if_pkt_info  data  structure  contains
             data information fields describing the packet.  This function returns 0 if successful, otherwise an
             error value is returned.

             isc_txd_flush()
             Flush  function  is  called  immediately  after  the isc_txd_encap function transmits a packet.  It
             updates the hardware producer index or increments the descriptors used to  pidx_or_credits  in  the
             queue designated by the qid number.  This is often referred to as poking the doorbell register.

             isc_txd_credits_update()
             Credit function advances the buffer ring and calculates the credits (descriptors) processed.  Until
             the I/O is complete it cleans the range in case of multisegments and updates the count of processed
             packets.  The function returns the number of processed credits.

   ReceivePacketFunctionsisc_rxd_available()
             Function calculates the remaining number of descriptors from a position given by idx.  The function
             returns this value.

             isc_rxd_refill()
             Starting  with  the  physical  address paddrs, the function reads a packet into the rx_ring until a
             value designated by count is reached.  vaddrs is typically not needed and is provided  for  devices
             that place their own metadata in the packet header.

             isc_rxd_flush()
             Flush  function  updates the producer pointer on the free list flid in queue set number qid to pidx
             to reflect the presence of new buffers.

             isc_rxd_pkt_get()
             Process a single software descriptor.  rxr->rx_base[i]  contains  a  descriptor  that  describes  a
             received  packet.   Hardware specific information about the buffer referred to by ri is returned in
             the data structure if_rxd_info

Name

       iflibtxrx — Device Dependent Transmit and Receive Functions

See Also

iflibdd(9), iflibdi(9), mbuf(9)

Synopsis

#include<ifdi_if.h>InterfaceManipulationFunctionsintisc_txd_encap(void*sc, if_pkt_into_tpi);

       voidisc_txd_flush(void*sc, uint16_tqid, uint32_t_pidx_or_credits_);

       intisc_txd_credits_update(void*sc, uint16_tqid, boolclear);

       intisc_rxd_available(void*sc, uint16_tqsid, uint32_tcidx);

       voidisc_rxd_refill(void*sc,  uint16_tqsid,  uint8_tflid, uint32_tpidx, uint64_t*paddrs, caddr_t*vaddrs,
           uint16_tcount);

       voidisc_rxd_flush(void*sc, uint16_tqsid, uint8_tflid, uint32_tpidx);

       intisc_rxd_pkt_get(void*sc, if_rxd_info_tri);

   GlobalVariablesexternstructif_txrx

See Also