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