rte_mbuf_ptype.h(3)
okay so this is rte_mbuf_ptype.h β the header you're reading this very man page about (rte_mbuf_ptype.h(3), out of the Library Functions Manual), and it's literally the packet-type bible for your mbufs π no cap.
π¦ NAME π¦
rte_mbuf_ptype.h β girl this is just the header itself, and it's giving packet type definitions β¨
β¨ SYNOPSIS β¨
bring the basics first, bestie:
#include <stddef.h>
#include <stdint.h>
π Macros π
every single one, verbatim, because we do not play with hex values around here:
#define RTE_PTYPE_UNKNOWN 0x00000000
#define RTE_PTYPE_L2_ETHER 0x00000001
#define RTE_PTYPE_L2_ETHER_TIMESYNC 0x00000002
#define RTE_PTYPE_L2_ETHER_ARP 0x00000003
#define RTE_PTYPE_L2_ETHER_LLDP 0x00000004
#define RTE_PTYPE_L2_ETHER_NSH 0x00000005
#define RTE_PTYPE_L2_ETHER_VLAN 0x00000006
#define RTE_PTYPE_L2_ETHER_QINQ 0x00000007
#define RTE_PTYPE_L2_ETHER_PPPOE 0x00000008
#define RTE_PTYPE_L2_ETHER_FCOE 0x00000009
#define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a
#define RTE_PTYPE_L2_MASK 0x0000000f
#define RTE_PTYPE_L3_IPV4 0x00000010
#define RTE_PTYPE_L3_IPV4_EXT 0x00000030
#define RTE_PTYPE_L3_IPV6 0x00000040
#define RTE_PTYPE_L3_IPV4_EXT_UNKNOWN 0x00000090
#define RTE_PTYPE_L3_IPV6_EXT 0x000000c0
#define RTE_PTYPE_L3_IPV6_EXT_UNKNOWN 0x000000e0
#define RTE_PTYPE_L3_MASK 0x000000f0
#define RTE_PTYPE_L4_TCP 0x00000100
#define RTE_PTYPE_L4_UDP 0x00000200
#define RTE_PTYPE_L4_FRAG 0x00000300
#define RTE_PTYPE_L4_SCTP 0x00000400
#define RTE_PTYPE_L4_ICMP 0x00000500
#define RTE_PTYPE_L4_NONFRAG 0x00000600
#define RTE_PTYPE_L4_IGMP 0x00000700
#define RTE_PTYPE_L4_ESP 0x00000800
#define RTE_PTYPE_L4_MASK 0x00000f00
#define RTE_PTYPE_TUNNEL_IP 0x00001000
#define RTE_PTYPE_TUNNEL_GRE 0x00002000
#define RTE_PTYPE_TUNNEL_VXLAN 0x00003000
#define RTE_PTYPE_TUNNEL_NVGRE 0x00004000
#define RTE_PTYPE_TUNNEL_GENEVE 0x00005000
#define RTE_PTYPE_TUNNEL_GRENAT 0x00006000
#define RTE_PTYPE_TUNNEL_GTPC 0x00007000
#define RTE_PTYPE_TUNNEL_GTPU 0x00008000
#define RTE_PTYPE_TUNNEL_ESP 0x00009000
#define RTE_PTYPE_TUNNEL_L2TP 0x0000a000
#define RTE_PTYPE_TUNNEL_VXLAN_GPE 0x0000b000
#define RTE_PTYPE_TUNNEL_MPLS_IN_GRE 0x0000c000
#define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000
#define RTE_PTYPE_TUNNEL_MASK 0x0000f000
#define RTE_PTYPE_INNER_L2_ETHER 0x00010000
#define RTE_PTYPE_INNER_L2_ETHER_VLAN 0x00020000
#define RTE_PTYPE_INNER_L2_ETHER_QINQ 0x00030000
#define RTE_PTYPE_INNER_L2_MASK 0x000f0000
#define RTE_PTYPE_INNER_L3_IPV4 0x00100000
#define RTE_PTYPE_INNER_L3_IPV4_EXT 0x00200000
#define RTE_PTYPE_INNER_L3_IPV6 0x00300000
#define RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN 0x00400000
#define RTE_PTYPE_INNER_L3_IPV6_EXT 0x00500000
#define RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN 0x00600000
#define RTE_PTYPE_INNER_L3_MASK 0x00f00000
#define RTE_PTYPE_INNER_L4_TCP 0x01000000
#define RTE_PTYPE_INNER_L4_UDP 0x02000000
#define RTE_PTYPE_INNER_L4_FRAG 0x03000000
#define RTE_PTYPE_INNER_L4_SCTP 0x04000000
#define RTE_PTYPE_INNER_L4_ICMP 0x05000000
#define RTE_PTYPE_INNER_L4_NONFRAG 0x06000000
#define RTE_PTYPE_INNER_L4_ESP 0x08000000
#define RTE_PTYPE_INNER_L4_MASK 0x0f000000
#define RTE_PTYPE_ALL_MASK 0x0fffffff
#define RTE_ETH_IS_IPV4_HDR(ptype)
#define RTE_ETH_IS_IPV6_HDR(ptype)
π«Ά Functions π«Ά
the little name-getters, all of them, untouched:
const char * rte_get_ptype_l2_name (uint32_t ptype)
const char * rte_get_ptype_l3_name (uint32_t ptype)
const char * rte_get_ptype_l4_name (uint32_t ptype)
const char * rte_get_ptype_tunnel_name (uint32_t ptype)
const char * rte_get_ptype_inner_l2_name (uint32_t ptype)
const char * rte_get_ptype_inner_l3_name (uint32_t ptype)
const char * rte_get_ptype_inner_l4_name (uint32_t ptype)
int rte_get_ptype_name (uint32_t ptype, char *buf, size_t buflen)
πΈ Detailed Description πΈ
RTE Mbuf Packet Types
ok so this file has all the declarations for stuff related to mbuf packet types. The packet type tells you what data the mbuf is carrying, and it lives inside the mbuf in a 32 bits field π
Those 32 bits get chopped up into several fields to mark packet types. And note that every field is indexical, bestie π
- Bit 3:0 is for L2 types.
- Bit 7:4 is for L3 or outer L3 (for tunneling case) types.
- Bit 11:8 is for L4 or outer L4 (for tunneling case) types.
- Bit 15:12 is for tunnel types.
- Bit 19:16 is for inner L2 types.
- Bit 23:20 is for inner L3 types.
- Bit 27:24 is for inner L4 types.
- Bit 31:28 is reserved.
And to be compatible with Vector PMD, these ones β RTE_PTYPE_L3_IPV4, RTE_PTYPE_L3_IPV4_EXT, RTE_PTYPE_L3_IPV6, RTE_PTYPE_L3_IPV6_EXT, RTE_PTYPE_L4_TCP, RTE_PTYPE_L4_UDP and RTE_PTYPE_L4_SCTP β should be kept as below, in a contiguous 7 bits. Don't touch, don't rearrange, just vibe.
Also, note: the L3 type values are picked that way for checking IPV4/IPV6 headers from a performance point of view. So if you're ever changing L3 type values in the future, bestie you must go read the annotations of RTE_ETH_IS_IPV4_HDR and RTE_ETH_IS_IPV6_HDR first. Do not skip that π
And one more: note that the packet types of the same packet, recognized by different hardware, may be different β because different hardware has different capability of packet type recognition. It's giving every NIC has its own personality π
examples:
< 'ether type'=0x0800 | 'version'=4, 'protocol'=0x29 | 'version'=6, 'next header'=0x3A | 'ICMPv6 header'>will be recognized on i40e hardware as packet type combination of,RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_IP | RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_ICMP.
< 'ether type'=0x86DD | 'version'=6, 'next header'=0x2F | 'GRE header' | 'version'=6, 'next header'=0x11 | 'UDP header'>will be recognized on i40e hardware as packet type combination of,RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_UDP.
Definition in file rte_mbuf_ptype.h.
π₯ Macro Definition Documentation π₯
ok this is the part where we go one macro at a time, and yes I'm doing all of them π
#define RTE_PTYPE_UNKNOWN 0x00000000
No packet type information. Straight up nothing, zero, the void π
Definition at line 75 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER 0x00000001
Ethernet packet type. It's used for the outer packet for tunneling cases.
Packet format: < 'ether type'=[0x0800|0x86DD]>
Definition at line 83 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_TIMESYNC 0x00000002
Ethernet packet type, but for time sync β°
Packet format: < 'ether type'=0x88F7>
Definition at line 90 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_ARP 0x00000003
ARP (Address Resolution Protocol) packet type.
Packet format: < 'ether type'=0x0806>
Definition at line 97 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_LLDP 0x00000004
LLDP (Link Layer Discovery Protocol) packet type.
Packet format: < 'ether type'=0x88CC>
Definition at line 104 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_NSH 0x00000005
NSH (Network Service Header) packet type.
Packet format: < 'ether type'=0x894F>
Definition at line 111 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_VLAN 0x00000006
VLAN packet type.
Packet format: < 'ether type'=[0x8100]>
Definition at line 118 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_QINQ 0x00000007
QinQ packet type. Double tags, double drama π
Packet format: < 'ether type'=[0x88A8]>
Definition at line 125 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_PPPOE 0x00000008
PPPOE packet type.
Packet format: < 'ether type'=[0x8863|0x8864]>
Definition at line 132 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_FCOE 0x00000009
FCoE packet type.
Packet format: < 'ether type'=[0x8906]>
Definition at line 139 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a
MPLS packet type.
Packet format: < 'ether type'=[0x8847|0x8848]>
Definition at line 146 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L2_MASK 0x0000000f
Mask of layer 2 packet types. It's used for the outer packet for tunneling cases.
Definition at line 151 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV4 0x00000010
IP (Internet Protocol) version 4 packet type. It's used for the outer packet for tunneling cases, and it does not contain any header option.
Packet format: < 'ether type'=0x0800 | 'version'=4, 'ihl'=5>
Definition at line 161 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV4_EXT 0x00000030
IP (Internet Protocol) version 4 packet type. It's used for the outer packet for tunneling cases, and it does contain header options.
Packet format: < 'ether type'=0x0800 | 'version'=4, 'ihl'=[6-15], 'options'>
Definition at line 171 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV6 0x00000040
IP (Internet Protocol) version 6 packet type. It's used for the outer packet for tunneling cases, and it does not contain any extension header.
Packet format: < 'ether type'=0x86DD | 'version'=6, 'next header'=0x3B>
Definition at line 181 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV4_EXT_UNKNOWN 0x00000090
IP (Internet Protocol) version 4 packet type. It's used for the outer packet for tunneling cases, and it may or may not contain header options. It's giving mystery π¦
Packet format: < 'ether type'=0x0800 | 'version'=4, 'ihl'=[5-15], <'options'>>
Definition at line 191 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV6_EXT 0x000000c0
IP (Internet Protocol) version 6 packet type. It's used for the outer packet for tunneling cases, and it does contain extension headers.
Packet format: < 'ether type'=0x86DD | 'version'=6, 'next header'=[0x0|0x2B|0x2C|0x32|0x33|0x3C|0x87], 'extension headers'>
Definition at line 202 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_IPV6_EXT_UNKNOWN 0x000000e0
IP (Internet Protocol) version 6 packet type. It's used for the outer packet for tunneling cases, and it may or may not contain extension headers.
Packet format: < 'ether type'=0x86DD | 'version'=6, 'next header'=[0x3B|0x0|0x2B|0x2C|0x32|0x33|0x3C|0x87], <'extension headers'>>
Definition at line 213 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L3_MASK 0x000000f0
Mask of layer 3 packet types. It's used for the outer packet for tunneling cases.
Definition at line 218 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_TCP 0x00000100
TCP (Transmission Control Protocol) packet type. It's used for the outer packet for tunneling cases.
Packet format: < 'ether type'=0x0800 | 'version'=4, 'protocol'=6, 'MF'=0, 'frag_offset'=0> or, < 'ether type'=0x86DD | 'version'=6, 'next header'=6>
Definition at line 230 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_UDP 0x00000200
UDP (User Datagram Protocol) packet type. It's used for the outer packet for tunneling cases.
Packet format: < 'ether type'=0x0800 | 'version'=4, 'protocol'=17, 'MF'=0, 'frag_offset'=0> or, < 'ether type'=0x86DD | 'version'=6, 'next header'=17>
Definition at line 242 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_FRAG 0x00000300
Fragmented IP (Internet Protocol) packet type. It's used for the outer packet for tunneling cases.
bestie this is where part 1 stops π β RTE_PTYPE_L4_FRAG is getting cut off mid-glow-up and the rest of the macros are pulling up in part 2 π
...and she's fragmented, bestie π so it refers to those packets of any IP types that can be recognized as fragmented. And here's the tea: a fragmented packet cannot be recognized as any other L4 types β like, at all:
RTE_PTYPE_L4_TCPRTE_PTYPE_L4_UDPRTE_PTYPE_L4_SCTPRTE_PTYPE_L4_ICMPRTE_PTYPE_L4_NONFRAGRTE_PTYPE_L4_IGMPRTE_PTYPE_L4_ESP
Packet format: <'ether type'=0x0800 | 'version'=4, 'MF'=1> or, <'ether type'=0x0800 | 'version'=4, 'frag_offset'!=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=44>
Definition at line 262 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_SCTP 0x00000400
SCTP (Stream Control Transmission Protocol) packet type</p> β¨ and yeah, it's used for the outer packet for tunneling cases, iykyk.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=132, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=132>
Definition at line 274 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_ICMP 0x00000500
ICMP (Internet Control Message Protocol) packet type π again, outer packet for tunneling cases, no cap.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=1, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=1>
Definition at line 286 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_NONFRAG 0x00000600
Non-fragmented IP (Internet Protocol) packet type β outer packet for tunneling cases again, she's consistent π
It's giving "any IP types, but make it unrecognizable as anything above." So it refers to those packets of any IP types, while cannot be recognized as any of the above L4 types:
RTE_PTYPE_L4_TCPRTE_PTYPE_L4_UDPRTE_PTYPE_L4_FRAG(for IPv6)RTE_PTYPE_L4_SCTPRTE_PTYPE_L4_ICMPRTE_PTYPE_L4_IGMP(for IPv4)RTE_PTYPE_L4_ESP
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'!=[1|2|6|17|50|132], 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'!=[1|6|17|44|50|132]>
Definition at line 303 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_IGMP 0x00000700
IGMP (Internet Group Management Protocol) packet type πΈ
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=2, 'MF'=0, 'frag_offset'=0>
Definition at line 311 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_ESP 0x00000800
ESP (IP Encapsulating Security Payload) transport packet type π₯
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=50, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=50>
Definition at line 322 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_L4_MASK 0x00000f00
Mask of layer 4 packet types β and yep, it's used for outer packet for tunneling cases too π«Ά
Definition at line 327 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_IP 0x00001000
IP (Internet Protocol) in IP (Internet Protocol) tunneling packet type π it's IP on IP on IP, literally the inception of packets.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=[4|41]> or, <'ether type'=0x86DD | 'version'=6, 'next header'=[4|41]>
Definition at line 338 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_GRE 0x00002000
GRE (Generic Routing Encapsulation) tunneling packet type β¨
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=47> or, <'ether type'=0x86DD | 'version'=6, 'next header'=47>
Definition at line 349 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_VXLAN 0x00003000
VXLAN (Virtual eXtensible Local Area Network) tunneling packet type π iconic, honestly.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=4789> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=4789>
Definition at line 362 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_NVGRE 0x00004000
NVGRE (Network Virtualization using Generic Routing Encapsulation) tunneling packet type π the acronym is longer than my patience.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=47 | 'protocol type'=0x6558> or, <'ether type'=0x86DD | 'version'=6, 'next header'=47 | 'protocol type'=0x6558'>
Definition at line 376 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_GENEVE 0x00005000
GENEVE (Generic Network Virtualization Encapsulation) tunneling packet type πΈ
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=6081> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=6081>
Definition at line 389 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_GRENAT 0x00006000
OK so Teredo, VXLAN (Virtual eXtensible Local Area Network) or GRE (Generic Routing Encapsulation) tunneling packets can all get recognized as this packet type β but only if they can't be recognized independently, like, as far as the hardware capability goes. It's the catch-all bestie π«Ά
Definition at line 396 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_GTPC 0x00007000
GTP-C (GPRS Tunnelling Protocol) control tunneling packet type β¨
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=2123> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=2123> or, <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'source port'=2123> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'source port'=2123>
Definition at line 416 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_GTPU 0x00008000
GTP-U (GPRS Tunnelling Protocol) user data tunneling packet type π
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=2152> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=2152>
Definition at line 428 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_ESP 0x00009000
ESP (IP Encapsulating Security Payload) tunneling packet type π₯
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=50> or, <'ether type'=0x86DD | 'version'=6, 'next header'=50>
Definition at line 439 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_L2TP 0x0000a000
L2TP (Layer 2 Tunneling Protocol) tunneling packet type π¦
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17> | 'destination port'=1701> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=1701> or, <'ether type'=0x0800 | 'version'=4, 'protocol'=115> or, <'ether type'=0x86DD | 'version'=6, 'protocol'=115>
Definition at line 458 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_VXLAN_GPE 0x0000b000
VXLAN-GPE (VXLAN Generic Protocol Extension) tunneling packet type β¨ it's giving "VXLAN but make it extended."
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=4790> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=4790>
Definition at line 471 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_MPLS_IN_GRE 0x0000c000
MPLS-in-GRE tunneling packet type (RFC 4023) π
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=47 | 'protocol'=0x8847> or, <'ether type'=0x0800 | 'version'=4, 'protocol'=47 | 'protocol'=0x8848> or, <'ether type'=0x86DD | 'version'=6, 'protocol'=47 | 'protocol'=0x8847> or, <'ether type'=0x86DD | 'version'=6, 'next header'=47 | 'protocol'=0x8848>
Definition at line 492 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000
MPLS-in-UDP tunneling packet type (RFC 7510) π two RFCs in a row, we love a documented queen.
Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=17 | 'destination port'=6635> or, <'ether type'=0x86DD | 'version'=6, 'next header'=17 | 'destination port'=6635>
Definition at line 505 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_TUNNEL_MASK 0x0000f000
Mask of tunneling packet types π that's the whole tunnel squad, masked.
Definition at line 509 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L2_ETHER 0x00010000
Ethernet packet type β and heads up, it's used for the inner packet type only π
Packet format (inner only): <'ether type'=[0x800|0x86DD]>
Definition at line 517 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L2_ETHER_VLAN 0x00020000
Ethernet packet type with VLAN (Virtual Local Area Network) tag π
Packet format (inner only): <'ether type'=[0x800|0x86DD], vlan=[1-4095]>
Definition at line 524 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L2_ETHER_QINQ 0x00030000
QinQ packet type β¨ double-tagged, double the drama.
Packet format: <'ether type'=[0x88A8]>
Definition at line 531 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L2_MASK 0x000f0000
Mask of inner layer 2 packet types π«Ά
Definition at line 535 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV4 0x00100000
IP (Internet Protocol) version 4 packet type β inner packet only, and it does not contain any header option. Clean. Minimalist. Periodt.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'ihl'=5>
Definition at line 544 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV4_EXT 0x00200000
IP (Internet Protocol) version 4 packet type β inner packet only, and this one does contain header options π she's got baggage (affectionate).
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'ihl'=[6-15], 'options'>
Definition at line 553 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV6 0x00300000
IP (Internet Protocol) version 6 packet type β inner packet only, and no extension header at all, unlike some people π
Packet format (inner only): <'ether type'=0x86DD | 'version'=6, 'next header'=0x3B>
Definition at line 562 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN 0x00400000
IP (Internet Protocol) version 4 packet type β inner packet only, and it may or maynot contain header options. The ambiguity? Immaculate. The indecision? Real.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'ihl'=[5-15], <'options'>>
Definition at line 571 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV6_EXT 0x00500000
IP (Internet Protocol) version 6 packet type β inner packet only, and it contains extension headers π₯
Packet format (inner only): <'ether type'=0x86DD | 'version'=6, 'next header'=[0x0|0x2B|0x2C|0x32|0x33|0x3C|0x87], 'extension headers'>
Definition at line 581 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN 0x00600000
IP (Internet Protocol) version 6 packet type β inner packet only, and it may or maynot contain extension headers π¦ the plot is, as ever, unclear.
Packet format (inner only): <'ether type'=0x86DD | 'version'=6, 'next header'=[0x3B|0x0|0x2B|0x2C|0x32|0x33|0x3C|0x87], <'extension headers'>>
Definition at line 592 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L3_MASK 0x00f00000
Mask of inner layer 3 packet types β¨ masking, but make it inner.
Definition at line 596 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_TCP 0x01000000
TCP (Transmission Control Protocol) packet type β inner packet only, always and forever π
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'protocol'=6, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=6>
Definition at line 608 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_UDP 0x02000000
UDP (User Datagram Protocol) packet type β inner packet only, bestie πΈ
#define RTE_PTYPE_INNER_L4_FRAGβ0x03000000
Fragmented IP (Internet Protocol) packet type π§© and yep, it's inner packet only. Also it may or maynot have a layer 4 packet β that ambiguity is literally in the source, we're not fixing it.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'MF'=1> or, <'ether type'=0x0800 | 'version'=4, 'frag_offset'!=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=44>
Definition at line 635 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_SCTPβ0x04000000
SCTP (Stream Control Transmission Protocol) packet type π inner packet only, per usual bestie.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'protocol'=132, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=132>
Definition at line 647 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_ICMPβ0x05000000
ICMP (Internet Control Message Protocol) packet type π£ inner packet only, always and forever.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'protocol'=1, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=1>
Definition at line 659 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_NONFRAGβ0x06000000
Non-fragmented IP (Internet Protocol) packet type β¨ inner packet only, and it may or maynot have other unknown layer 4 packet types (yes, that's the wording, no we will not elaborate).
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'protocol'!=[1|6|17|50|132], 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'!=[1|6|17|44|50|132]>
Definition at line 672 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_ESPβ0x08000000
ESP (IP Encapsulating Security Payload) transport packet type π inner packet only, you know the drill.
Packet format (inner only): <'ether type'=0x0800 | 'version'=4, 'protocol'=50, 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'=50>
Definition at line 684 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_INNER_L4_MASKβ0x0f000000
Mask of inner layer 4 packet types π
Definition at line 688 of file rte_mbuf_ptype.h.
#define RTE_PTYPE_ALL_MASKβ0x0fffffff
All valid layer masks π (the whole squad, masked up).
Definition at line 692 of file rte_mbuf_ptype.h.
#define RTE_ETH_IS_IPV4_HDR( ptype)
Its value, verbatim:
((ptype) & RTE_PTYPE_L3_IPV4)
Check if the (outer) L3 header is IPv4 π and here's the cute trick: instead of comparing every single IPv4 type one by one (sooo much work), bit 4 got picked to mean IPv4 only. So checking bit 4 tells you if it's an IPV4 packet. Periodt.
Definition at line 699 of file rte_mbuf_ptype.h.
#define RTE_ETH_IS_IPV6_HDR( ptype)
Its value, also verbatim:
((ptype) & RTE_PTYPE_L3_IPV6)
Check if the (outer) L3 header is IPv6 π same deal: rather than comparing every IPv6 type one at a time, bit 6 is reserved for IPv6 only, so checking bit 6 decides if it's an IPV6 packet. She's efficient, she's iconic.
Definition at line 706 of file rte_mbuf_ptype.h.
π οΈ Function Documentation
Every single one of these hands you back a name string, and every single one swears it will never hand you a NULL. Collect them all πΈ
const char * rte_get_ptype_l2_name (uint32_t ptype)
Get the name of the l2 packet type π
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_l3_name (uint32_t ptype)
Get the name of the l3 packet type π
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_l4_name (uint32_t ptype)
Get the name of the l4 packet type π
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_tunnel_name (uint32_t ptype)
Get the name of the tunnel packet type π
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_inner_l2_name (uint32_t ptype)
Get the name of the inner_l2 packet type π«§
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_inner_l3_name (uint32_t ptype)
Get the name of the inner_l3 packet type π«§
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
const char * rte_get_ptype_inner_l4_name (uint32_t ptype)
Get the name of the inner_l4 packet type π«§
Parameters
ptypeβ The packet type value.
Returns
- A non-null string describing the packet type.
int rte_get_ptype_name (uint32_t ptype, char * buf, size_t buflen)
Write the packet type name into the buffer βοΈ (you bring the buffer, she brings the name.)
Parameters
ptypeβ The packet type value.bufβ The buffer where the string is written.buflenβ The length of the buffer.
Returns
0on success π(-1)if the buffer is too small π rude but fair
π Author
Generated automatically by Doxygen for DPDK from the source code. (Not a human, just a very diligent robot with a documentation kink. We respect it.)
And that's the whole page bestie, we made it π This was DPDK Version 25.11.3, the rte_mbuf_ptype.h(3) manual β give it a lil kiss goodbye, you now know more about packet type bits than 99% of the group chat πΈβ¨π
π¦ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 Β· BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms