rte_ip_frag.h(3)
πΈ NAME πΈ
Okay bestie, this is rte_ip_frag.h(3) from the Library Functions Manual, and it's literally the RTE IP Fragmentation and Reassembly page. No cap, it's giving low-level packet-splitting main character energy π
β¨.
β¨ SYNOPSIS β¨
First, the include glow-up:
#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>
π§Έ Data Structures π§Έ
The one and only struct:
struct rte_ip_frag_death_row
π Macros π
These are the macros, bestie:
#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))
Obsolete macros, kept here for compatibility reasons. Will be deprecated/removed in future DPDK releases.
#define IP_FRAG_DEATH_ROW_LEN RTE_IP_FRAG_DEATH_ROW_LEN
#define IP_FRAG_DEATH_ROW_MBUF_LEN RTE_IP_FRAG_DEATH_ROW_MBUF_LEN
#define ipv6_extension_fragment rte_ipv6_fragment_ext
π οΈ Functions π οΈ
Here's the whole function lineup, iconically long and fully intact:
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)
π Detailed Description π
RTE IP Fragmentation and Reassembly β this is the implementation of IP packet fragmentation and reassembly. Definition in file rte_ip_frag.h.
π Macro Definition Documentation π
π RTE_IP_FRAG_DEATH_ROW_LEN = 32 π
#define RTE_IP_FRAG_DEATH_ROW_LEN 32
Death row size (in packets).
Definition at line 31 of file rte_ip_frag.h.
π RTE_IP_FRAG_DEATH_ROW_MBUF_LEN π
#define RTE_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.
π«Ά IP_FRAG_DEATH_ROW_LEN π«Ά
Obsolete.
#define IP_FRAG_DEATH_ROW_LEN RTE_IP_FRAG_DEATH_ROW_LEN
Definition at line 298 of file rte_ip_frag.h.
π«Ά IP_FRAG_DEATH_ROW_MBUF_LEN π«Ά
Obsolete.
#define IP_FRAG_DEATH_ROW_MBUF_LEN RTE_IP_FRAG_DEATH_ROW_MBUF_LEN
Definition at line 300 of file rte_ip_frag.h.
π«Ά ipv6_extension_fragment π«Ά
Obsolete.
#define ipv6_extension_fragment rte_ipv6_fragment_ext
Definition at line 302 of file rte_ip_frag.h.
π₯ Function Documentation π₯
π rte_ip_frag_table_create π
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)
Creates a shiny new IP fragmentation table. Iconic.
Parameters:
bucket_numβ number of buckets in the hash table.bucket_entriesβ number of entries per bucket (that's hash associativity, iykyk). 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 thenbucket_num * bucket_entries.max_cyclesβ maximum TTL in cycles for each fragmented packet.socket_idβ thesocket_idargument is the socket identifier in the case of NUMA. The value can beSOCKET_ID_ANYif there is no NUMA constraints.
Returns: the pointer to the new allocated fragmentation table, on success. NULL on error.
π rte_ip_frag_table_destroy π
void rte_ip_frag_table_destroy (struct rte_ip_frag_tbl * tbl)
Frees an allocated IP fragmentation table. Bye bestie π.
Parameters:
tblβ fragmentation table to free.
π rte_ipv6_fragment_packet π
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)
This function implements the fragmentation of IPv6 packets. Splitting the vibe, IPv6 style.
Parameters:
pkt_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.
π rte_ipv6_frag_reassemble_packet π
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)
This function implements reassembly of fragmented IPv6 packets. Incoming mbuf should have its l2_len/l3_len fields setup correctly.
Parameters:
tblβ 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.
π rte_ipv6_frag_get_ipv6_fragment_header π
struct rte_ipv6_fragment_ext * rte_ipv6_frag_get_ipv6_fragment_header
(struct rte_ipv6_hdr * hdr) [inline], [static]
Returns a pointer to the packet's fragment header, if found. Heads up bestie: 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. Very "first glance only" energy.
Parameters:
hdrβ 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.
π rte_ipv4_fragment_packet π
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)
IPv4 fragmentation. This function implements the fragmentation of IPv4 packets.
Parameters:
pkt_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.
π rte_ipv4_fragment_copy_nonseg_packet π
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)
IPv4 fragmentation by copy. This function implements the fragmentation of IPv4 packets by copy non-segmented mbuf. It's 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.
Parameters:
pkt_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.
π rte_ipv4_frag_reassemble_packet π
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)
This function implements reassembly of fragmented IPv4 packets. Incoming mbufs should have its l2_len/l3_len fields setup correctly.
Parameters:
tblβ 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.
π rte_ipv4_frag_pkt_is_fragmented π
int rte_ipv4_frag_pkt_is_fragmented (const struct rte_ipv4_hdr * hdr)
[inline], [static]
Checks if the IPv4 packet is fragmented. Vibe check for fragments π.
Parameters:
hdrβ IPv4 header of the packet.
Returns: 1 if fragmented, 0 if not fragmented.
Definition at line 246 of file rte_ip_frag.h.
π rte_ip_frag_free_death_row π
void rte_ip_frag_free_death_row (struct rte_ip_frag_death_row * dr, uint32_t
prefetch)
Frees mbufs on a given death row. Dramatic name, very practical job.
Parameters:
drβ death row to free mbufs in.prefetchβ how many buffers to prefetch before freeing.
π rte_ip_frag_table_statistics_dump π
void rte_ip_frag_table_statistics_dump (FILE * f, const struct
rte_ip_frag_tbl * tbl)
Dumps fragmentation table statistics to a file.
Parameters:
fβ file to dump statistics to.tblβ fragmentation table to dump statistics from.
π rte_ip_frag_table_del_expired_entries π
void rte_ip_frag_table_del_expired_entries (struct rte_ip_frag_tbl * tbl,
struct rte_ip_frag_death_row * dr, uint64_t tms)
Deletes expired fragments. Cleanup era β¨.
Parameters:
tblβ table to delete expired fragments from.drβ death row to free buffers to.tmsβ current timestamp.
π Author π
Generated automatically by Doxygen for DPDK from the source code.
Okay bestie, that's the whole rte_ip_frag.h(3) situation π. This page is from DPDK, Version 26.03.0, and the cute little footer tag is rte_ip_frag.h(3). Slay your fragmentation safely, periodt πβ¨π.
π¦ where this page comes from
- nixos 26.05: dpdk 26.03
- nixpkgs unstable: dpdk 26.03
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms