[dpdk-dev] [PATCH 1/4] rte_mbuf:add packet types
Jijiang Liu
jijiang.liu at intel.com
Tue Nov 18 08:37:28 CET 2014
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 at intel.com>
---
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
More information about the dev
mailing list