CNDP  22.08.0
pktmbuf_ptype.h File Reference
#include <net/cne_ip.h>
#include <net/cne_udp.h>
#include <net/cne_tcp.h>
#include <net/cne_sctp.h>
#include <stddef.h>
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  cne_net_hdr_lens
 

Macros

#define CNE_PTYPE_UNKNOWN   0x00000000
 
#define CNE_PTYPE_L2_ETHER   0x00000001
 
#define CNE_PTYPE_L2_ETHER_TIMESYNC   0x00000002
 
#define CNE_PTYPE_L2_ETHER_ARP   0x00000003
 
#define CNE_PTYPE_L2_ETHER_LLDP   0x00000004
 
#define CNE_PTYPE_L2_ETHER_NSH   0x00000005
 
#define CNE_PTYPE_L2_ETHER_VLAN   0x00000006
 
#define CNE_PTYPE_L2_ETHER_QINQ   0x00000007
 
#define CNE_PTYPE_L2_ETHER_PPPOE   0x00000008
 
#define CNE_PTYPE_L2_ETHER_FCOE   0x00000009
 
#define CNE_PTYPE_L2_ETHER_MPLS   0x0000000a
 
#define CNE_PTYPE_L2_MASK   0x0000000f
 
#define CNE_PTYPE_L3_IPV4   0x00000010
 
#define CNE_PTYPE_L3_IPV4_EXT   0x00000030
 
#define CNE_PTYPE_L3_IPV6   0x00000040
 
#define CNE_PTYPE_L3_IPV4_EXT_UNKNOWN   0x00000090
 
#define CNE_PTYPE_L3_IPV6_EXT   0x000000c0
 
#define CNE_PTYPE_L3_IPV6_EXT_UNKNOWN   0x000000e0
 
#define CNE_PTYPE_L3_MASK   0x000000f0
 
#define CNE_PTYPE_L4_TCP   0x00000100
 
#define CNE_PTYPE_L4_UDP   0x00000200
 
#define CNE_PTYPE_L4_FRAG   0x00000300
 
#define CNE_PTYPE_L4_SCTP   0x00000400
 
#define CNE_PTYPE_L4_ICMP   0x00000500
 
#define CNE_PTYPE_L4_NONFRAG   0x00000600
 
#define CNE_PTYPE_L4_IGMP   0x00000700
 
#define CNE_PTYPE_L4_MASK   0x00000f00
 
#define CNE_PTYPE_TUNNEL_IP   0x00001000
 
#define CNE_PTYPE_TUNNEL_GRE   0x00002000
 
#define CNE_PTYPE_TUNNEL_VXLAN   0x00003000
 
#define CNE_PTYPE_TUNNEL_NVGRE   0x00004000
 
#define CNE_PTYPE_TUNNEL_GENEVE   0x00005000
 
#define CNE_PTYPE_TUNNEL_GRENAT   0x00006000
 
#define CNE_PTYPE_TUNNEL_GTPC   0x00007000
 
#define CNE_PTYPE_TUNNEL_GTPU   0x00008000
 
#define CNE_PTYPE_TUNNEL_ESP   0x00009000
 
#define CNE_PTYPE_TUNNEL_L2TP   0x0000a000
 
#define CNE_PTYPE_TUNNEL_VXLAN_GPE   0x0000b000
 
#define CNE_PTYPE_TUNNEL_MPLS_IN_GRE   0x0000c000
 
#define CNE_PTYPE_TUNNEL_MPLS_IN_UDP   0x0000d000
 
#define CNE_PTYPE_TUNNEL_MASK   0x0000f000
 
#define CNE_PTYPE_INNER_L2_ETHER   0x00010000
 
#define CNE_PTYPE_INNER_L2_ETHER_VLAN   0x00020000
 
#define CNE_PTYPE_INNER_L2_ETHER_QINQ   0x00030000
 
#define CNE_PTYPE_INNER_L2_MASK   0x000f0000
 
#define CNE_PTYPE_INNER_L3_IPV4   0x00100000
 
#define CNE_PTYPE_INNER_L3_IPV4_EXT   0x00200000
 
#define CNE_PTYPE_INNER_L3_IPV6   0x00300000
 
