Add DPDK patches for i40e vPMD (ptype and ip checksum offload)

Change-Id: Idf38ee8f8cfc31be62fcf0b828832b2f06876815
Signed-off-by: Damjan Marion <damarion@cisco.com>
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 0000000..5cd32cf
--- /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 0000000..9b0f064
--- /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
+