diff options
Diffstat (limited to 'dpdk')
-rw-r--r-- | dpdk/dpdk-16.04_patches/0028-i40e-Add-packet_type-metadata-in-the-i40e-vPMD.patch | 1184 | ||||
-rw-r--r-- | dpdk/dpdk-16.04_patches/0029-i40e-Enable-bad-checksum-flags-in-i40e-vPMD.patch | 114 |
2 files changed, 1298 insertions, 0 deletions
diff --git a/dpdk/dpdk-16.04_patches/0028-i40e-Add-packet_type-metadata-in-the-i40e-vPMD.patch b/dpdk/dpdk-16.04_patches/0028-i40e-Add-packet_type-metadata-in-the-i40e-vPMD.patch new file mode 100644 index 00000000000..5cd32cfe52c --- /dev/null +++ b/dpdk/dpdk-16.04_patches/0028-i40e-Add-packet_type-metadata-in-the-i40e-vPMD.patch @@ -0,0 +1,1184 @@ +From e462b3f07bcbd807f7f3c8e6077e886a92f46ff0 Mon Sep 17 00:00:00 2001 +From: Damjan Marion <damarion@cisco.com> +Date: Thu, 14 Jul 2016 09:59:01 -0700 +Subject: [PATCH 28/29] i40e: Add packet_type metadata in the i40e vPMD + +The ptype is decoded from the rx descriptor and stored +in the packet type field in the mbuf using the same function +as the non-vector driver. + +Signed-off-by: Damjan Marion <damarion@cisco.com> +Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> +--- + drivers/net/i40e/i40e_rxtx.c | 539 +------------------------------------ + drivers/net/i40e/i40e_rxtx.h | 564 +++++++++++++++++++++++++++++++++++++++ + drivers/net/i40e/i40e_rxtx_vec.c | 16 ++ + 3 files changed, 582 insertions(+), 537 deletions(-) + +diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c +index 4d35d83..511f016 100644 +--- a/drivers/net/i40e/i40e_rxtx.c ++++ b/drivers/net/i40e/i40e_rxtx.c +@@ -189,542 +189,6 @@ i40e_get_iee15888_flags(struct rte_mbuf *mb, uint64_t qword) + } + #endif + +-/* For each value it means, datasheet of hardware can tell more details +- * +- * @note: fix i40e_dev_supported_ptypes_get() if any change here. +- */ +-static inline uint32_t +-i40e_rxd_pkt_type_mapping(uint8_t ptype) +-{ +- static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = { +- /* L2 types */ +- /* [0] reserved */ +- [1] = RTE_PTYPE_L2_ETHER, +- [2] = RTE_PTYPE_L2_ETHER_TIMESYNC, +- /* [3] - [5] reserved */ +- [6] = RTE_PTYPE_L2_ETHER_LLDP, +- /* [7] - [10] reserved */ +- [11] = RTE_PTYPE_L2_ETHER_ARP, +- /* [12] - [21] reserved */ +- +- /* Non tunneled IPv4 */ +- [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_FRAG, +- [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_NONFRAG, +- [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_UDP, +- /* [25] reserved */ +- [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_TCP, +- [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_SCTP, +- [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_L4_ICMP, +- +- /* IPv4 --> IPv4 */ +- [29] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [30] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [31] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [32] reserved */ +- [33] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [34] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [35] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> IPv6 */ +- [36] = 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_FRAG, +- [37] = 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_NONFRAG, +- [38] = 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_UDP, +- /* [39] reserved */ +- [40] = 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_TCP, +- [41] = 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_SCTP, +- [42] = 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, +- +- /* IPv4 --> GRE/Teredo/VXLAN */ +- [43] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */ +- [44] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [46] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [47] reserved */ +- [48] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [49] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [50] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */ +- [51] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [52] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [53] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [54] reserved */ +- [55] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [56] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [57] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC */ +- [58] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ +- [59] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [60] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [62] reserved */ +- [63] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [64] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [65] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ +- [66] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [67] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [68] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [69] reserved */ +- [70] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [71] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [72] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN */ +- [73] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ +- [74] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [75] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [76] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [77] reserved */ +- [78] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [79] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [80] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ +- [81] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [82] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [83] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [84] reserved */ +- [85] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [86] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [87] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* Non tunneled IPv6 */ +- [88] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_FRAG, +- [89] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_NONFRAG, +- [90] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_UDP, +- /* [91] reserved */ +- [92] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_TCP, +- [93] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_SCTP, +- [94] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_L4_ICMP, +- +- /* IPv6 --> IPv4 */ +- [95] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [96] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [97] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [98] reserved */ +- [99] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [100] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [101] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> IPv6 */ +- [102] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [103] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [104] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [105] reserved */ +- [106] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [107] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [108] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_IP | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN */ +- [109] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */ +- [110] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [111] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [112] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [113] reserved */ +- [114] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [115] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [116] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */ +- [117] = 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_FRAG, +- [118] = 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_NONFRAG, +- [119] = 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, +- /* [120] reserved */ +- [121] = 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_TCP, +- [122] = 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_SCTP, +- [123] = 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_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC */ +- [124] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ +- [125] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [126] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [127] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [128] reserved */ +- [129] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [130] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [131] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ +- [132] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [133] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [134] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [135] reserved */ +- [136] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [137] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [138] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN */ +- [139] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ +- [140] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [141] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [142] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [143] reserved */ +- [144] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [145] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [146] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ +- [147] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_FRAG, +- [148] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_NONFRAG, +- [149] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_UDP, +- /* [150] reserved */ +- [151] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_TCP, +- [152] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_SCTP, +- [153] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_TUNNEL_GRENAT | +- RTE_PTYPE_INNER_L2_ETHER_VLAN | +- RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | +- RTE_PTYPE_INNER_L4_ICMP, +- +- /* All others reserved */ +- }; +- +- return type_table[ptype]; +-} +- + #define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK 0x03 + #define I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID 0x01 + #define I40E_RX_DESC_EXT_STATUS_FLEXBH_FLEX 0x02 +@@ -2135,7 +1599,8 @@ i40e_dev_supported_ptypes_get(struct rte_eth_dev *dev) + #ifdef RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC + dev->rx_pkt_burst == i40e_recv_pkts_bulk_alloc || + #endif +- dev->rx_pkt_burst == i40e_recv_scattered_pkts) ++ dev->rx_pkt_burst == i40e_recv_scattered_pkts || ++ dev->rx_pkt_burst == i40e_recv_pkts_vec) + return ptypes; + return NULL; + } +diff --git a/drivers/net/i40e/i40e_rxtx.h b/drivers/net/i40e/i40e_rxtx.h +index 98179f0..c33782f 100644 +--- a/drivers/net/i40e/i40e_rxtx.h ++++ b/drivers/net/i40e/i40e_rxtx.h +@@ -255,4 +255,568 @@ void i40e_set_tx_function_flag(struct rte_eth_dev *dev, + struct i40e_tx_queue *txq); + void i40e_set_tx_function(struct rte_eth_dev *dev); + ++/* For each value it means, datasheet of hardware can tell more details ++ * ++ * @note: fix i40e_dev_supported_ptypes_get() if any change here. ++ */ ++#define RTE_PTYPE_L2_ETHER_NSH 0x00000005 ++static inline uint32_t ++i40e_rxd_pkt_type_mapping(uint8_t ptype) ++{ ++ static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = { ++ /* L2 types */ ++ /* [0] reserved */ ++ [1] = RTE_PTYPE_L2_ETHER, ++ [2] = RTE_PTYPE_L2_ETHER_TIMESYNC, ++ /* [3] - [5] reserved */ ++ [6] = RTE_PTYPE_L2_ETHER_LLDP, ++ /* [7] - [10] reserved */ ++ [11] = RTE_PTYPE_L2_ETHER_ARP, ++ /* [12] - [21] reserved */ ++ ++ /* Non tunneled IPv4 */ ++ [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_FRAG, ++ [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_NONFRAG, ++ [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_UDP, ++ /* [25] reserved */ ++ [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_TCP, ++ [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_SCTP, ++ [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_ICMP, ++ ++ /* IPv4 --> IPv4 */ ++ [29] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [30] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [31] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [32] reserved */ ++ [33] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [34] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [35] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> IPv6 */ ++ [36] = 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_FRAG, ++ [37] = 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_NONFRAG, ++ [38] = 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_UDP, ++ /* [39] reserved */ ++ [40] = 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_TCP, ++ [41] = 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_SCTP, ++ [42] = 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, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN */ ++ [43] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */ ++ [44] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [46] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [47] reserved */ ++ [48] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [49] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [50] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */ ++ [51] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [52] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [53] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [54] reserved */ ++ [55] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [56] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [57] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC */ ++ [58] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ ++ [59] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [60] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [62] reserved */ ++ [63] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [64] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [65] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ ++ [66] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [67] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [68] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [69] reserved */ ++ [70] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [71] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [72] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN */ ++ [73] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ ++ [74] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [75] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [76] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [77] reserved */ ++ [78] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [79] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [80] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv4 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ ++ [81] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [82] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [83] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [84] reserved */ ++ [85] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [86] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [87] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* Non tunneled IPv6 */ ++ [88] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_FRAG, ++ [89] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_NONFRAG, ++ [90] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_UDP, ++ /* [91] reserved */ ++ [92] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_TCP, ++ [93] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_SCTP, ++ [94] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_ICMP, ++ ++ /* IPv6 --> IPv4 */ ++ [95] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [96] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [97] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [98] reserved */ ++ [99] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [100] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [101] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> IPv6 */ ++ [102] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [103] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [104] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [105] reserved */ ++ [106] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [107] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [108] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_IP | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN */ ++ [109] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */ ++ [110] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [111] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [112] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [113] reserved */ ++ [114] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [115] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [116] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */ ++ [117] = 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_FRAG, ++ [118] = 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_NONFRAG, ++ [119] = 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, ++ /* [120] reserved */ ++ [121] = 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_TCP, ++ [122] = 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_SCTP, ++ [123] = 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_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC */ ++ [124] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */ ++ [125] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [126] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [127] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [128] reserved */ ++ [129] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [130] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [131] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */ ++ [132] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [133] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [134] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [135] reserved */ ++ [136] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [137] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [138] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN */ ++ [139] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv4 */ ++ [140] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [141] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [142] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [143] reserved */ ++ [144] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [145] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [146] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* IPv6 --> GRE/Teredo/VXLAN --> MAC/VLAN --> IPv6 */ ++ [147] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_FRAG, ++ [148] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_NONFRAG, ++ [149] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_UDP, ++ /* [150] reserved */ ++ [151] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_TCP, ++ [152] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_SCTP, ++ [153] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_TUNNEL_GRENAT | ++ RTE_PTYPE_INNER_L2_ETHER_VLAN | ++ RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_INNER_L4_ICMP, ++ ++ /* L2 NSH packet type */ ++ [154] = RTE_PTYPE_L2_ETHER_NSH, ++ [155] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_FRAG, ++ [156] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_NONFRAG, ++ [157] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_UDP, ++ [158] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_TCP, ++ [159] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_SCTP, ++ [160] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | ++ RTE_PTYPE_L4_ICMP, ++ [161] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_FRAG, ++ [162] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_NONFRAG, ++ [163] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_UDP, ++ [164] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_TCP, ++ [165] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_SCTP, ++ [166] = RTE_PTYPE_L2_ETHER_NSH | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | ++ RTE_PTYPE_L4_ICMP, ++ ++ /* All others reserved */ ++ }; ++ ++ return type_table[ptype]; ++} ++ + #endif /* _I40E_RXTX_H_ */ +diff --git a/drivers/net/i40e/i40e_rxtx_vec.c b/drivers/net/i40e/i40e_rxtx_vec.c +index 047aff5..defa581 100644 +--- a/drivers/net/i40e/i40e_rxtx_vec.c ++++ b/drivers/net/i40e/i40e_rxtx_vec.c +@@ -220,6 +220,21 @@ desc_pktlen_align(__m128i descs[4]) + *((uint16_t *)&descs[3]+7) = vol.e[3]; + } + ++static inline void ++desc_to_ptype_v(__m128i descs[4], struct rte_mbuf **rx_pkts) ++{ ++ __m128i ptype0 = _mm_unpackhi_epi64(descs[0], descs[1]); ++ __m128i ptype1 = _mm_unpackhi_epi64(descs[2], descs[3]); ++ ++ ptype0 = _mm_srli_epi64(ptype0, 30); ++ ptype1 = _mm_srli_epi64(ptype1, 30); ++ ++ rx_pkts[0]->packet_type = i40e_rxd_pkt_type_mapping(_mm_extract_epi8(ptype0, 0)); ++ rx_pkts[1]->packet_type = i40e_rxd_pkt_type_mapping(_mm_extract_epi8(ptype0, 8)); ++ rx_pkts[2]->packet_type = i40e_rxd_pkt_type_mapping(_mm_extract_epi8(ptype1, 0)); ++ rx_pkts[3]->packet_type = i40e_rxd_pkt_type_mapping(_mm_extract_epi8(ptype1, 8)); ++} ++ + /* + * Notice: + * - nb_pkts < RTE_I40E_DESCS_PER_LOOP, just return no packet +@@ -413,6 +428,7 @@ _recv_raw_pkts_vec(struct i40e_rx_queue *rxq, struct rte_mbuf **rx_pkts, + pkt_mb2); + _mm_storeu_si128((void *)&rx_pkts[pos]->rx_descriptor_fields1, + pkt_mb1); ++ desc_to_ptype_v(descs, &rx_pkts[pos]); + /* C.4 calc avaialbe number of desc */ + var = __builtin_popcountll(_mm_cvtsi128_si64(staterr)); + nb_pkts_recd += var; +-- +2.7.4 + diff --git a/dpdk/dpdk-16.04_patches/0029-i40e-Enable-bad-checksum-flags-in-i40e-vPMD.patch b/dpdk/dpdk-16.04_patches/0029-i40e-Enable-bad-checksum-flags-in-i40e-vPMD.patch new file mode 100644 index 00000000000..9b0f064805e --- /dev/null +++ b/dpdk/dpdk-16.04_patches/0029-i40e-Enable-bad-checksum-flags-in-i40e-vPMD.patch @@ -0,0 +1,114 @@ +From ff4d874754e5e420671cc78d82829cd7317542ad Mon Sep 17 00:00:00 2001 +From: Damjan Marion <damarion@cisco.com> +Date: Thu, 14 Jul 2016 09:59:02 -0700 +Subject: [PATCH 29/29] i40e: Enable bad checksum flags in i40e vPMD + +Decode the checksum flags from the rx descriptor, setting +the appropriate bit in the mbuf ol_flags field when the flag +indicates a bad checksum. + +Signed-off-by: Damjan Marion <damarion@cisco.com> +Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> +--- + drivers/net/i40e/i40e_rxtx_vec.c | 55 +++++++++++++++++++++++----------------- + 1 file changed, 32 insertions(+), 23 deletions(-) + +diff --git a/drivers/net/i40e/i40e_rxtx_vec.c b/drivers/net/i40e/i40e_rxtx_vec.c +index defa581..09ec6e6 100644 +--- a/drivers/net/i40e/i40e_rxtx_vec.c ++++ b/drivers/net/i40e/i40e_rxtx_vec.c +@@ -138,18 +138,14 @@ i40e_rxq_rearm(struct i40e_rx_queue *rxq) + static inline void + desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts) + { +- __m128i vlan0, vlan1, rss; +- union { +- uint16_t e[4]; +- uint64_t dword; +- } vol; ++ __m128i vlan0, vlan1, rss, l3_l4e; + +- /* mask everything except rss and vlan flags +- *bit2 is for vlan tag, bits 13:12 for rss +- */ +- const __m128i rss_vlan_msk = _mm_set_epi16( +- 0x0000, 0x0000, 0x0000, 0x0000, +- 0x3004, 0x3004, 0x3004, 0x3004); ++ /* mask everything except RSS, flow director and VLAN flags ++ * bit2 is for VLAN tag, bit11 for flow director indication ++ * bit13:12 for RSS indication. ++ */ ++ const __m128i rss_vlan_msk = _mm_set_epi32( ++ 0x1c03004, 0x1c03004, 0x1c03004, 0x1c03004); + + /* map rss and vlan type to rss hash and vlan flag */ + const __m128i vlan_flags = _mm_set_epi8(0, 0, 0, 0, +@@ -162,23 +158,36 @@ desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts) + 0, 0, 0, 0, + PKT_RX_FDIR, 0, PKT_RX_RSS_HASH, 0); + +- vlan0 = _mm_unpackhi_epi16(descs[0], descs[1]); +- vlan1 = _mm_unpackhi_epi16(descs[2], descs[3]); +- vlan0 = _mm_unpacklo_epi32(vlan0, vlan1); ++ const __m128i l3_l4e_flags = _mm_set_epi8(0, 0, 0, 0, 0, 0, 0, 0, ++ PKT_RX_EIP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD | PKT_RX_IP_CKSUM_BAD, ++ PKT_RX_EIP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD, ++ PKT_RX_EIP_CKSUM_BAD | PKT_RX_IP_CKSUM_BAD, ++ PKT_RX_EIP_CKSUM_BAD, ++ PKT_RX_L4_CKSUM_BAD | PKT_RX_IP_CKSUM_BAD, ++ PKT_RX_L4_CKSUM_BAD, ++ PKT_RX_IP_CKSUM_BAD, ++ 0); ++ ++ vlan0 = _mm_unpackhi_epi32(descs[0], descs[1]); ++ vlan1 = _mm_unpackhi_epi32(descs[2], descs[3]); ++ vlan0 = _mm_unpacklo_epi64(vlan0, vlan1); + + vlan1 = _mm_and_si128(vlan0, rss_vlan_msk); + vlan0 = _mm_shuffle_epi8(vlan_flags, vlan1); + +- rss = _mm_srli_epi16(vlan1, 12); ++ rss = _mm_srli_epi32(vlan1, 12); + rss = _mm_shuffle_epi8(rss_flags, rss); + ++ l3_l4e = _mm_srli_epi32(vlan1, 22); ++ l3_l4e = _mm_shuffle_epi8(l3_l4e_flags, l3_l4e); ++ + vlan0 = _mm_or_si128(vlan0, rss); +- vol.dword = _mm_cvtsi128_si64(vlan0); ++ vlan0 = _mm_or_si128(vlan0, l3_l4e); + +- rx_pkts[0]->ol_flags = vol.e[0]; +- rx_pkts[1]->ol_flags = vol.e[1]; +- rx_pkts[2]->ol_flags = vol.e[2]; +- rx_pkts[3]->ol_flags = vol.e[3]; ++ rx_pkts[0]->ol_flags = _mm_extract_epi16(vlan0, 0); ++ rx_pkts[1]->ol_flags = _mm_extract_epi16(vlan0, 2); ++ rx_pkts[2]->ol_flags = _mm_extract_epi16(vlan0, 4); ++ rx_pkts[3]->ol_flags = _mm_extract_epi16(vlan0, 6); + } + #else + #define desc_to_olflags_v(desc, rx_pkts) do {} while (0) +@@ -770,7 +779,8 @@ i40e_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev) + #ifndef RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE + /* whithout rx ol_flags, no VP flag report */ + if (rxmode->hw_vlan_strip != 0 || +- rxmode->hw_vlan_extend != 0) ++ rxmode->hw_vlan_extend != 0 || ++ rxmode->hw_ip_checksum != 0) + return -1; + #endif + +@@ -781,8 +791,7 @@ i40e_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev) + /* - no csum error report support + * - no header split support + */ +- if (rxmode->hw_ip_checksum == 1 || +- rxmode->header_split == 1) ++ if (rxmode->header_split == 1) + return -1; + + return 0; +-- +2.7.4 + |