#define CNE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN   0x00400000
 
#define CNE_PTYPE_INNER_L3_IPV6_EXT   0x00500000
 
#define CNE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN   0x00600000
 
#define CNE_PTYPE_INNER_L3_MASK   0x00f00000
 
#define CNE_PTYPE_INNER_L4_TCP   0x01000000
 
#define CNE_PTYPE_INNER_L4_UDP   0x02000000
 
#define CNE_PTYPE_INNER_L4_FRAG   0x03000000
 
#define CNE_PTYPE_INNER_L4_SCTP   0x04000000
 
#define CNE_PTYPE_INNER_L4_ICMP   0x05000000
 
#define CNE_PTYPE_INNER_L4_NONFRAG   0x06000000
 
#define CNE_PTYPE_INNER_L4_MASK   0x0f000000
 
#define CNE_PTYPE_ALL_MASK   0x0fffffff
 
#define CNE_ETH_IS_IPV4_HDR(ptype)   ((ptype)&CNE_PTYPE_L3_IPV4)
 
#define CNE_ETH_IS_IPV6_HDR(ptype)   ((ptype)&CNE_PTYPE_L3_IPV6)
 

Functions

CNDP_API uint32_t cne_get_ptype (const pktmbuf_t *m, struct cne_net_hdr_lens *hdr_lens, uint32_t layers)
 
CNDP_API const char * cne_get_ptype_l2_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_l3_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_l4_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_tunnel_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_inner_l2_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_inner_l3_name (uint32_t ptype)
 
CNDP_API const char * cne_get_ptype_inner_l4_name (uint32_t ptype)
 
CNDP_API int cne_get_ptype_name (uint32_t ptype, char *buf, size_t buflen)
 

Detailed Description

CNE Pktmbuf Packet Types

This file contains declarations for features related to pktmbuf packet types. The packet type gives information about the data carried by the pktmbuf, and is stored in the pktmbuf 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, CNE_PTYPE_L3_IPV4, CNE_PTYPE_L3_IPV4_EXT, CNE_PTYPE_L3_IPV6, CNE_PTYPE_L3_IPV6_EXT, CNE_PTYPE_L4_TCP, CNE_PTYPE_L4_UDP and CNE_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 CNE_ETH_IS_IPV4_HDR and CNE_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, CNE_PTYPE_L2_ETHER | CNE_PTYPE_L3_IPV4_EXT_UNKNOWN | CNE_PTYPE_TUNNEL_IP | CNE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | CNE_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, CNE_PTYPE_L2_ETHER | CNE_PTYPE_L3_IPV6_EXT_UNKNOWN | CNE_PTYPE_TUNNEL_GRENAT | CNE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | CNE_PTYPE_INNER_L4_UDP.

Definition in file pktmbuf_ptype.h.

Macro Definition Documentation

◆ CNE_PTYPE_UNKNOWN

#define CNE_PTYPE_UNKNOWN   0x00000000

No packet type information.

Definition at line 94 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER

#define CNE_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 102 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_TIMESYNC

#define CNE_PTYPE_L2_ETHER_TIMESYNC   0x00000002

Ethernet packet type for time sync.

Packet format: <'ether type'=0x88F7>

Definition at line 109 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_ARP

#define CNE_PTYPE_L2_ETHER_ARP   0x00000003

ARP (Address Resolution Protocol) packet type.

Packet format: <'ether type'=0x0806>

Definition at line 116 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_LLDP

#define CNE_PTYPE_L2_ETHER_LLDP   0x00000004

LLDP (Link Layer Discovery Protocol) packet type.

Packet format: <'ether type'=0x88CC>

Definition at line 123 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_NSH

#define CNE_PTYPE_L2_ETHER_NSH   0x00000005

NSH (Network Service Header) packet type.

Packet format: <'ether type'=0x894F>

Definition at line 130 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_VLAN

#define CNE_PTYPE_L2_ETHER_VLAN   0x00000006

VLAN packet type.

Packet format: <'ether type'=[0x8100]>

Definition at line 137 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_QINQ

#define CNE_PTYPE_L2_ETHER_QINQ   0x00000007

QinQ packet type.

