Add DPDK patches for i40e vPMD (ptype and ip checksum offload) 77/1977/2
authorDamjan Marion <damarion@cisco.com>
Sat, 16 Jul 2016 15:47:22 +0000 (17:47 +0200)
committerDave Barach <openvpp@barachs.net>
Sat, 16 Jul 2016 17:02:03 +0000 (17:02 +0000)
Change-Id: Idf38ee8f8cfc31be62fcf0b828832b2f06876815
Signed-off-by: Damjan Marion <damarion@cisco.com>
dpdk/dpdk-16.04_patches/0028-i40e-Add-packet_type-metadata-in-the-i40e-vPMD.patch [new file with mode: 0644]
dpdk/dpdk-16.04_patches/0029-i40e-Enable-bad-checksum-flags-in-i40e-vPMD.patch [new file with mode: 0644]

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 (file)
index 0000000..5cd32cf
--- /dev/null
@@ -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 (file)
index 0000000..9b0f064
--- /dev/null
@@ -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
+