dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
From: Jijiang Liu <jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dev-VfR2kkLFssw@public.gmane.org
Subject: [PATCH 1/4] rte_mbuf:add packet types
Date: Tue, 18 Nov 2014 15:37:28 +0800	[thread overview]
Message-ID: <1416296251-7534-2-git-send-email-jijiang.liu@intel.com> (raw)
In-Reply-To: <1416296251-7534-1-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>

This patch abstracts packet types of L2 packet, Non Tunneled IPv4/6, IP in IP, IP in GRE, MAC in GRE and MAC in UDP, and add 4 MACROS to check packet IP header.

Signed-off-by: Jijiang Liu <jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
 lib/librte_mbuf/rte_mbuf.h |  223 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 223 insertions(+), 0 deletions(-)

diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index f5f8658..678db0d 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -125,6 +125,229 @@ extern "C" {
  */
 #define PKT_TX_OFFLOAD_MASK (PKT_TX_VLAN_PKT | PKT_TX_IP_CKSUM | PKT_TX_L4_MASK)
 
+/**
+ * Ethernet packet type
+ */
+enum rte_eth_packet_type {
+
+	/* undefined packet type, means HW can't recognise it */
+	RTE_PTYPE_UNDEF = 0,
+
+	/* L2 Packet types */
+	RTE_PTYPE_PAY2,
+	RTE_PTYPE_TimeSync_PAY2, /**< IEEE1588 and 802.1AS */
+	RTE_PTYPE_FIP_PAY2,      /**< FCoE Initiation Protocol */
+	RTE_PTYPE_LLDP_PAY2,     /**< Link Layer Discovery Protocol */
+	RTE_PTYPE_ECP_PAY2,      /**< Edge Control Protocol */
+	RTE_PTYPE_EAPOL_PAY2,
+	/**< IEEE 802.1X Extensible Authentication Protocol over LAN */
+	RTE_PTYPE_ARP,
+	RTE_PTYPE_FCOE_PAY3,
+	RTE_PTYPE_FCOE_FCDATA,
+	RTE_PTYPE_FCOE_FCRDY,
+	RTE_PTYPE_FCOE_FCRSP,
+	RTE_PTYPE_FCOE_FCOTHER,
+	RTE_PTYPE_FCOE_VFT,
+	RTE_PTYPE_FCOE_VFT_FCDATA,
+	RTE_PTYPE_FCOE_VFT_FCRDY,
+	RTE_PTYPE_FCOE_VFT_FCRSP,
+	RTE_PTYPE_FCOE_VFT_FCOTHER,
+
+	/* Non Tunneled IPv4 */
+	RTE_PTYPE_IPv4FRAG,
+	RTE_PTYPE_IPv4,
+	RTE_PTYPE_IPv4_UDP,
+	RTE_PTYPE_IPv4_TCP,
+	RTE_PTYPE_IPv4_SCTP,
+	RTE_PTYPE_IPv4_ICMP,
+
+	/* IP in IP Tunneling (IPv4 --> IPv4) */
+	RTE_PTYPE_IPv4_IPv4FRAG,
+	RTE_PTYPE_IPv4_IPv4,
+	RTE_PTYPE_IPv4_IPv4_UDP,
+	RTE_PTYPE_IPv4_IPv4_TCP,
+	RTE_PTYPE_IPv4_IPv4_SCTP,
+	RTE_PTYPE_IPv4_IPv4_ICMP,
+
+	/* IP in IP Tunneling (IPv4 --> IPv6) */
+	RTE_PTYPE_IPv4_IPv6FRAG,
+	RTE_PTYPE_IPv4_IPv6,
+	RTE_PTYPE_IPv4_IPv6_UDP,
+	RTE_PTYPE_IPv4_IPv6_TCP,
+	RTE_PTYPE_IPv4_IPv6_SCTP,
+	RTE_PTYPE_IPv4_IPv6_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN */
+	RTE_PTYPE_IPv4_GRENAT_PAY3,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */
+	RTE_PTYPE_IPv4_GRENAT_IPv4FRAG,
+	RTE_PTYPE_IPv4_GRENAT_IPv4,
+	RTE_PTYPE_IPv4_GRENAT_IPv4_UDP,
+	RTE_PTYPE_IPv4_GRENAT_IPv4_TCP,
+	RTE_PTYPE_IPv4_GRENAT_IPv4_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_IPv4_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */
+	RTE_PTYPE_IPv4_GRENAT_IPv6FRAG,
+	RTE_PTYPE_IPv4_GRENAT_IPv6,
+	RTE_PTYPE_IPv4_GRENAT_IPv6_UDP,
+	RTE_PTYPE_IPv4_GRENAT_IPv6_TCP,
+	RTE_PTYPE_IPv4_GRENAT_IPv6_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_IPv6_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC */
+	RTE_PTYPE_IPv4_GRENAT_MAC_PAY3,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4FRAG,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_UDP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_TCP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv4_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6FRAG,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_UDP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_TCP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_MAC_IPv6_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN */
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_PAY3,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4FRAG,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_UDP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_TCP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv4_ICMP,
+
+	/* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6FRAG,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_UDP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_TCP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_SCTP,
+	RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_ICMP,
+
+	/* Non Tunneled IPv6 */
+	RTE_PTYPE_IPv6FRAG,
+	RTE_PTYPE_IPv6,
+	RTE_PTYPE_IPv6_UDP,
+	RTE_PTYPE_IPv6_TCP,
+	RTE_PTYPE_IPv6_SCTP,
+	RTE_PTYPE_IPv6_ICMP,
+
+	/* IP in IP Tunneling (IPv6 --> IPv4) */
+	RTE_PTYPE_IPv6_IPv4FRAG,
+	RTE_PTYPE_IPv6_IPv4,
+	RTE_PTYPE_IPv6_IPv4_UDP,
+	RTE_PTYPE_IPv6_IPv4_TCP,
+	RTE_PTYPE_IPv6_IPv4_SCTP,
+	RTE_PTYPE_IPv6_IPv4_ICMP,
+
+	/* IP in IP Tunneling (IPv6 --> IPv6) */
+	RTE_PTYPE_IPv6_IPv6FRAG,
+	RTE_PTYPE_IPv6_IPv6,
+	RTE_PTYPE_IPv6_IPv6_UDP,
+	RTE_PTYPE_IPv6_IPv6_TCP,
+	RTE_PTYPE_IPv6_IPv6_SCTP,
+	RTE_PTYPE_IPv6_IPv6_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN */
+	RTE_PTYPE_IPv6_GRENAT_PAY3,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */
+	RTE_PTYPE_IPv6_GRENAT_IPv4FRAG,
+	RTE_PTYPE_IPv6_GRENAT_IPv4,
+	RTE_PTYPE_IPv6_GRENAT_IPv4_UDP,
+	RTE_PTYPE_IPv6_GRENAT_IPv4_TCP,
+	RTE_PTYPE_IPv6_GRENAT_IPv4_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_IPv4_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */
+	RTE_PTYPE_IPv6_GRENAT_IPv6FRAG,
+	RTE_PTYPE_IPv6_GRENAT_IPv6,
+	RTE_PTYPE_IPv6_GRENAT_IPv6_UDP,
+	RTE_PTYPE_IPv6_GRENAT_IPv6_TCP,
+	RTE_PTYPE_IPv6_GRENAT_IPv6_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_IPv6_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC */
+	RTE_PTYPE_IPv6_GRENAT_MAC_PAY3,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4FRAG,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_UDP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_TCP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv4_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6FRAG,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_UDP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_TCP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_MAC_IPv6_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN */
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_PAY3,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4FRAG,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_UDP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_TCP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv4_ICMP,
+
+	/* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6FRAG,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_UDP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_TCP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_SCTP,
+	RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_ICMP,
+};
+
+/**
+ * Given the packet type returns if it is a packet with IPv4 header,
+ * which includes IPv4 tunneling.
+ */
+#define RTE_ETH_IS_IPV4_HDR(ptype) \
+	((ptype >= RTE_PTYPE_IPv4FRAG) && \
+	(ptype <= RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_ICMP))
+
+/**
+ * Given the packet type returns if it is a tunneling packet
+ * with IPv4 header.
+ */
+#define RTE_ETH_IS_TUNNEL_IPV4_HDR(ptype) \
+	((ptype >= RTE_PTYPE_IPv4FRAG) && \
+	(ptype <= RTE_PTYPE_IPv4_GRENAT_MACVLAN_IPv6_ICMP))
+
+/**
+ * Given the packet type returns if it is a packet with IPv6 header,
+ * which includes IPv6 tunneling.
+ */
+#define RTE_ETH_IS_IPV6_HDR(ptype) \
+	((ptype >= RTE_PTYPE_IPv6FRAG) && \
+	(ptype <= RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_ICMP))
+
+/**
+ * Given the packet type returns if it is a tunneling packet with
+ * IPv6 header
+ */
+#define RTE_ETH_IS_TUNNEL_IPV6_HDR(ptype) \
+	((ptype >= RTE_PTYPE_IPv6_IPv4FRAG) && \
+	(ptype <= RTE_PTYPE_IPv6_GRENAT_MACVLAN_IPv6_ICMP))
+
 /* define a set of marker types that can be used to refer to set points in the
  * mbuf */
 typedef void    *MARKER[0];   /**< generic marker for a point in a structure */
-- 
1.7.7.6

  parent reply	other threads:[~2014-11-18  7:37 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-18  7:37 [PATCH 0/4] Translate packet types for i40e Jijiang Liu
     [not found] ` <1416296251-7534-1-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-18  7:37   ` Jijiang Liu [this message]
     [not found]     ` <1416296251-7534-2-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-19 10:38       ` [PATCH 1/4] rte_mbuf:add packet types Olivier MATZ
     [not found]         ` <546C733C.1020404-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-21 12:26           ` Liu, Jijiang
     [not found]             ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D9D8D6-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-21 13:25               ` Olivier MATZ
2014-11-18  7:37   ` [PATCH 2/4] rte_mbuf:remove tunneling IP offload flags Jijiang Liu
2014-11-18  7:37   ` [PATCH 3/4] i40e:translate i40e packet types Jijiang Liu
2014-11-18  7:37   ` [PATCH 4/4] testpmd:application changes Jijiang Liu
2014-11-18 11:33   ` [PATCH 0/4] Translate packet types for i40e Ananyev, Konstantin
     [not found]     ` <2601191342CEEE43887BDE71AB977258213B581A-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-18 13:08       ` Bruce Richardson
2014-11-18 15:29         ` Ananyev, Konstantin
     [not found]           ` <2601191342CEEE43887BDE71AB977258213B58D0-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-19  3:52             ` Liu, Jijiang
     [not found]               ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D9C02C-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-19  9:47                 ` Ananyev, Konstantin
2014-11-18 14:12       ` Zhang, Helin
     [not found]         ` <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7C8757-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-18 15:26           ` Ananyev, Konstantin
     [not found]             ` <2601191342CEEE43887BDE71AB977258213B58B9-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-18 15:55               ` Ananyev, Konstantin
2014-11-19  0:29               ` Zhang, Helin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1416296251-7534-2-git-send-email-jijiang.liu@intel.com \
    --to=jijiang.liu-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).