Packet format: <'ether type'=[0x88A8]>

Definition at line 144 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_PPPOE

#define CNE_PTYPE_L2_ETHER_PPPOE   0x00000008

PPPOE packet type.

Packet format: <'ether type'=[0x8863|0x8864]>

Definition at line 151 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_FCOE

#define CNE_PTYPE_L2_ETHER_FCOE   0x00000009

FCoE packet type.

Packet format: <'ether type'=[0x8906]>

Definition at line 158 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_ETHER_MPLS

#define CNE_PTYPE_L2_ETHER_MPLS   0x0000000a

MPLS packet type.

Packet format: <'ether type'=[0x8847|0x8848]>

Definition at line 165 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L2_MASK

#define CNE_PTYPE_L2_MASK   0x0000000f

Mask of layer 2 packet types. It is used for outer packet for tunneling cases.

Definition at line 170 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV4

#define CNE_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 180 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV4_EXT

#define CNE_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 190 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV6

#define CNE_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 200 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV4_EXT_UNKNOWN

#define CNE_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 210 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV6_EXT

#define CNE_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 221 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_IPV6_EXT_UNKNOWN

#define CNE_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 232 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L3_MASK

#define CNE_PTYPE_L3_MASK   0x000000f0

Mask of layer 3 packet types. It is used for outer packet for tunneling cases.

Definition at line 237 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_TCP

#define CNE_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 249 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_UDP

#define CNE_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 261 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_FRAG

#define CNE_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 (CNE_PTYPE_L4_TCP, CNE_PTYPE_L4_UDP, CNE_PTYPE_L4_SCTP, CNE_PTYPE_L4_ICMP, CNE_PTYPE_L4_NONFRAG).

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 281 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_SCTP

#define CNE_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 293 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_ICMP

#define CNE_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 305 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_NONFRAG

#define CNE_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 (CNE_PTYPE_L4_TCP, CNE_PTYPE_L4_UDP, CNE_PTYPE_L4_FRAG, CNE_PTYPE_L4_SCTP, CNE_PTYPE_L4_ICMP).

Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'!=[6|17|132|1], 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'!=[6|17|44|132|1]>

Definition at line 321 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_IGMP

#define CNE_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 329 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_L4_MASK

#define CNE_PTYPE_L4_MASK   0x00000f00

Mask of layer 4 packet types. It is used for outer packet for tunneling cases.

Definition at line 334 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_IP

#define CNE_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 345 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_GRE

#define CNE_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 356 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_VXLAN

#define CNE_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 369 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_NVGRE

#define CNE_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 383 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_GENEVE

#define CNE_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 396 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_GRENAT

#define CNE_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 403 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_GTPC

#define CNE_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 423 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_GTPU

#define CNE_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 435 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_ESP

#define CNE_PTYPE_TUNNEL_ESP   0x00009000

ESP (IP Encapsulating Security Payload) tunneling packet type.

Packet format: <'ether type'=0x0800 | 'version'=4, 'protocol'=51> or, <'ether type'=0x86DD | 'version'=6, 'next header'=51>

Definition at line 446 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_L2TP

#define CNE_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 465 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_VXLAN_GPE

#define CNE_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 478 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_MPLS_IN_GRE

#define CNE_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 499 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_MPLS_IN_UDP

#define CNE_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 512 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_TUNNEL_MASK

#define CNE_PTYPE_TUNNEL_MASK   0x0000f000

Mask of tunneling packet types.

Definition at line 516 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L2_ETHER

#define CNE_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 524 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L2_ETHER_VLAN

#define CNE_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 531 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L2_ETHER_QINQ

#define CNE_PTYPE_INNER_L2_ETHER_QINQ   0x00030000

QinQ packet type.

Packet format: <'ether type'=[0x88A8]>

Definition at line 538 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L2_MASK

#define CNE_PTYPE_INNER_L2_MASK   0x000f0000

Mask of inner layer 2 packet types.

Definition at line 542 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV4

#define CNE_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 551 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV4_EXT

#define CNE_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 560 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV6

#define CNE_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 569 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN

#define CNE_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 578 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV6_EXT

#define CNE_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 588 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN

#define CNE_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 599 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L3_MASK

