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

Author

       Generated automatically by Doxygen for DPDK from the source code.

DPDK                                             Version 24.11.2                                rte_ip_frag.h(3)

Detailed Description

       RTE IP Fragmentation and Reassembly

       Implementation of IP packet fragmentation and reassembly.

       Definition in file rte_ip_frag.h.

Function Documentation

structrte_ip_frag_tbl*rte_ip_frag_table_create(uint32_tbucket_num,uint32_tbucket_entries,uint32_tmax_entries,uint64_tmax_cycles,intsocket_id)
       Create a new IP fragmentation table.

       Parametersbucket_num Number of buckets in the hash table.
           bucket_entries Number of entries per bucket (e.g. hash associativity). Should be power of two.
           max_entries Maximum number of entries that could be stored in the table. The value should be less or
           equal then bucket_num * bucket_entries.
           max_cycles Maximum TTL in cycles for each fragmented packet.
           socket_id The socket_id argument is the socket identifier in the case of NUMA. The value can be
           SOCKET_ID_ANY if there is no NUMA constraints.

       Returns
           The pointer to the new allocated fragmentation table, on success. NULL on error.

   voidrte_ip_frag_table_destroy(structrte_ip_frag_tbl*tbl)
       Free allocated IP fragmentation table.

       Parameterstbl Fragmentation table to free.

   int32_trte_ipv6_fragment_packet(structrte_mbuf*pkt_in,structrte_mbuf**pkts_out,uint16_tnb_pkts_out,uint16_tmtu_size,structrte_mempool*pool_direct,structrte_mempool*pool_indirect)
       This function implements the fragmentation of IPv6 packets.

       Parameterspkt_in The input packet.
           pkts_out Array storing the output fragments.
           nb_pkts_out Number of fragments.
           mtu_size Size in bytes of the Maximum Transfer Unit (MTU) for the outgoing IPv6 datagrams. This value
           includes the size of the IPv6 header.
           pool_direct MBUF pool used for allocating direct buffers for the output fragments.
           pool_indirect MBUF pool used for allocating indirect buffers for the output fragments.

       Returns
           Upon successful completion - number of output fragments placed in the pkts_out array. Otherwise -
           (-1) * errno.

   structrte_mbuf*rte_ipv6_frag_reassemble_packet(structrte_ip_frag_tbl*tbl,structrte_ip_frag_death_row*dr,structrte_mbuf*mb,uint64_ttms,structrte_ipv6_hdr*ip_hdr,structrte_ipv6_fragment_ext*frag_hdr)
       This function implements reassembly of fragmented IPv6 packets. Incoming mbuf should have its
       l2_len/l3_len fields setup correctly.

       Parameterstbl Table where to lookup/add the fragmented packet.
           dr Death row to free buffers to
           mb Incoming mbuf with IPv6 fragment.
           tms Fragment arrival timestamp.
           ip_hdr Pointer to the IPv6 header.
           frag_hdr Pointer to the IPv6 fragment extension header.

       Returns
           Pointer to mbuf for reassembled packet, or NULL if:

           • an error occurred.

           • not all fragments of the packet are collected yet.

   staticstructrte_ipv6_fragment_ext*rte_ipv6_frag_get_ipv6_fragment_header(structrte_ipv6_hdr*hdr)[inline],[static]
       Return a pointer to the packet's fragment header, if found. It only looks at the extension header  that's
       right after the fixed IPv6 header, and doesn't follow the whole chain of extension headers.

       Parametershdr Pointer to the IPv6 header.

       Returns
           Pointer to the IPv6 fragment extension header, or NULL if it's not present.

       Definition at line 143 of file rte_ip_frag.h.

   int32_trte_ipv4_fragment_packet(structrte_mbuf*pkt_in,structrte_mbuf**pkts_out,uint16_tnb_pkts_out,uint16_tmtu_size,structrte_mempool*pool_direct,structrte_mempool*pool_indirect)
       IPv4 fragmentation.

       This function implements the fragmentation of IPv4 packets.

       Parameterspkt_in The input packet.
           pkts_out Array storing the output fragments.
           nb_pkts_out Number of fragments.
           mtu_size Size in bytes of the Maximum Transfer Unit (MTU) for the outgoing IPv4 datagrams. This value
           includes the size of the IPv4 header.
           pool_direct MBUF pool used for allocating direct buffers for the output fragments.
           pool_indirect MBUF pool used for allocating indirect buffers for the output fragments.

       Returns
           Upon successful completion - number of output fragments placed in the  pkts_out  array.  Otherwise  -
           (-1) * errno.

   int32_trte_ipv4_fragment_copy_nonseg_packet(structrte_mbuf*pkt_in,structrte_mbuf**pkts_out,uint16_tnb_pkts_out,uint16_tmtu_size,structrte_mempool*pool_direct)
       IPv4 fragmentation by copy.

       This  function  implements the fragmentation of IPv4 packets by copy non-segmented mbuf. This function is
       mainly used to adapt Tx MBUF_FAST_FREE offload. MBUF_FAST_FREE: Device  supports  optimization  for  fast
       release  of  mbufs.  When  set,  application  must guarantee that per-queue all mbufs comes from the same
       mempool, has refcnt = 1, direct and non-segmented.

       Parameterspkt_in The input packet.
           pkts_out Array storing the output fragments.
           nb_pkts_out Number of fragments.
           mtu_size Size in bytes of the Maximum Transfer Unit (MTU) for the outgoing IPv4 datagrams. This value
           includes the size of the IPv4 header.
           pool_direct MBUF pool used for allocating direct buffers for the output fragments.

       Returns
           Upon successful completion - number of output fragments placed in the  pkts_out  array.  Otherwise  -
           (-1) * errno.

   structrte_mbuf*rte_ipv4_frag_reassemble_packet(structrte_ip_frag_tbl*tbl,structrte_ip_frag_death_row*dr,structrte_mbuf*mb,uint64_ttms,structrte_ipv4_hdr*ip_hdr)
       This  function  implements  reassembly  of  fragmented  IPv4  packets.  Incoming  mbufs  should  have its
       l2_len/l3_len fields setup correctly.

       Parameterstbl Table where to lookup/add the fragmented packet.
           dr Death row to free buffers to
           mb Incoming mbuf with IPv4 fragment.
           tms Fragment arrival timestamp.
           ip_hdr Pointer to the IPV4 header inside the fragment.

       Returns
           Pointer to mbuf for reassembled packet, or NULL if:

           • an error occurred.

           • not all fragments of the packet are collected yet.

   staticintrte_ipv4_frag_pkt_is_fragmented(conststructrte_ipv4_hdr*hdr)[inline],[static]
       Check if the IPv4 packet is fragmented

       Parametershdr IPv4 header of the packet

       Returns
           1 if fragmented, 0 if not fragmented

       Definition at line 246 of file rte_ip_frag.h.

   voidrte_ip_frag_free_death_row(structrte_ip_frag_death_row*dr,uint32_tprefetch)
       Free mbufs on a given death row.

       Parametersdr Death row to free mbufs in.
           prefetch How many buffers to prefetch before freeing.

   voidrte_ip_frag_table_statistics_dump(FILE*f,conststructrte_ip_frag_tbl*tbl)
       Dump fragmentation table statistics to file.

       Parametersf File to dump statistics to
           tbl Fragmentation table to dump statistics from

   voidrte_ip_frag_table_del_expired_entries(structrte_ip_frag_tbl*tbl,structrte_ip_frag_death_row*dr,uint64_ttms)
       Delete expired fragments

       Parameterstbl Table to delete expired fragments from
           dr Death row to free buffers to
           tms Current timestamp

