---
name: "RTE_PTYPE_INNER_L3_IPV4_EXT"
section: "3"
platform: "linux"
package: "dpdk-doc"
version: "24.11.4-0+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/rte_mbuf_ptype.h"
---

# RTE\_PTYPE\_INNER\_L3\_IPV4\_EXT(3)

Part of [rte\_mbuf\_ptype.h(3)](/rte_mbuf_ptype.h/3.md).

## NAME

rte\_mbuf\_ptype.h

## SYNOPSIS

`#include <stddef.h>`\
 `#include <stdint.h>`\

### Macros

\#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)   ((ptype) & **RTE\_PTYPE\_L3\_IPV4**)\
 \#define **RTE\_ETH\_IS\_IPV6\_HDR**(ptype)   ((ptype) & **RTE\_PTYPE\_L3\_IPV6**)\

### Functions

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

This file contains declarations for features related to mbuf packet types. The packet type gives information about the data carried by the mbuf, and is stored in the mbuf in a 32 bits field.

The 32 bits are divided into several fields to mark packet types. Note that each field is indexical.

- •

  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.

To be compatible with Vector PMD, 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.

Note that L3 types values are selected for checking IPV4/IPV6 header from performance point of view. Reading annotations of RTE\_ETH\_IS\_IPV4\_HDR and RTE\_ETH\_IS\_IPV6\_HDR is needed for any future changes of L3 type values.

Note that the packet types of the same packet recognized by different hardware may be different, as different hardware may have different capability of packet type recognition.

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

### #define RTE\_PTYPE\_UNKNOWN 0x00000000

No packet type information.

Definition at line **75** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_PTYPE\_L2\_ETHER 0x00000001

Ethernet packet type. It is used for 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 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.

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 is used for 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 is used for outer packet for tunneling cases, and 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 is used for outer packet for tunneling cases, and contains 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 is used for outer packet for tunneling cases, and 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 is used for outer packet for tunneling cases, and may or maynot contain header options.

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 is used for outer packet for tunneling cases, and contains 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 is used for outer packet for tunneling cases, and may or maynot 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 is used for 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 is used for 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 is used for 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 is used for outer packet for tunneling cases.

It refers to those packets of any IP types, which can be recognized as fragmented. A fragmented packet cannot be recognized as any other L4 types (RTE\_PTYPE\_L4\_TCP, RTE\_PTYPE\_L4\_UDP, RTE\_PTYPE\_L4\_SCTP, RTE\_PTYPE\_L4\_ICMP, RTE\_PTYPE\_L4\_NONFRAG, RTE\_PTYPE\_L4\_IGMP, RTE\_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. It is used for outer packet for tunneling cases.

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. It is used for outer packet for tunneling cases.

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. It is used for outer packet for tunneling cases.

It refers to those packets of any IP types, while cannot be recognized as any of above L4 types (RTE\_PTYPE\_L4\_TCP, RTE\_PTYPE\_L4\_UDP, RTE\_PTYPE\_L4\_FRAG (for IPv6), RTE\_PTYPE\_L4\_SCTP, RTE\_PTYPE\_L4\_ICMP, RTE\_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. It is used for outer packet for tunneling cases.

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.

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.

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.

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

Tunneling packet type of Teredo, VXLAN (Virtual eXtensible Local Area Network) or GRE (Generic Routing Encapsulation) could be recognized as this packet type, if they can not be recognized independently as of hardware capability.

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.

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).

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.

Definition at line **509** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_PTYPE\_INNER\_L2\_ETHER 0x00010000

Ethernet packet type. It is used for 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.

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. It is used for inner packet only, and does not contain any header option.

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. It is used for inner packet only, and contains header options.

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. It is used for inner packet only, and does not contain any extension header.

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. It is used for inner packet only, and may or maynot contain header options.

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. It is used for inner packet only, and 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. It is used for inner packet only, and may or maynot contain extension headers.

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.

Definition at line **596** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_PTYPE\_INNER\_L4\_TCP 0x01000000

TCP (Transmission Control Protocol) packet type. It is used for inner packet only.

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. It is used for inner packet only.

Packet format (inner only): \<'ether type'=0x0800 \| 'version'=4, 'protocol'=17, 'MF'=0, 'frag\_offset'=0\> or, \<'ether type'=0x86DD \| 'version'=6, 'next header'=17\>

Definition at line **620** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_PTYPE\_INNER\_L4\_FRAG 0x03000000

Fragmented IP (Internet Protocol) packet type. It is used for inner packet only, and may or maynot have layer 4 packet.

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. It is used for inner packet only.

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. It is used for inner packet only.

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. It is used for inner packet only, and may or maynot have other unknown layer 4 packet types.

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. It is used for inner packet only.

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.

Definition at line **692** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_ETH\_IS\_IPV4\_HDR(ptype) ((ptype) & RTE\_PTYPE\_L3\_IPV4)

Check if the (outer) L3 header is IPv4. To avoid comparing IPv4 types one by one, bit 4 is selected to be used for IPv4 only. Then checking bit 4 can determine if it is an IPV4 packet.

Definition at line **699** of file **rte\_mbuf\_ptype.h**.

### #define RTE\_ETH\_IS\_IPV6\_HDR(ptype) ((ptype) & RTE\_PTYPE\_L3\_IPV6)

Check if the (outer) L3 header is IPv6. To avoid comparing IPv6 types one by one, bit 6 is selected to be used for IPv6 only. Then checking bit 6 can determine if it is an IPV6 packet.

Definition at line **706** of file **rte\_mbuf\_ptype.h**.

## Function Documentation

### 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

**Parameters**

*ptype* The packet type value. \
 *buf* The buffer where the string is written. \
 *buflen* The length of the buffer.

**Returns**

- •

  0 on success

- •

  (-1) if the buffer is too small

## Author

Generated automatically by Doxygen for DPDK from the source code.
