From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f42.google.com (mail-wg0-f42.google.com [74.125.82.42]) by dpdk.org (Postfix) with ESMTP id 9CCFF1396 for ; Thu, 2 Jul 2015 11:32:03 +0200 (CEST) Received: by wgck11 with SMTP id k11so58032395wgc.0 for ; Thu, 02 Jul 2015 02:32:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=jG22YpV7aMpbtBPiUstp2wNAN5YSYw4NfW7OHArNhlQ=; b=lTaC0ZFfBvJpSsyXWRKPGgs+bh8oixQhYyCBUiQyWd+xM9uE5UsRPFsXYiejN+dQnj mJgS68NiKN7NlZiPWmpBrEhE2dg2srh5IjuR1lr+DaLWwPXU0mWG+WdfGrZX08pP0IQG 0BgnZFEdiGxX1mHlIbIMmICLN8iVDaxygWpZuy95cIyc5mBAQnknSLMUzJEBXH4Vexac pRAkcTVZJMK6FHZ7xjnQaEBFKUPfiHJ2ZEjWDPwIvINzQrQrpDCZ+++p6fRL4tuyKbwM SnWslihrEiAmGnECthhSU4aozi+nJgIkadLogxjzw3xxBm+b6QHRHaSrAEuTkaGb7bgJ hQJw== X-Gm-Message-State: ALoCoQkh1vTAwBeyPINbvXqwojdu8gWIWRK0KPhO4UanNzr5uRvu6n1vgA4fEEjgBDNbG/RzUbBb X-Received: by 10.180.96.170 with SMTP id dt10mr52669086wib.42.1435829523505; Thu, 02 Jul 2015 02:32:03 -0700 (PDT) Received: from [10.16.0.195] (6wind.net2.nerim.net. [213.41.151.210]) by mx.google.com with ESMTPSA id ma15sm26252098wic.20.2015.07.02.02.32.02 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 02 Jul 2015 02:32:02 -0700 (PDT) Message-ID: <5595050C.2060909@6wind.com> Date: Thu, 02 Jul 2015 11:31:56 +0200 From: Olivier MATZ User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.6.0 MIME-Version: 1.0 To: "Zhang, Helin" , "dev@dpdk.org" References: <1434701661-9943-1-git-send-email-helin.zhang@intel.com> <1435024235-19483-1-git-send-email-helin.zhang@intel.com> <1435024235-19483-4-git-send-email-helin.zhang@intel.com> <559256B8.4080703@6wind.com> In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v8 03/18] mbuf: add definitions of unified packet types X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2015 09:32:03 -0000 Hi Helin, On 07/02/2015 03:30 AM, Zhang, Helin wrote: > Hi Oliver > > Thanks for your helps! > >> -----Original Message----- >> From: Olivier MATZ [mailto:olivier.matz@6wind.com] >> Sent: Tuesday, June 30, 2015 4:44 PM >> To: Zhang, Helin; dev@dpdk.org >> Cc: Cao, Waterman; Liang, Cunming; Liu, Jijiang; Ananyev, Konstantin; Richardson, >> Bruce; yongwang@vmware.com; Wu, Jingjing >> Subject: Re: [PATCH v8 03/18] mbuf: add definitions of unified packet types >> >> Hi Helin, >> >> This is greatly documented, thanks! >> Please find a small comment below. >> >> On 06/23/2015 03:50 AM, Helin Zhang wrote: >>> As there are only 6 bit flags in ol_flags for indicating packet types, >>> which is not enough to describe all the possible packet types hardware >>> can recognize. For example, i40e hardware can recognize more than 150 >>> packet types. Unified packet type is composed of L2 type, L3 type, L4 >>> type, tunnel type, inner L2 type, inner L3 type and inner L4 type >>> fields, and can be stored in 'struct rte_mbuf' of 32 bits field >>> 'packet_type'. >>> To avoid breaking ABI compatibility, all the changes would be enabled >>> by RTE_NEXT_ABI, which is disabled by default. >>> >>> [...] >>> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h >>> index 0315561..0ee0c55 100644 >>> --- a/lib/librte_mbuf/rte_mbuf.h >>> +++ b/lib/librte_mbuf/rte_mbuf.h >>> @@ -201,6 +201,493 @@ extern "C" { >>> /* Use final bit of flags to indicate a control mbuf */ >>> #define CTRL_MBUF_FLAG (1ULL << 63) /**< Mbuf contains control >> data */ >>> >>> +#ifdef RTE_NEXT_ABI >>> +/* >>> + * 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_MAC | >>> + * 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_MAC | >>> + * RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | >>> + * RTE_PTYPE_TUNNEL_GRENAT | >>> + * RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | >>> + * RTE_PTYPE_INNER_L4_UDP. >>> + */ >>> +#define RTE_PTYPE_UNKNOWN 0x00000000 >>> +/** >>> + * MAC (Media Access Control) packet type. >>> + * It is used for outer packet for tunneling cases. >>> + * >>> + * Packet format: >>> + * <'ether type'=[0x0800|0x86DD|others]> */ >>> +#define RTE_PTYPE_L2_MAC 0x00000001 >> >> I'm wondering if RTE_PTYPE_L2_ETHER is not a better name? > Ethernet includes both Data Link Layer and Physical Layer, while MAC is for Data Link > Layer only. I would prefer to keep 'MAC' in the names, rather than 'ether'. > Any opinions from others? Just to precise what I'm saying: MAC is the interface between the logical link and the physical layer. It is different depending on the physical media (Ethernet, Token Ring, WLAN, ...). Every packet has a MAC layer and I think "MAC" does not bring any information. Having "ETHER" in the name would inform the software that it can expect an ethernet header. In the future, I would expect to have more L2 types like PPP. I also have another question about RTE_PTYPE_L2_MAC. You describe it as "<'ether type'=[0x0800|0x86DD|others]>". What is the meaning of "others"? Does it mean that it is valid to set RTE_PTYPE_L2_MAC for any received packet? For instance, an ARP packet. The driver has the choice to set: A- RTE_PTYPE_UNKNOWN: the driver does not know the L2 packet type B- RTE_PTYPE_L2_MAC: the driver knows it's an ethernet packet (it should be the case for all received packets today as dpdk only supports ethernet ports) C- RTE_PTYPE_L2_ARP: the driver knows that the packet carries an ARP header after the ethernet header. Is it correct for a driver to always set B- for all received packets? Another thing that bothers me a bit is that L2_ARP, L2_LLDP, L2_MAC_TIMESYNC, (...) are not really L2 types. The L2 type is Ethernet. On the other hand, they are not L3 type either. So, I have no other solution. The OSI model is probably a bit too theorical, and we have to choose the solution that is the most useful for the applications, even if it does not absolutely matches the theory ;) Regards, Olivier > > Regards, > Helin > >> >> >>> +/** >>> + * MAC (Media Access Control) packet type for time sync. >>> + * >>> + * Packet format: >>> + * <'ether type'=0x88F7> >>> + */ >>> +#define RTE_PTYPE_L2_MAC_TIMESYNC 0x00000002 >>> +/** >>> + * ARP (Address Resolution Protocol) packet type. >>> + * >>> + * Packet format: >>> + * <'ether type'=0x0806> >>> + */ >>> +#define RTE_PTYPE_L2_ARP 0x00000003 >>> +/** >>> + * LLDP (Link Layer Discovery Protocol) packet type. >>> + * >>> + * Packet format: >>> + * <'ether type'=0x88CC> >>> + */ >>> +#define RTE_PTYPE_L2_LLDP 0x00000004 >> >> Maybe ETHER should appear in these names too, what do you think? > Same as above. > >> >> >> >> >>> +/** >>> + * Mask of layer 2 packet types. >>> + * It is used for outer packet for tunneling cases. >>> + */ >>> +#define RTE_PTYPE_L2_MASK 0x0000000f >>> +/** >>> + * 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> >>> + */ >>> +#define RTE_PTYPE_L3_IPV4 0x00000010 >>> +/** >>> + * 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'> */ >>> +#define RTE_PTYPE_L3_IPV4_EXT 0x00000030 >>> +/** >>> + * 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> */ >>> +#define RTE_PTYPE_L3_IPV6 0x00000040 >>> +/** >>> + * 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'>> */ >>> +#define RTE_PTYPE_L3_IPV4_EXT_UNKNOWN 0x00000090 >>> +/** >>> + * 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'> >>> + */ >>> +#define RTE_PTYPE_L3_IPV6_EXT 0x000000c0 >>> +/** >>> + * 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'>> >>> + */ >>> +#define RTE_PTYPE_L3_IPV6_EXT_UNKNOWN 0x000000e0 >>> +/** >>> + * Mask of layer 3 packet types. >>> + * It is used for outer packet for tunneling cases. >>> + */ >>> +#define RTE_PTYPE_L3_MASK 0x000000f0 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=6> >>> + */ >>> +#define RTE_PTYPE_L4_TCP 0x00000100 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=17> >>> + */ >>> +#define RTE_PTYPE_L4_UDP 0x00000200 >>> +/** >>> + * 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). >>> + * >>> + * Packet format: >>> + * <'ether type'=0x0800 >>> + * | 'version'=4, 'MF'=1> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=44> >>> + */ >>> +#define RTE_PTYPE_L4_FRAG 0x00000300 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=132> >>> + */ >>> +#define RTE_PTYPE_L4_SCTP 0x00000400 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=1> >>> + */ >>> +#define RTE_PTYPE_L4_ICMP 0x00000500 >>> +/** >>> + * 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, RTE_PTYPE_L4_SCTP, RTE_PTYPE_L4_ICMP). >>> + * >>> + * Packet format: >>> + * <'ether type'=0x0800 >>> + * | 'version'=4, 'protocol'!=[6|17|132|1], 'MF'=0> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'!=[6|17|44|132|1]> */ >>> +#define RTE_PTYPE_L4_NONFRAG 0x00000600 >>> +/** >>> + * Mask of layer 4 packet types. >>> + * It is used for outer packet for tunneling cases. >>> + */ >>> +#define RTE_PTYPE_L4_MASK 0x00000f00 >>> +/** >>> + * 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]> */ >>> +#define RTE_PTYPE_TUNNEL_IP 0x00001000 >>> +/** >>> + * 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> >>> + */ >>> +#define RTE_PTYPE_TUNNEL_GRE 0x00002000 >>> +/** >>> + * VXLAN (Virtual eXtensible Local Area Network) tunneling packet type. >>> + * >>> + * Packet format: >>> + * <'ether type'=0x0800 >>> + * | 'version'=4, 'protocol'=17 >>> + * | 'destination port'=4798> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=17 >>> + * | 'destination port'=4798> >>> + */ >>> +#define RTE_PTYPE_TUNNEL_VXLAN 0x00003000 >>> +/** >>> + * 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'> >>> + */ >>> +#define RTE_PTYPE_TUNNEL_NVGRE 0x00004000 >>> +/** >>> + * 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> >>> + */ >>> +#define RTE_PTYPE_TUNNEL_GENEVE 0x00005000 >>> +/** >>> + * 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. >>> + */ >>> +#define RTE_PTYPE_TUNNEL_GRENAT 0x00006000 >>> +/** >>> + * Mask of tunneling packet types. >>> + */ >>> +#define RTE_PTYPE_TUNNEL_MASK 0x0000f000 >>> +/** >>> + * MAC (Media Access Control) packet type. >>> + * It is used for inner packet type only. >>> + * >>> + * Packet format (inner only): >>> + * <'ether type'=[0x800|0x86DD]> >>> + */ >>> +#define RTE_PTYPE_INNER_L2_MAC 0x00010000 >>> +/** >>> + * MAC (Media Access Control) packet type with VLAN (Virtual Local >>> +Area >>> + * Network) tag. >>> + * >>> + * Packet format (inner only): >>> + * <'ether type'=[0x800|0x86DD], vlan=[1-4095]> */ >>> +#define RTE_PTYPE_INNER_L2_MAC_VLAN 0x00020000 >>> +/** >>> + * Mask of inner layer 2 packet types. >>> + */ >>> +#define RTE_PTYPE_INNER_L2_MASK 0x000f0000 >>> +/** >>> + * 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> >>> + */ >>> +#define RTE_PTYPE_INNER_L3_IPV4 0x00100000 >>> +/** >>> + * 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'> */ >>> +#define RTE_PTYPE_INNER_L3_IPV4_EXT 0x00200000 >>> +/** >>> + * 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> */ >>> +#define RTE_PTYPE_INNER_L3_IPV6 0x00300000 >>> +/** >>> + * 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'>> */ #define >>> +RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN 0x00400000 >>> +/** >>> + * 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'> >>> + */ >>> +#define RTE_PTYPE_INNER_L3_IPV6_EXT 0x00500000 >>> +/** >>> + * 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'>> >>> + */ >>> +#define RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN 0x00600000 >>> +/** >>> + * Mask of inner layer 3 packet types. >>> + */ >>> +#define RTE_PTYPE_INNER_INNER_L3_MASK 0x00f00000 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=6> >>> + */ >>> +#define RTE_PTYPE_INNER_L4_TCP 0x01000000 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=17> >>> + */ >>> +#define RTE_PTYPE_INNER_L4_UDP 0x02000000 >>> +/** >>> + * 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'=0x86DD >>> + * | 'version'=6, 'next header'=44> >>> + */ >>> +#define RTE_PTYPE_INNER_L4_FRAG 0x03000000 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=132> >>> + */ >>> +#define RTE_PTYPE_INNER_L4_SCTP 0x04000000 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'=1> >>> + */ >>> +#define RTE_PTYPE_INNER_L4_ICMP 0x05000000 >>> +/** >>> + * 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> >>> + * or, >>> + * <'ether type'=0x86DD >>> + * | 'version'=6, 'next header'!=[6|17|44|132|1]> */ >>> +#define RTE_PTYPE_INNER_L4_NONFRAG 0x06000000 >>> +/** >>> + * Mask of inner layer 4 packet types. >>> + */ >>> +#define RTE_PTYPE_INNER_L4_MASK 0x0f000000 >>> + >>> +/** >>> + * 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 >>> + * determin if it is an IPV4 packet. >>> + */ >>> +#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 6 is selected to be used for IPv4 only. Then checking bit >>> +6 can >>> + * determin if it is an IPV4 packet. >>> + */ >>> +#define RTE_ETH_IS_IPV6_HDR(ptype) ((ptype) & RTE_PTYPE_L3_IPV6) >>> + >>> +/* Check if it is a tunneling packet */ #define >>> +RTE_ETH_IS_TUNNEL_PKT(ptype) ((ptype) & RTE_PTYPE_TUNNEL_MASK) >> #endif >>> +/* RTE_NEXT_ABI */ >>> + >>> /** >>> * Get the name of a RX offload flag >>> * >>> >