#define CNE_PTYPE_INNER_L3_MASK   0x00f00000

Mask of inner layer 3 packet types.

Definition at line 603 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_TCP

#define CNE_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 615 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_UDP

#define CNE_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 627 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_FRAG

#define CNE_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 642 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_SCTP

#define CNE_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 654 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_ICMP

#define CNE_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 666 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_NONFRAG

#define CNE_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'!=[6|17|132|1], 'MF'=0, 'frag_offset'=0> or, <'ether type'=0x86DD | 'version'=6, 'next header'!=[6|17|44|132|1]>

Definition at line 679 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_INNER_L4_MASK

#define CNE_PTYPE_INNER_L4_MASK   0x0f000000

Mask of inner layer 4 packet types.

Definition at line 683 of file pktmbuf_ptype.h.

◆ CNE_PTYPE_ALL_MASK

#define CNE_PTYPE_ALL_MASK   0x0fffffff

All valid layer masks.

Definition at line 687 of file pktmbuf_ptype.h.

◆ CNE_ETH_IS_IPV4_HDR

#define CNE_ETH_IS_IPV4_HDR (   ptype)    ((ptype)&CNE_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 694 of file pktmbuf_ptype.h.

◆ CNE_ETH_IS_IPV6_HDR

#define CNE_ETH_IS_IPV6_HDR (   ptype)    ((ptype)&CNE_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 701 of file pktmbuf_ptype.h.

Function Documentation

◆ cne_get_ptype()

CNDP_API uint32_t cne_get_ptype ( const pktmbuf_t m,
struct cne_net_hdr_lens hdr_lens,
uint32_t  layers 
)

Parse an Ethernet packet to get its packet type.

This function parses the network headers in mbuf data and return its packet type.

If it is provided by the user, it also fills a cne_net_hdr_lens structure that contains the lengths of the parsed network headers. Each length field is valid only if the associated packet type is set. For instance, hdr_lens->l2_len is valid only if (retval & CNE_PTYPE_L2_MASK) != CNE_PTYPE_UNKNOWN.

Supported packet types are: L2: Ether, VLAN, QinQ L3: IPv4, IPv6 L4: TCP, UDP, SCTP Tunnels: IPv4, IPv6, GRE, NVGRE

Parameters
mThe packet mbuf to be parsed.
hdr_lensA pointer to a structure where the header lengths will be returned, or NULL.
layersList of layers to parse. The function will stop at the first empty layer. Examples:
  • To parse all known layers, use CNE_PTYPE_ALL_MASK.
  • To parse only L2 and L3, use CNE_PTYPE_L2_MASK | CNE_PTYPE_L3_MASK
Returns
The packet type of the packet.

◆ cne_get_ptype_l2_name()

CNDP_API const char* cne_get_ptype_l2_name ( uint32_t  ptype)

Get the name of the l2 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_l3_name()

CNDP_API const char* cne_get_ptype_l3_name ( uint32_t  ptype)

Get the name of the l3 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_l4_name()

CNDP_API const char* cne_get_ptype_l4_name ( uint32_t  ptype)

Get the name of the l4 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_tunnel_name()

CNDP_API const char* cne_get_ptype_tunnel_name ( uint32_t  ptype)

Get the name of the tunnel packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_inner_l2_name()

CNDP_API const char* cne_get_ptype_inner_l2_name ( uint32_t  ptype)

Get the name of the inner_l2 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_inner_l3_name()

CNDP_API const char* cne_get_ptype_inner_l3_name ( uint32_t  ptype)

Get the name of the inner_l3 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_inner_l4_name()

CNDP_API const char* cne_get_ptype_inner_l4_name ( uint32_t  ptype)

Get the name of the inner_l4 packet type

Parameters
ptypeThe packet type value.
Returns
A non-null string describing the packet type.

◆ cne_get_ptype_name()

CNDP_API int cne_get_ptype_name ( uint32_t  ptype,
char *  buf,
size_t  buflen 
)

Write the packet type name into the buffer

Parameters
ptypeThe packet type value.
bufThe buffer where the string is written.
buflenThe length of the buffer.
Returns
  • 0 on success
  • (-1) if the buffer is too small