Macro Definition Documentation

#defineRTE_IP_FRAG_DEATH_ROW_LEN32
       death row size (in packets)

       Definition at line 31 of file rte_ip_frag.h.

   #defineRTE_IP_FRAG_DEATH_ROW_MBUF_LEN(RTE_IP_FRAG_DEATH_ROW_LEN*(RTE_LIBRTE_IP_FRAG_MAX_FRAG+1))
       death row size in mbufs

       Definition at line 34 of file rte_ip_frag.h.

   #defineIP_FRAG_DEATH_ROW_LENRTE_IP_FRAG_DEATH_ROW_LEN
       Obsolete

       Definition at line 298 of file rte_ip_frag.h.

   #defineIP_FRAG_DEATH_ROW_MBUF_LENRTE_IP_FRAG_DEATH_ROW_MBUF_LEN
       Obsolete

       Definition at line 300 of file rte_ip_frag.h.

   #defineipv6_extension_fragmentrte_ipv6_fragment_ext
       Obsolete

       Definition at line 302 of file rte_ip_frag.h.

Name

       rte_ip_frag.h

Synopsis

       #include <stdint.h>
       #include <stdio.h>
       #include <rte_config.h>
       #include <rte_malloc.h>
       #include <rte_memory.h>
       #include <rte_ip.h>
       #include <rte_byteorder.h>

   DataStructures
       struct rte_ip_frag_death_rowMacros
       #define RTE_IP_FRAG_DEATH_ROW_LEN   32
       #define RTE_IP_FRAG_DEATH_ROW_MBUF_LEN       (RTE_IP_FRAG_DEATH_ROW_LEN * (RTE_LIBRTE_IP_FRAG_MAX_FRAG +
           1))

       Obsoletemacros,kepthereforcompatibilityreasons.
       Will be deprecated/removed in future DPDK releases.

           #define IP_FRAG_DEATH_ROW_LENRTE_IP_FRAG_DEATH_ROW_LEN
           #define IP_FRAG_DEATH_ROW_MBUF_LENRTE_IP_FRAG_DEATH_ROW_MBUF_LEN
           #define ipv6_extension_fragment   rte_ipv6_fragment_ext

   Functions
       struct rte_ip_frag_tbl * rte_ip_frag_table_create (uint32_t bucket_num, uint32_t bucket_entries, uint32_t
           max_entries, uint64_t max_cycles, int socket_id)
       void rte_ip_frag_table_destroy (struct rte_ip_frag_tbl *tbl)
       int32_t rte_ipv6_fragment_packet (struct rte_mbuf *pkt_in, struct rte_mbuf **pkts_out, uint16_t
           nb_pkts_out, uint16_t mtu_size, struct rte_mempool *pool_direct, struct rte_mempool *pool_indirect)
       struct rte_mbuf * rte_ipv6_frag_reassemble_packet (struct rte_ip_frag_tbl *tbl, struct
           rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms, struct rte_ipv6_hdr *ip_hdr, struct
           rte_ipv6_fragment_ext *frag_hdr)
       static struct rte_ipv6_fragment_ext * rte_ipv6_frag_get_ipv6_fragment_header (struct rte_ipv6_hdr *hdr)
       int32_t rte_ipv4_fragment_packet (struct rte_mbuf *pkt_in, struct rte_mbuf **pkts_out, uint16_t
           nb_pkts_out, uint16_t mtu_size, struct rte_mempool *pool_direct, struct rte_mempool *pool_indirect)
       int32_t rte_ipv4_fragment_copy_nonseg_packet (struct rte_mbuf *pkt_in, struct rte_mbuf **pkts_out,
           uint16_t nb_pkts_out, uint16_t mtu_size, struct rte_mempool *pool_direct)
       struct rte_mbuf * rte_ipv4_frag_reassemble_packet (struct rte_ip_frag_tbl *tbl, struct
           rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms, struct rte_ipv4_hdr *ip_hdr)
       static int rte_ipv4_frag_pkt_is_fragmented (const struct rte_ipv4_hdr *hdr)
       void rte_ip_frag_free_death_row (struct rte_ip_frag_death_row *dr, uint32_t prefetch)
       void rte_ip_frag_table_statistics_dump (FILE *f, const struct rte_ip_frag_tbl *tbl)
       void rte_ip_frag_table_del_expired_entries (struct rte_ip_frag_tbl *tbl, struct rte_ip_frag_death_row
           *dr, uint64_t tms)

See Also