dpdk: DPDK 20.05 iavf flow director backporting to DPDK 20.02
[vpp.git] / build / external / patches / dpdk_20.02 / 0001-net-iavf-unify-Rx-ptype-table.patch
1 From daa3f3ab896ca261fd2eca99609437dacd95dd7a Mon Sep 17 00:00:00 2001
2 From: Shougang Wang <shougangx.wang@intel.com>
3 Date: Fri, 6 Mar 2020 02:24:19 +0000
4 Subject: [DPDK 01/17] net/iavf: unify Rx ptype table
5
6 This patch unified the Rx ptype table.
7
8 Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
9 Acked-by: Leyi Rong <leyi.rong@intel.com>
10 Acked-by: Jingjing Wu <jingjing.wu@intel.com>
11 ---
12  drivers/net/iavf/iavf.h               |   3 +-
13  drivers/net/iavf/iavf_ethdev.c        |   3 +
14  drivers/net/iavf/iavf_rxtx.c          | 604 +++++++++++++++++++++++---
15  drivers/net/iavf/iavf_rxtx.h          |   3 +
16  drivers/net/iavf/iavf_rxtx_vec_avx2.c |  21 +-
17  drivers/net/iavf/iavf_rxtx_vec_sse.c  |  25 +-
18  6 files changed, 561 insertions(+), 98 deletions(-)
19
20 diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h
21 index fe25d807c..526040c6e 100644
22 --- a/drivers/net/iavf/iavf.h
23 +++ b/drivers/net/iavf/iavf.h
24 @@ -119,7 +119,7 @@ struct iavf_info {
25         uint16_t rxq_map[IAVF_MAX_MSIX_VECTORS];
26  };
27  
28 -#define IAVF_MAX_PKT_TYPE 256
29 +#define IAVF_MAX_PKT_TYPE 1024
30  
31  /* Structure to store private data for each VF instance. */
32  struct iavf_adapter {
33 @@ -131,6 +131,7 @@ struct iavf_adapter {
34         /* For vector PMD */
35         bool rx_vec_allowed;
36         bool tx_vec_allowed;
37 +       const uint32_t *ptype_tbl;
38         bool stopped;
39  };
40  
41 diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
42 index 34913f9c4..ee9f82249 100644
43 --- a/drivers/net/iavf/iavf_ethdev.c
44 +++ b/drivers/net/iavf/iavf_ethdev.c
45 @@ -1334,6 +1334,9 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
46                 return -1;
47         }
48  
49 +       /* set default ptype table */
50 +       adapter->ptype_tbl = iavf_get_default_ptype_table();
51 +
52         /* copy mac addr */
53         eth_dev->data->mac_addrs = rte_zmalloc(
54                 "iavf_mac", RTE_ETHER_ADDR_LEN * IAVF_NUM_MACADDR_MAX, 0);
55 diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
56 index 85d9a8e3b..9eccb7c41 100644
57 --- a/drivers/net/iavf/iavf_rxtx.c
58 +++ b/drivers/net/iavf/iavf_rxtx.c
59 @@ -303,6 +303,9 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
60         struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data->dev_private);
61         struct iavf_adapter *ad =
62                 IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
63 +       struct iavf_info *vf =
64 +               IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
65 +       struct iavf_vsi *vsi = &vf->vsi;
66         struct iavf_rx_queue *rxq;
67         const struct rte_memzone *mz;
68         uint32_t ring_size;
69 @@ -351,6 +354,7 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
70         rxq->crc_len = 0; /* crc stripping by default */
71         rxq->rx_deferred_start = rx_conf->rx_deferred_start;
72         rxq->rx_hdr_len = 0;
73 +       rxq->vsi = vsi;
74  
75         len = rte_pktmbuf_data_room_size(rxq->mp) - RTE_PKTMBUF_HEADROOM;
76         rxq->rx_buf_len = RTE_ALIGN(len, (1 << IAVF_RXQ_CTX_DBUFF_SHIFT));
77 @@ -769,31 +773,14 @@ iavf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
78         uint16_t rx_id, nb_hold;
79         uint64_t dma_addr;
80         uint64_t pkt_flags;
81 -       static const uint32_t ptype_tbl[UINT8_MAX + 1] __rte_cache_aligned = {
82 -               /* [0] reserved */
83 -               [1] = RTE_PTYPE_L2_ETHER,
84 -               /* [2] - [21] reserved */
85 -               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
86 -                       RTE_PTYPE_L4_FRAG,
87 -               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
88 -                       RTE_PTYPE_L4_NONFRAG,
89 -               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
90 -                       RTE_PTYPE_L4_UDP,
91 -               /* [25] reserved */
92 -               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
93 -                       RTE_PTYPE_L4_TCP,
94 -               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
95 -                       RTE_PTYPE_L4_SCTP,
96 -               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
97 -                       RTE_PTYPE_L4_ICMP,
98 -               /* All others reserved */
99 -       };
100 +       const uint32_t *ptype_tbl;
101  
102         nb_rx = 0;
103         nb_hold = 0;
104         rxq = rx_queue;
105         rx_id = rxq->rx_tail;
106         rx_ring = rxq->rx_ring;
107 +       ptype_tbl = rxq->vsi->adapter->ptype_tbl;
108  
109         while (nb_rx < nb_pkts) {
110                 rxdp = &rx_ring[rx_id];
111 @@ -909,25 +896,7 @@ iavf_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
112  
113         volatile union iavf_rx_desc *rx_ring = rxq->rx_ring;
114         volatile union iavf_rx_desc *rxdp;
115 -       static const uint32_t ptype_tbl[UINT8_MAX + 1] __rte_cache_aligned = {
116 -               /* [0] reserved */
117 -               [1] = RTE_PTYPE_L2_ETHER,
118 -               /* [2] - [21] reserved */
119 -               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
120 -                       RTE_PTYPE_L4_FRAG,
121 -               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
122 -                       RTE_PTYPE_L4_NONFRAG,
123 -               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
124 -                       RTE_PTYPE_L4_UDP,
125 -               /* [25] reserved */
126 -               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
127 -                       RTE_PTYPE_L4_TCP,
128 -               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
129 -                       RTE_PTYPE_L4_SCTP,
130 -               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
131 -                       RTE_PTYPE_L4_ICMP,
132 -               /* All others reserved */
133 -       };
134 +       const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
135  
136         while (nb_rx < nb_pkts) {
137                 rxdp = &rx_ring[rx_id];
138 @@ -1094,25 +1063,7 @@ iavf_rx_scan_hw_ring(struct iavf_rx_queue *rxq)
139         int32_t s[IAVF_LOOK_AHEAD], nb_dd;
140         int32_t i, j, nb_rx = 0;
141         uint64_t pkt_flags;
142 -       static const uint32_t ptype_tbl[UINT8_MAX + 1] __rte_cache_aligned = {
143 -               /* [0] reserved */
144 -               [1] = RTE_PTYPE_L2_ETHER,
145 -               /* [2] - [21] reserved */
146 -               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
147 -                       RTE_PTYPE_L4_FRAG,
148 -               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
149 -                       RTE_PTYPE_L4_NONFRAG,
150 -               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
151 -                       RTE_PTYPE_L4_UDP,
152 -               /* [25] reserved */
153 -               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
154 -                       RTE_PTYPE_L4_TCP,
155 -               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
156 -                       RTE_PTYPE_L4_SCTP,
157 -               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
158 -                       RTE_PTYPE_L4_ICMP,
159 -               /* All others reserved */
160 -       };
161 +       const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
162  
163         rxdp = &rxq->rx_ring[rxq->rx_tail];
164         rxep = &rxq->sw_ring[rxq->rx_tail];
165 @@ -1921,3 +1872,542 @@ iavf_dev_tx_desc_status(void *tx_queue, uint16_t offset)
166  
167         return RTE_ETH_TX_DESC_FULL;
168  }
169 +
170 +const uint32_t *
171 +iavf_get_default_ptype_table(void)
172 +{
173 +       static const uint32_t ptype_tbl[IAVF_MAX_PKT_TYPE]
174 +               __rte_cache_aligned = {
175 +               /* L2 types */
176 +               /* [0] reserved */
177 +               [1] = RTE_PTYPE_L2_ETHER,
178 +               [2] = RTE_PTYPE_L2_ETHER_TIMESYNC,
179 +               /* [3] - [5] reserved */
180 +               [6] = RTE_PTYPE_L2_ETHER_LLDP,
181 +               /* [7] - [10] reserved */
182 +               [11] = RTE_PTYPE_L2_ETHER_ARP,
183 +               /* [12] - [21] reserved */
184 +
185 +               /* Non tunneled IPv4 */
186 +               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
187 +                      RTE_PTYPE_L4_FRAG,
188 +               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
189 +                      RTE_PTYPE_L4_NONFRAG,
190 +               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
191 +                      RTE_PTYPE_L4_UDP,
192 +               /* [25] reserved */
193 +               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
194 +                      RTE_PTYPE_L4_TCP,
195 +               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
196 +                      RTE_PTYPE_L4_SCTP,
197 +               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
198 +                      RTE_PTYPE_L4_ICMP,
199 +
200 +               /* IPv4 --> IPv4 */
201 +               [29] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
202 +                      RTE_PTYPE_TUNNEL_IP |
203 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
204 +                      RTE_PTYPE_INNER_L4_FRAG,
205 +               [30] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
206 +                      RTE_PTYPE_TUNNEL_IP |
207 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
208 +                      RTE_PTYPE_INNER_L4_NONFRAG,
209 +               [31] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
210 +                      RTE_PTYPE_TUNNEL_IP |
211 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
212 +                      RTE_PTYPE_INNER_L4_UDP,
213 +               /* [32] reserved */
214 +               [33] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
215 +                      RTE_PTYPE_TUNNEL_IP |
216 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
217 +                      RTE_PTYPE_INNER_L4_TCP,
218 +               [34] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
219 +                      RTE_PTYPE_TUNNEL_IP |
220 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
221 +                      RTE_PTYPE_INNER_L4_SCTP,
222 +               [35] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
223 +                      RTE_PTYPE_TUNNEL_IP |
224 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
225 +                      RTE_PTYPE_INNER_L4_ICMP,
226 +
227 +               /* IPv4 --> IPv6 */
228 +               [36] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
229 +                      RTE_PTYPE_TUNNEL_IP |
230 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
231 +                      RTE_PTYPE_INNER_L4_FRAG,
232 +               [37] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
233 +                      RTE_PTYPE_TUNNEL_IP |
234 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
235 +                      RTE_PTYPE_INNER_L4_NONFRAG,
236 +               [38] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
237 +                      RTE_PTYPE_TUNNEL_IP |
238 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
239 +                      RTE_PTYPE_INNER_L4_UDP,
240 +               /* [39] reserved */
241 +               [40] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
242 +                      RTE_PTYPE_TUNNEL_IP |
243 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
244 +                      RTE_PTYPE_INNER_L4_TCP,
245 +               [41] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
246 +                      RTE_PTYPE_TUNNEL_IP |
247 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
248 +                      RTE_PTYPE_INNER_L4_SCTP,
249 +               [42] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
250 +                      RTE_PTYPE_TUNNEL_IP |
251 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
252 +                      RTE_PTYPE_INNER_L4_ICMP,
253 +
254 +               /* IPv4 --> GRE/Teredo/VXLAN */
255 +               [43] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
256 +                      RTE_PTYPE_TUNNEL_GRENAT,
257 +
258 +               /* IPv4 --> GRE/Teredo/VXLAN --> IPv4 */
259 +               [44] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
260 +                      RTE_PTYPE_TUNNEL_GRENAT |
261 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
262 +                      RTE_PTYPE_INNER_L4_FRAG,
263 +               [45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
264 +                      RTE_PTYPE_TUNNEL_GRENAT |
265 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
266 +                      RTE_PTYPE_INNER_L4_NONFRAG,
267 +               [46] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
268 +                      RTE_PTYPE_TUNNEL_GRENAT |
269 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
270 +                      RTE_PTYPE_INNER_L4_UDP,
271 +               /* [47] reserved */
272 +               [48] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
273 +                      RTE_PTYPE_TUNNEL_GRENAT |
274 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
275 +                      RTE_PTYPE_INNER_L4_TCP,
276 +               [49] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
277 +                      RTE_PTYPE_TUNNEL_GRENAT |
278 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
279 +                      RTE_PTYPE_INNER_L4_SCTP,
280 +               [50] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
281 +                      RTE_PTYPE_TUNNEL_GRENAT |
282 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
283 +                      RTE_PTYPE_INNER_L4_ICMP,
284 +
285 +               /* IPv4 --> GRE/Teredo/VXLAN --> IPv6 */
286 +               [51] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
287 +                      RTE_PTYPE_TUNNEL_GRENAT |
288 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
289 +                      RTE_PTYPE_INNER_L4_FRAG,
290 +               [52] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
291 +                      RTE_PTYPE_TUNNEL_GRENAT |
292 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
293 +                      RTE_PTYPE_INNER_L4_NONFRAG,
294 +               [53] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
295 +                      RTE_PTYPE_TUNNEL_GRENAT |
296 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
297 +                      RTE_PTYPE_INNER_L4_UDP,
298 +               /* [54] reserved */
299 +               [55] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
300 +                      RTE_PTYPE_TUNNEL_GRENAT |
301 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
302 +                      RTE_PTYPE_INNER_L4_TCP,
303 +               [56] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
304 +                      RTE_PTYPE_TUNNEL_GRENAT |
305 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
306 +                      RTE_PTYPE_INNER_L4_SCTP,
307 +               [57] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
308 +                      RTE_PTYPE_TUNNEL_GRENAT |
309 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
310 +                      RTE_PTYPE_INNER_L4_ICMP,
311 +
312 +               /* IPv4 --> GRE/Teredo/VXLAN --> MAC */
313 +               [58] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
314 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER,
315 +
316 +               /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
317 +               [59] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
318 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
319 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
320 +                      RTE_PTYPE_INNER_L4_FRAG,
321 +               [60] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
322 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
323 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
324 +                      RTE_PTYPE_INNER_L4_NONFRAG,
325 +               [61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
326 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
327 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
328 +                      RTE_PTYPE_INNER_L4_UDP,
329 +               /* [62] reserved */
330 +               [63] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
331 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
332 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
333 +                      RTE_PTYPE_INNER_L4_TCP,
334 +               [64] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
335 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
336 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
337 +                      RTE_PTYPE_INNER_L4_SCTP,
338 +               [65] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
339 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
340 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
341 +                      RTE_PTYPE_INNER_L4_ICMP,
342 +
343 +               /* IPv4 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
344 +               [66] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
345 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
346 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
347 +                      RTE_PTYPE_INNER_L4_FRAG,
348 +               [67] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
349 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
350 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
351 +                      RTE_PTYPE_INNER_L4_NONFRAG,
352 +               [68] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
353 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
354 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
355 +                      RTE_PTYPE_INNER_L4_UDP,
356 +               /* [69] reserved */
357 +               [70] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
358 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
359 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
360 +                      RTE_PTYPE_INNER_L4_TCP,
361 +               [71] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
362 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
363 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
364 +                      RTE_PTYPE_INNER_L4_SCTP,
365 +               [72] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
366 +                      RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
367 +                      RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
368 +                      RTE_PTYPE_INNER_L4_ICMP,
369 +               /* [73] - [87] reserved */
370 +
371 +               /* Non tunneled IPv6 */
372 +               [88] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
373 +                      RTE_PTYPE_L4_FRAG,
374 +               [89] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
375 +                      RTE_PTYPE_L4_NONFRAG,
376 +               [90] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
377 +                      RTE_PTYPE_L4_UDP,
378 +               /* [91] reserved */
379 +               [92] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
380 +                      RTE_PTYPE_L4_TCP,
381 +               [93] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
382 +                      RTE_PTYPE_L4_SCTP,
383 +               [94] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
384 +                      RTE_PTYPE_L4_ICMP,
385 +
386 +               /* IPv6 --> IPv4 */
387 +               [95] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
388 +                      RTE_PTYPE_TUNNEL_IP |
389 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
390 +                      RTE_PTYPE_INNER_L4_FRAG,
391 +               [96] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
392 +                      RTE_PTYPE_TUNNEL_IP |
393 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
394 +                      RTE_PTYPE_INNER_L4_NONFRAG,
395 +               [97] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
396 +                      RTE_PTYPE_TUNNEL_IP |
397 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
398 +                      RTE_PTYPE_INNER_L4_UDP,
399 +               /* [98] reserved */
400 +               [99] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
401 +                      RTE_PTYPE_TUNNEL_IP |
402 +                      RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
403 +                      RTE_PTYPE_INNER_L4_TCP,
404 +               [100] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
405 +                       RTE_PTYPE_TUNNEL_IP |
406 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
407 +                       RTE_PTYPE_INNER_L4_SCTP,
408 +               [101] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
409 +                       RTE_PTYPE_TUNNEL_IP |
410 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
411 +                       RTE_PTYPE_INNER_L4_ICMP,
412 +
413 +               /* IPv6 --> IPv6 */
414 +               [102] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
415 +                       RTE_PTYPE_TUNNEL_IP |
416 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
417 +                       RTE_PTYPE_INNER_L4_FRAG,
418 +               [103] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
419 +                       RTE_PTYPE_TUNNEL_IP |
420 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
421 +                       RTE_PTYPE_INNER_L4_NONFRAG,
422 +               [104] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
423 +                       RTE_PTYPE_TUNNEL_IP |
424 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
425 +                       RTE_PTYPE_INNER_L4_UDP,
426 +               /* [105] reserved */
427 +               [106] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
428 +                       RTE_PTYPE_TUNNEL_IP |
429 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
430 +                       RTE_PTYPE_INNER_L4_TCP,
431 +               [107] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
432 +                       RTE_PTYPE_TUNNEL_IP |
433 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
434 +                       RTE_PTYPE_INNER_L4_SCTP,
435 +               [108] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
436 +                       RTE_PTYPE_TUNNEL_IP |
437 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
438 +                       RTE_PTYPE_INNER_L4_ICMP,
439 +
440 +               /* IPv6 --> GRE/Teredo/VXLAN */
441 +               [109] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
442 +                       RTE_PTYPE_TUNNEL_GRENAT,
443 +
444 +               /* IPv6 --> GRE/Teredo/VXLAN --> IPv4 */
445 +               [110] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
446 +                       RTE_PTYPE_TUNNEL_GRENAT |
447 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
448 +                       RTE_PTYPE_INNER_L4_FRAG,
449 +               [111] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
450 +                       RTE_PTYPE_TUNNEL_GRENAT |
451 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
452 +                       RTE_PTYPE_INNER_L4_NONFRAG,
453 +               [112] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
454 +                       RTE_PTYPE_TUNNEL_GRENAT |
455 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
456 +                       RTE_PTYPE_INNER_L4_UDP,
457 +               /* [113] reserved */
458 +               [114] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
459 +                       RTE_PTYPE_TUNNEL_GRENAT |
460 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
461 +                       RTE_PTYPE_INNER_L4_TCP,
462 +               [115] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
463 +                       RTE_PTYPE_TUNNEL_GRENAT |
464 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
465 +                       RTE_PTYPE_INNER_L4_SCTP,
466 +               [116] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
467 +                       RTE_PTYPE_TUNNEL_GRENAT |
468 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
469 +                       RTE_PTYPE_INNER_L4_ICMP,
470 +
471 +               /* IPv6 --> GRE/Teredo/VXLAN --> IPv6 */
472 +               [117] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
473 +                       RTE_PTYPE_TUNNEL_GRENAT |
474 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
475 +                       RTE_PTYPE_INNER_L4_FRAG,
476 +               [118] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
477 +                       RTE_PTYPE_TUNNEL_GRENAT |
478 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
479 +                       RTE_PTYPE_INNER_L4_NONFRAG,
480 +               [119] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
481 +                       RTE_PTYPE_TUNNEL_GRENAT |
482 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
483 +                       RTE_PTYPE_INNER_L4_UDP,
484 +               /* [120] reserved */
485 +               [121] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
486 +                       RTE_PTYPE_TUNNEL_GRENAT |
487 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
488 +                       RTE_PTYPE_INNER_L4_TCP,
489 +               [122] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
490 +                       RTE_PTYPE_TUNNEL_GRENAT |
491 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
492 +                       RTE_PTYPE_INNER_L4_SCTP,
493 +               [123] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
494 +                       RTE_PTYPE_TUNNEL_GRENAT |
495 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
496 +                       RTE_PTYPE_INNER_L4_ICMP,
497 +
498 +               /* IPv6 --> GRE/Teredo/VXLAN --> MAC */
499 +               [124] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
500 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER,
501 +
502 +               /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv4 */
503 +               [125] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
504 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
505 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
506 +                       RTE_PTYPE_INNER_L4_FRAG,
507 +               [126] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
508 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
509 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
510 +                       RTE_PTYPE_INNER_L4_NONFRAG,
511 +               [127] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
512 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
513 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
514 +                       RTE_PTYPE_INNER_L4_UDP,
515 +               /* [128] reserved */
516 +               [129] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
517 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
518 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
519 +                       RTE_PTYPE_INNER_L4_TCP,
520 +               [130] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
521 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
522 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
523 +                       RTE_PTYPE_INNER_L4_SCTP,
524 +               [131] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
525 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
526 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
527 +                       RTE_PTYPE_INNER_L4_ICMP,
528 +
529 +               /* IPv6 --> GRE/Teredo/VXLAN --> MAC --> IPv6 */
530 +               [132] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
531 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
532 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
533 +                       RTE_PTYPE_INNER_L4_FRAG,
534 +               [133] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
535 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
536 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
537 +                       RTE_PTYPE_INNER_L4_NONFRAG,
538 +               [134] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
539 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
540 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
541 +                       RTE_PTYPE_INNER_L4_UDP,
542 +               /* [135] reserved */
543 +               [136] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
544 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
545 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
546 +                       RTE_PTYPE_INNER_L4_TCP,
547 +               [137] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
548 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
549 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
550 +                       RTE_PTYPE_INNER_L4_SCTP,
551 +               [138] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
552 +                       RTE_PTYPE_TUNNEL_GRENAT | RTE_PTYPE_INNER_L2_ETHER |
553 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
554 +                       RTE_PTYPE_INNER_L4_ICMP,
555 +               /* [139] - [299] reserved */
556 +
557 +               /* PPPoE */
558 +               [300] = RTE_PTYPE_L2_ETHER_PPPOE,
559 +               [301] = RTE_PTYPE_L2_ETHER_PPPOE,
560 +
561 +               /* PPPoE --> IPv4 */
562 +               [302] = RTE_PTYPE_L2_ETHER_PPPOE |
563 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
564 +                       RTE_PTYPE_L4_FRAG,
565 +               [303] = RTE_PTYPE_L2_ETHER_PPPOE |
566 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
567 +                       RTE_PTYPE_L4_NONFRAG,
568 +               [304] = RTE_PTYPE_L2_ETHER_PPPOE |
569 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
570 +                       RTE_PTYPE_L4_UDP,
571 +               [305] = RTE_PTYPE_L2_ETHER_PPPOE |
572 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
573 +                       RTE_PTYPE_L4_TCP,
574 +               [306] = RTE_PTYPE_L2_ETHER_PPPOE |
575 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
576 +                       RTE_PTYPE_L4_SCTP,
577 +               [307] = RTE_PTYPE_L2_ETHER_PPPOE |
578 +                       RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
579 +                       RTE_PTYPE_L4_ICMP,
580 +
581 +               /* PPPoE --> IPv6 */
582 +               [308] = RTE_PTYPE_L2_ETHER_PPPOE |
583 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
584 +                       RTE_PTYPE_L4_FRAG,
585 +               [309] = RTE_PTYPE_L2_ETHER_PPPOE |
586 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
587 +                       RTE_PTYPE_L4_NONFRAG,
588 +               [310] = RTE_PTYPE_L2_ETHER_PPPOE |
589 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
590 +                       RTE_PTYPE_L4_UDP,
591 +               [311] = RTE_PTYPE_L2_ETHER_PPPOE |
592 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
593 +                       RTE_PTYPE_L4_TCP,
594 +               [312] = RTE_PTYPE_L2_ETHER_PPPOE |
595 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
596 +                       RTE_PTYPE_L4_SCTP,
597 +               [313] = RTE_PTYPE_L2_ETHER_PPPOE |
598 +                       RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
599 +                       RTE_PTYPE_L4_ICMP,
600 +               /* [314] - [324] reserved */
601 +
602 +               /* IPv4/IPv6 --> GTPC/GTPU */
603 +               [325] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
604 +                       RTE_PTYPE_TUNNEL_GTPC,
605 +               [326] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
606 +                       RTE_PTYPE_TUNNEL_GTPC,
607 +               [327] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
608 +                       RTE_PTYPE_TUNNEL_GTPC,
609 +               [328] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
610 +                       RTE_PTYPE_TUNNEL_GTPC,
611 +               [329] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
612 +                       RTE_PTYPE_TUNNEL_GTPU,
613 +               [330] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
614 +                       RTE_PTYPE_TUNNEL_GTPU,
615 +
616 +               /* IPv4 --> GTPU --> IPv4 */
617 +               [331] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
618 +                       RTE_PTYPE_TUNNEL_GTPU |
619 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
620 +                       RTE_PTYPE_INNER_L4_FRAG,
621 +               [332] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
622 +                       RTE_PTYPE_TUNNEL_GTPU |
623 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
624 +                       RTE_PTYPE_INNER_L4_NONFRAG,
625 +               [333] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
626 +                       RTE_PTYPE_TUNNEL_GTPU |
627 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
628 +                       RTE_PTYPE_INNER_L4_UDP,
629 +               [334] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
630 +                       RTE_PTYPE_TUNNEL_GTPU |
631 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
632 +                       RTE_PTYPE_INNER_L4_TCP,
633 +               [335] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
634 +                       RTE_PTYPE_TUNNEL_GTPU |
635 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
636 +                       RTE_PTYPE_INNER_L4_ICMP,
637 +
638 +               /* IPv6 --> GTPU --> IPv4 */
639 +               [336] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
640 +                       RTE_PTYPE_TUNNEL_GTPU |
641 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
642 +                       RTE_PTYPE_INNER_L4_FRAG,
643 +               [337] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
644 +                       RTE_PTYPE_TUNNEL_GTPU |
645 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
646 +                       RTE_PTYPE_INNER_L4_NONFRAG,
647 +               [338] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
648 +                       RTE_PTYPE_TUNNEL_GTPU |
649 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
650 +                       RTE_PTYPE_INNER_L4_UDP,
651 +               [339] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
652 +                       RTE_PTYPE_TUNNEL_GTPU |
653 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
654 +                       RTE_PTYPE_INNER_L4_TCP,
655 +               [340] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
656 +                       RTE_PTYPE_TUNNEL_GTPU |
657 +                       RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN |
658 +                       RTE_PTYPE_INNER_L4_ICMP,
659 +
660 +               /* IPv4 --> GTPU --> IPv6 */
661 +               [341] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
662 +                       RTE_PTYPE_TUNNEL_GTPU |
663 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
664 +                       RTE_PTYPE_INNER_L4_FRAG,
665 +               [342] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
666 +                       RTE_PTYPE_TUNNEL_GTPU |
667 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
668 +                       RTE_PTYPE_INNER_L4_NONFRAG,
669 +               [343] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
670 +                       RTE_PTYPE_TUNNEL_GTPU |
671 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
672 +                       RTE_PTYPE_INNER_L4_UDP,
673 +               [344] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
674 +                       RTE_PTYPE_TUNNEL_GTPU |
675 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
676 +                       RTE_PTYPE_INNER_L4_TCP,
677 +               [345] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
678 +                       RTE_PTYPE_TUNNEL_GTPU |
679 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
680 +                       RTE_PTYPE_INNER_L4_ICMP,
681 +
682 +               /* IPv6 --> GTPU --> IPv6 */
683 +               [346] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
684 +                       RTE_PTYPE_TUNNEL_GTPU |
685 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
686 +                       RTE_PTYPE_INNER_L4_FRAG,
687 +               [347] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
688 +                       RTE_PTYPE_TUNNEL_GTPU |
689 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
690 +                       RTE_PTYPE_INNER_L4_NONFRAG,
691 +               [348] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
692 +                       RTE_PTYPE_TUNNEL_GTPU |
693 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
694 +                       RTE_PTYPE_INNER_L4_UDP,
695 +               [349] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
696 +                       RTE_PTYPE_TUNNEL_GTPU |
697 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
698 +                       RTE_PTYPE_INNER_L4_TCP,
699 +               [350] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN |
700 +                       RTE_PTYPE_TUNNEL_GTPU |
701 +                       RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN |
702 +                       RTE_PTYPE_INNER_L4_ICMP,
703 +               /* All others reserved */
704 +       };
705 +
706 +       return ptype_tbl;
707 +}
708 diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h
709 index 60d02c521..09b5bd99e 100644
710 --- a/drivers/net/iavf/iavf_rxtx.h
711 +++ b/drivers/net/iavf/iavf_rxtx.h
712 @@ -105,6 +105,7 @@ struct iavf_rx_queue {
713         uint16_t rx_buf_len;    /* The packet buffer size */
714         uint16_t rx_hdr_len;    /* The header buffer size */
715         uint16_t max_pkt_len;   /* Maximum packet length */
716 +       struct iavf_vsi *vsi; /**< the VSI this queue belongs to */
717  
718         bool q_set;             /* if rx queue has been configured */
719         bool rx_deferred_start; /* don't start this queue in dev start */
720 @@ -216,6 +217,8 @@ int iavf_tx_vec_dev_check(struct rte_eth_dev *dev);
721  int iavf_rxq_vec_setup(struct iavf_rx_queue *rxq);
722  int iavf_txq_vec_setup(struct iavf_tx_queue *txq);
723  
724 +const uint32_t *iavf_get_default_ptype_table(void);
725 +
726  static inline
727  void iavf_dump_rx_descriptor(struct iavf_rx_queue *rxq,
728                             const volatile void *desc,
729 diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx2.c b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
730 index 7c5d23fd0..2587083d8 100644
731 --- a/drivers/net/iavf/iavf_rxtx_vec_avx2.c
732 +++ b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
733 @@ -142,25 +142,8 @@ _iavf_recv_raw_pkts_vec_avx2(struct iavf_rx_queue *rxq,
734  #define IAVF_DESCS_PER_LOOP_AVX 8
735  
736         /* const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl; */
737 -       static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = {
738 -               /* [0] reserved */
739 -               [1] = RTE_PTYPE_L2_ETHER,
740 -               /* [2] - [21] reserved */
741 -               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
742 -                       RTE_PTYPE_L4_FRAG,
743 -               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
744 -                       RTE_PTYPE_L4_NONFRAG,
745 -               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
746 -                       RTE_PTYPE_L4_UDP,
747 -               /* [25] reserved */
748 -               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
749 -                       RTE_PTYPE_L4_TCP,
750 -               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
751 -                       RTE_PTYPE_L4_SCTP,
752 -               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
753 -                       RTE_PTYPE_L4_ICMP,
754 -               /* All others reserved */
755 -       };
756 +       const uint32_t *type_table = rxq->vsi->adapter->ptype_tbl;
757 +
758         const __m256i mbuf_init = _mm256_set_epi64x(0, 0,
759                         0, rxq->mbuf_initializer);
760         /* struct iavf_rx_entry *sw_ring = &rxq->sw_ring[rxq->rx_tail]; */
761 diff --git a/drivers/net/iavf/iavf_rxtx_vec_sse.c b/drivers/net/iavf/iavf_rxtx_vec_sse.c
762 index b978cc6e0..0365c49e1 100644
763 --- a/drivers/net/iavf/iavf_rxtx_vec_sse.c
764 +++ b/drivers/net/iavf/iavf_rxtx_vec_sse.c
765 @@ -192,29 +192,11 @@ desc_to_olflags_v(struct iavf_rx_queue *rxq, __m128i descs[4],
766  #define PKTLEN_SHIFT     10
767  
768  static inline void
769 -desc_to_ptype_v(__m128i descs[4], struct rte_mbuf **rx_pkts)
770 +desc_to_ptype_v(__m128i descs[4], struct rte_mbuf **rx_pkts,
771 +               const uint32_t *type_table)
772  {
773         __m128i ptype0 = _mm_unpackhi_epi64(descs[0], descs[1]);
774         __m128i ptype1 = _mm_unpackhi_epi64(descs[2], descs[3]);
775 -       static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = {
776 -               /* [0] reserved */
777 -               [1] = RTE_PTYPE_L2_ETHER,
778 -               /* [2] - [21] reserved */
779 -               [22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
780 -                       RTE_PTYPE_L4_FRAG,
781 -               [23] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
782 -                       RTE_PTYPE_L4_NONFRAG,
783 -               [24] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
784 -                       RTE_PTYPE_L4_UDP,
785 -               /* [25] reserved */
786 -               [26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
787 -                       RTE_PTYPE_L4_TCP,
788 -               [27] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
789 -                       RTE_PTYPE_L4_SCTP,
790 -               [28] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
791 -                       RTE_PTYPE_L4_ICMP,
792 -               /* All others reserved */
793 -       };
794  
795         ptype0 = _mm_srli_epi64(ptype0, 30);
796         ptype1 = _mm_srli_epi64(ptype1, 30);
797 @@ -240,6 +222,7 @@ _recv_raw_pkts_vec(struct iavf_rx_queue *rxq, struct rte_mbuf **rx_pkts,
798         int pos;
799         uint64_t var;
800         __m128i shuf_msk;
801 +       const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
802  
803         __m128i crc_adjust = _mm_set_epi16(
804                                 0, 0, 0,    /* ignore non-length fields */
805 @@ -456,7 +439,7 @@ _recv_raw_pkts_vec(struct iavf_rx_queue *rxq, struct rte_mbuf **rx_pkts,
806                         pkt_mb2);
807                 _mm_storeu_si128((void *)&rx_pkts[pos]->rx_descriptor_fields1,
808                                  pkt_mb1);
809 -               desc_to_ptype_v(descs, &rx_pkts[pos]);
810 +               desc_to_ptype_v(descs, &rx_pkts[pos], ptype_tbl);
811                 /* C.4 calc avaialbe number of desc */
812                 var = __builtin_popcountll(_mm_cvtsi128_si64(staterr));
813                 nb_pkts_recd += var;
814 -- 
815 2.17.1
816