net/txgbe: parse RSS filter
[dpdk.git] / drivers / net / txgbe / txgbe_ptypes.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015-2020
3  */
4
5 #include <rte_mbuf.h>
6 #include <rte_memory.h>
7
8 #include "base/txgbe_type.h"
9 #include "txgbe_ptypes.h"
10
11 /* The txgbe_ptype_lookup is used to convert from the 8-bit ptid in the
12  * hardware to a bit-field that can be used by SW to more easily determine the
13  * packet type.
14  *
15  * Macros are used to shorten the table lines and make this table human
16  * readable.
17  *
18  * We store the PTYPE in the top byte of the bit field - this is just so that
19  * we can check that the table doesn't have a row missing, as the index into
20  * the table should be the PTYPE.
21  *
22  * Typical work flow:
23  *
24  * IF NOT txgbe_ptype_lookup[ptid].known
25  * THEN
26  *      Packet is unknown
27  * ELSE IF txgbe_ptype_lookup[ptid].mac == TXGBE_DEC_PTYPE_MAC_IP
28  *      Use the rest of the fields to look at the tunnels, inner protocols, etc
29  * ELSE
30  *      Use the enum txgbe_l2_ptypes to decode the packet type
31  * ENDIF
32  */
33 #define TPTE(ptid, l2, l3, l4, tun, el2, el3, el4) \
34         [ptid] = (RTE_PTYPE_L2_##l2 | \
35                 RTE_PTYPE_L3_##l3 | \
36                 RTE_PTYPE_L4_##l4 | \
37                 RTE_PTYPE_TUNNEL_##tun | \
38                 RTE_PTYPE_INNER_L2_##el2 | \
39                 RTE_PTYPE_INNER_L3_##el3 | \
40                 RTE_PTYPE_INNER_L4_##el4)
41
42 #define RTE_PTYPE_L2_NONE               0
43 #define RTE_PTYPE_L3_NONE               0
44 #define RTE_PTYPE_L4_NONE               0
45 #define RTE_PTYPE_TUNNEL_NONE           0
46 #define RTE_PTYPE_INNER_L2_NONE         0
47 #define RTE_PTYPE_INNER_L3_NONE         0
48 #define RTE_PTYPE_INNER_L4_NONE         0
49
50 static u32 txgbe_ptype_lookup[TXGBE_PTID_MAX] __rte_cache_aligned = {
51         /* L2:0-3 L3:4-7 L4:8-11 TUN:12-15 EL2:16-19 EL3:20-23 EL2:24-27 */
52         /* L2: ETH */
53         TPTE(0x11, ETHER,          NONE, NONE, NONE, NONE, NONE, NONE),
54         TPTE(0x12, ETHER_TIMESYNC, NONE, NONE, NONE, NONE, NONE, NONE),
55         TPTE(0x13, ETHER_FIP,      NONE, NONE, NONE, NONE, NONE, NONE),
56         TPTE(0x14, ETHER_LLDP,     NONE, NONE, NONE, NONE, NONE, NONE),
57         TPTE(0x15, ETHER_CNM,      NONE, NONE, NONE, NONE, NONE, NONE),
58         TPTE(0x16, ETHER_EAPOL,    NONE, NONE, NONE, NONE, NONE, NONE),
59         TPTE(0x17, ETHER_ARP,      NONE, NONE, NONE, NONE, NONE, NONE),
60         /* L2: Ethertype Filter */
61         TPTE(0x18, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
62         TPTE(0x19, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
63         TPTE(0x1A, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
64         TPTE(0x1B, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
65         TPTE(0x1C, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
66         TPTE(0x1D, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
67         TPTE(0x1E, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
68         TPTE(0x1F, ETHER_FILTER,   NONE, NONE, NONE, NONE, NONE, NONE),
69         /* L3: IP */
70         TPTE(0x21, ETHER, IPV4, FRAG,    NONE, NONE, NONE, NONE),
71         TPTE(0x22, ETHER, IPV4, NONFRAG, NONE, NONE, NONE, NONE),
72         TPTE(0x23, ETHER, IPV4, UDP,     NONE, NONE, NONE, NONE),
73         TPTE(0x24, ETHER, IPV4, TCP,     NONE, NONE, NONE, NONE),
74         TPTE(0x25, ETHER, IPV4, SCTP,    NONE, NONE, NONE, NONE),
75         TPTE(0x29, ETHER, IPV6, FRAG,    NONE, NONE, NONE, NONE),
76         TPTE(0x2A, ETHER, IPV6, NONFRAG, NONE, NONE, NONE, NONE),
77         TPTE(0x2B, ETHER, IPV6, UDP,     NONE, NONE, NONE, NONE),
78         TPTE(0x2C, ETHER, IPV6, TCP,     NONE, NONE, NONE, NONE),
79         TPTE(0x2D, ETHER, IPV6, SCTP,    NONE, NONE, NONE, NONE),
80         /* L2: FCoE */
81         TPTE(0x30, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
82         TPTE(0x31, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
83         TPTE(0x32, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
84         TPTE(0x33, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
85         TPTE(0x34, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
86         TPTE(0x35, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
87         TPTE(0x36, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
88         TPTE(0x37, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
89         TPTE(0x38, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
90         TPTE(0x39, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE),
91         /* IPv4 -> IPv4/IPv6 */
92         TPTE(0x81, ETHER, IPV4, NONE, IP, NONE, IPV4, FRAG),
93         TPTE(0x82, ETHER, IPV4, NONE, IP, NONE, IPV4, NONFRAG),
94         TPTE(0x83, ETHER, IPV4, NONE, IP, NONE, IPV4, UDP),
95         TPTE(0x84, ETHER, IPV4, NONE, IP, NONE, IPV4, TCP),
96         TPTE(0x85, ETHER, IPV4, NONE, IP, NONE, IPV4, SCTP),
97         TPTE(0x89, ETHER, IPV4, NONE, IP, NONE, IPV6, FRAG),
98         TPTE(0x8A, ETHER, IPV4, NONE, IP, NONE, IPV6, NONFRAG),
99         TPTE(0x8B, ETHER, IPV4, NONE, IP, NONE, IPV6, UDP),
100         TPTE(0x8C, ETHER, IPV4, NONE, IP, NONE, IPV6, TCP),
101         TPTE(0x8D, ETHER, IPV4, NONE, IP, NONE, IPV6, SCTP),
102         /* IPv4 -> GRE/Teredo/VXLAN -> NONE/IPv4/IPv6 */
103         TPTE(0x90, ETHER, IPV4, NONE, GRENAT, NONE, NONE,  NONE),
104         TPTE(0x91, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, FRAG),
105         TPTE(0x92, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, NONFRAG),
106         TPTE(0x93, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, UDP),
107         TPTE(0x94, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, TCP),
108         TPTE(0x95, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, SCTP),
109         TPTE(0x99, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, FRAG),
110         TPTE(0x9A, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, NONFRAG),
111         TPTE(0x9B, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, UDP),
112         TPTE(0x9C, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, TCP),
113         TPTE(0x9D, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, SCTP),
114         /* IPv4 -> GRE/Teredo/VXLAN -> MAC -> NONE/IPv4/IPv6 */
115         TPTE(0xA0, ETHER, IPV4, NONE, GRENAT, ETHER, NONE,  NONE),
116         TPTE(0xA1, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, FRAG),
117         TPTE(0xA2, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, NONFRAG),
118         TPTE(0xA3, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, UDP),
119         TPTE(0xA4, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, TCP),
120         TPTE(0xA5, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, SCTP),
121         TPTE(0xA9, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, FRAG),
122         TPTE(0xAA, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, NONFRAG),
123         TPTE(0xAB, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, UDP),
124         TPTE(0xAC, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, TCP),
125         TPTE(0xAD, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, SCTP),
126         /* IPv4 -> GRE/Teredo/VXLAN -> MAC+VLAN -> NONE/IPv4/IPv6 */
127         TPTE(0xB0, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, NONE,  NONE),
128         TPTE(0xB1, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, FRAG),
129         TPTE(0xB2, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, NONFRAG),
130         TPTE(0xB3, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, UDP),
131         TPTE(0xB4, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, TCP),
132         TPTE(0xB5, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, SCTP),
133         TPTE(0xB9, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, FRAG),
134         TPTE(0xBA, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, NONFRAG),
135         TPTE(0xBB, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, UDP),
136         TPTE(0xBC, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, TCP),
137         TPTE(0xBD, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, SCTP),
138         /* IPv6 -> IPv4/IPv6 */
139         TPTE(0xC1, ETHER, IPV6, NONE, IP, NONE, IPV4, FRAG),
140         TPTE(0xC2, ETHER, IPV6, NONE, IP, NONE, IPV4, NONFRAG),
141         TPTE(0xC3, ETHER, IPV6, NONE, IP, NONE, IPV4, UDP),
142         TPTE(0xC4, ETHER, IPV6, NONE, IP, NONE, IPV4, TCP),
143         TPTE(0xC5, ETHER, IPV6, NONE, IP, NONE, IPV4, SCTP),
144         TPTE(0xC9, ETHER, IPV6, NONE, IP, NONE, IPV6, FRAG),
145         TPTE(0xCA, ETHER, IPV6, NONE, IP, NONE, IPV6, NONFRAG),
146         TPTE(0xCB, ETHER, IPV6, NONE, IP, NONE, IPV6, UDP),
147         TPTE(0xCC, ETHER, IPV6, NONE, IP, NONE, IPV6, TCP),
148         TPTE(0xCD, ETHER, IPV6, NONE, IP, NONE, IPV6, SCTP),
149         /* IPv6 -> GRE/Teredo/VXLAN -> NONE/IPv4/IPv6 */
150         TPTE(0xD0, ETHER, IPV6, NONE, GRENAT, NONE, NONE,  NONE),
151         TPTE(0xD1, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, FRAG),
152         TPTE(0xD2, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, NONFRAG),
153         TPTE(0xD3, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, UDP),
154         TPTE(0xD4, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, TCP),
155         TPTE(0xD5, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, SCTP),
156         TPTE(0xD9, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, FRAG),
157         TPTE(0xDA, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, NONFRAG),
158         TPTE(0xDB, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, UDP),
159         TPTE(0xDC, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, TCP),
160         TPTE(0xDD, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, SCTP),
161         /* IPv6 -> GRE/Teredo/VXLAN -> MAC -> NONE/IPv4/IPv6 */
162         TPTE(0xE0, ETHER, IPV6, NONE, GRENAT, ETHER, NONE,  NONE),
163         TPTE(0xE1, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, FRAG),
164         TPTE(0xE2, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, NONFRAG),
165         TPTE(0xE3, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, UDP),
166         TPTE(0xE4, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, TCP),
167         TPTE(0xE5, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, SCTP),
168         TPTE(0xE9, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, FRAG),
169         TPTE(0xEA, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, NONFRAG),
170         TPTE(0xEB, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, UDP),
171         TPTE(0xEC, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, TCP),
172         TPTE(0xED, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, SCTP),
173         /* IPv6 -> GRE/Teredo/VXLAN -> MAC+VLAN -> NONE/IPv4/IPv6 */
174         TPTE(0xF0, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, NONE,  NONE),
175         TPTE(0xF1, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, FRAG),
176         TPTE(0xF2, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, NONFRAG),
177         TPTE(0xF3, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, UDP),
178         TPTE(0xF4, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, TCP),
179         TPTE(0xF5, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, SCTP),
180         TPTE(0xF9, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, FRAG),
181         TPTE(0xFA, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, NONFRAG),
182         TPTE(0xFB, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, UDP),
183         TPTE(0xFC, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, TCP),
184         TPTE(0xFD, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, SCTP),
185 };
186
187 u32 *txgbe_get_supported_ptypes(void)
188 {
189         static u32 ptypes[] = {
190                 /* For non-vec functions,
191                  * refers to txgbe_rxd_pkt_info_to_pkt_type();
192                  */
193                 RTE_PTYPE_L2_ETHER,
194                 RTE_PTYPE_L3_IPV4,
195                 RTE_PTYPE_L3_IPV4_EXT,
196                 RTE_PTYPE_L3_IPV6,
197                 RTE_PTYPE_L3_IPV6_EXT,
198                 RTE_PTYPE_L4_SCTP,
199                 RTE_PTYPE_L4_TCP,
200                 RTE_PTYPE_L4_UDP,
201                 RTE_PTYPE_TUNNEL_IP,
202                 RTE_PTYPE_INNER_L3_IPV6,
203                 RTE_PTYPE_INNER_L3_IPV6_EXT,
204                 RTE_PTYPE_INNER_L4_TCP,
205                 RTE_PTYPE_INNER_L4_UDP,
206                 RTE_PTYPE_UNKNOWN
207         };
208
209         return ptypes;
210 }
211
212 static inline u8
213 txgbe_encode_ptype_fcoe(u32 ptype)
214 {
215         u8 ptid;
216
217         UNREFERENCED_PARAMETER(ptype);
218         ptid = TXGBE_PTID_PKT_FCOE;
219
220         return ptid;
221 }
222
223 static inline u8
224 txgbe_encode_ptype_mac(u32 ptype)
225 {
226         u8 ptid;
227
228         ptid = TXGBE_PTID_PKT_MAC;
229
230         switch (ptype & RTE_PTYPE_L2_MASK) {
231         case RTE_PTYPE_L2_ETHER_FCOE:
232                 ptid = txgbe_encode_ptype_fcoe(ptype);
233                 break;
234         case RTE_PTYPE_UNKNOWN:
235                 break;
236         case RTE_PTYPE_L2_ETHER_TIMESYNC:
237                 ptid |= TXGBE_PTID_TYP_TS;
238                 break;
239         case RTE_PTYPE_L2_ETHER_ARP:
240                 ptid |= TXGBE_PTID_TYP_ARP;
241                 break;
242         case RTE_PTYPE_L2_ETHER_LLDP:
243                 ptid |= TXGBE_PTID_TYP_LLDP;
244                 break;
245         default:
246                 ptid |= TXGBE_PTID_TYP_MAC;
247                 break;
248         }
249
250         return ptid;
251 }
252
253 static inline u8
254 txgbe_encode_ptype_ip(u32 ptype)
255 {
256         u8 ptid;
257
258         ptid = TXGBE_PTID_PKT_IP;
259
260         switch (ptype & RTE_PTYPE_L3_MASK) {
261         case RTE_PTYPE_L3_IPV4:
262         case RTE_PTYPE_L3_IPV4_EXT:
263         case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN:
264                 break;
265         case RTE_PTYPE_L3_IPV6:
266         case RTE_PTYPE_L3_IPV6_EXT:
267         case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN:
268                 ptid |= TXGBE_PTID_PKT_IPV6;
269                 break;
270         default:
271                 return txgbe_encode_ptype_mac(ptype);
272         }
273
274         switch (ptype & RTE_PTYPE_L4_MASK) {
275         case RTE_PTYPE_L4_TCP:
276                 ptid |= TXGBE_PTID_TYP_TCP;
277                 break;
278         case RTE_PTYPE_L4_UDP:
279                 ptid |= TXGBE_PTID_TYP_UDP;
280                 break;
281         case RTE_PTYPE_L4_SCTP:
282                 ptid |= TXGBE_PTID_TYP_SCTP;
283                 break;
284         case RTE_PTYPE_L4_FRAG:
285                 ptid |= TXGBE_PTID_TYP_IPFRAG;
286                 break;
287         default:
288                 ptid |= TXGBE_PTID_TYP_IPDATA;
289                 break;
290         }
291
292         return ptid;
293 }
294
295 static inline u8
296 txgbe_encode_ptype_tunnel(u32 ptype)
297 {
298         u8 ptid;
299
300         ptid = TXGBE_PTID_PKT_TUN;
301
302         switch (ptype & RTE_PTYPE_L3_MASK) {
303         case RTE_PTYPE_L3_IPV4:
304         case RTE_PTYPE_L3_IPV4_EXT:
305         case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN:
306                 break;
307         case RTE_PTYPE_L3_IPV6:
308         case RTE_PTYPE_L3_IPV6_EXT:
309         case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN:
310                 ptid |= TXGBE_PTID_TUN_IPV6;
311                 break;
312         default:
313                 return txgbe_encode_ptype_ip(ptype);
314         }
315
316         switch (ptype & RTE_PTYPE_TUNNEL_MASK) {
317         case RTE_PTYPE_TUNNEL_IP:
318                 ptid |= TXGBE_PTID_TUN_EI;
319                 break;
320         case RTE_PTYPE_TUNNEL_GRE:
321                 ptid |= TXGBE_PTID_TUN_EIG;
322                 break;
323         case RTE_PTYPE_TUNNEL_VXLAN:
324         case RTE_PTYPE_TUNNEL_VXLAN_GPE:
325         case RTE_PTYPE_TUNNEL_NVGRE:
326         case RTE_PTYPE_TUNNEL_GENEVE:
327         case RTE_PTYPE_TUNNEL_GRENAT:
328                 break;
329         default:
330                 return ptid;
331         }
332
333         switch (ptype & RTE_PTYPE_INNER_L2_MASK) {
334         case RTE_PTYPE_INNER_L2_ETHER:
335                 ptid |= TXGBE_PTID_TUN_EIGM;
336                 break;
337         case RTE_PTYPE_INNER_L2_ETHER_VLAN:
338                 ptid |= TXGBE_PTID_TUN_EIGMV;
339                 break;
340         case RTE_PTYPE_INNER_L2_ETHER_QINQ:
341                 ptid |= TXGBE_PTID_TUN_EIGMV;
342                 return ptid;
343         default:
344                 break;
345         }
346
347         switch (ptype & RTE_PTYPE_INNER_L3_MASK) {
348         case RTE_PTYPE_INNER_L3_IPV4:
349         case RTE_PTYPE_INNER_L3_IPV4_EXT:
350         case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN:
351                 break;
352         case RTE_PTYPE_INNER_L3_IPV6:
353         case RTE_PTYPE_INNER_L3_IPV6_EXT:
354         case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN:
355                 ptid |= TXGBE_PTID_PKT_IPV6;
356                 break;
357         default:
358                 return ptid;
359         }
360
361         switch (ptype & RTE_PTYPE_INNER_L4_MASK) {
362         case RTE_PTYPE_INNER_L4_TCP:
363                 ptid |= TXGBE_PTID_TYP_TCP;
364                 break;
365         case RTE_PTYPE_INNER_L4_UDP:
366                 ptid |= TXGBE_PTID_TYP_UDP;
367                 break;
368         case RTE_PTYPE_INNER_L4_SCTP:
369                 ptid |= TXGBE_PTID_TYP_SCTP;
370                 break;
371         case RTE_PTYPE_INNER_L4_FRAG:
372                 ptid |= TXGBE_PTID_TYP_IPFRAG;
373                 break;
374         default:
375                 ptid |= TXGBE_PTID_TYP_IPDATA;
376                 break;
377         }
378
379         return ptid;
380 }
381
382 u32 txgbe_decode_ptype(u8 ptid)
383 {
384         if (-1 != txgbe_etflt_id(ptid))
385                 return RTE_PTYPE_UNKNOWN;
386
387         return txgbe_ptype_lookup[ptid];
388 }
389
390 u8 txgbe_encode_ptype(u32 ptype)
391 {
392         u8 ptid = 0;
393
394         if (ptype & RTE_PTYPE_TUNNEL_MASK)
395                 ptid = txgbe_encode_ptype_tunnel(ptype);
396         else if (ptype & RTE_PTYPE_L3_MASK)
397                 ptid = txgbe_encode_ptype_ip(ptype);
398         else if (ptype & RTE_PTYPE_L2_MASK)
399                 ptid = txgbe_encode_ptype_mac(ptype);
400         else
401                 ptid = TXGBE_PTID_NULL;
402
403         return ptid;
404 }
405
406 /**
407  * Use 2 different table for normal packet and tunnel packet
408  * to save the space.
409  */
410 const u32
411 txgbe_ptype_table[TXGBE_PTID_MAX] __rte_cache_aligned = {
412         [TXGBE_PT_ETHER] = RTE_PTYPE_L2_ETHER,
413         [TXGBE_PT_IPV4] = RTE_PTYPE_L2_ETHER |
414                 RTE_PTYPE_L3_IPV4,
415         [TXGBE_PT_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
416                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
417         [TXGBE_PT_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
418                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
419         [TXGBE_PT_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
420                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_SCTP,
421         [TXGBE_PT_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
422                 RTE_PTYPE_L3_IPV4_EXT,
423         [TXGBE_PT_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
424                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
425         [TXGBE_PT_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
426                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
427         [TXGBE_PT_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
428                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_SCTP,
429         [TXGBE_PT_IPV6] = RTE_PTYPE_L2_ETHER |
430                 RTE_PTYPE_L3_IPV6,
431         [TXGBE_PT_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
432                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
433         [TXGBE_PT_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
434                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
435         [TXGBE_PT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
436                 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP,
437         [TXGBE_PT_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
438                 RTE_PTYPE_L3_IPV6_EXT,
439         [TXGBE_PT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
440                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
441         [TXGBE_PT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
442                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
443         [TXGBE_PT_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
444                 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_SCTP,
445         [TXGBE_PT_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
446                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
447                 RTE_PTYPE_INNER_L3_IPV6,
448         [TXGBE_PT_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
449                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
450                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
451         [TXGBE_PT_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
452                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
453                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
454         [TXGBE_PT_IPV4_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
455                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
456                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
457         [TXGBE_PT_IPV4_EXT_IPV6] = RTE_PTYPE_L2_ETHER |
458                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
459                 RTE_PTYPE_INNER_L3_IPV6,
460         [TXGBE_PT_IPV4_EXT_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
461                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
462                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
463         [TXGBE_PT_IPV4_EXT_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
464                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
465                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
466         [TXGBE_PT_IPV4_EXT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
467                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
468                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
469         [TXGBE_PT_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
470                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
471                 RTE_PTYPE_INNER_L3_IPV6_EXT,
472         [TXGBE_PT_IPV4_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
473                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
474                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
475         [TXGBE_PT_IPV4_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
476                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
477                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
478         [TXGBE_PT_IPV4_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
479                 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP |
480                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
481         [TXGBE_PT_IPV4_EXT_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
482                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
483                 RTE_PTYPE_INNER_L3_IPV6_EXT,
484         [TXGBE_PT_IPV4_EXT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
485                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
486                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
487         [TXGBE_PT_IPV4_EXT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
488                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
489                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
490         [TXGBE_PT_IPV4_EXT_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
491                 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP |
492                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
493 };
494
495 const u32
496 txgbe_ptype_table_tn[TXGBE_PTID_MAX] __rte_cache_aligned = {
497         [TXGBE_PT_NVGRE] = RTE_PTYPE_L2_ETHER |
498                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
499                 RTE_PTYPE_INNER_L2_ETHER,
500         [TXGBE_PT_NVGRE_IPV4] = RTE_PTYPE_L2_ETHER |
501                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
502                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
503         [TXGBE_PT_NVGRE_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
504                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
505                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT,
506         [TXGBE_PT_NVGRE_IPV6] = RTE_PTYPE_L2_ETHER |
507                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
508                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6,
509         [TXGBE_PT_NVGRE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
510                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
511                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
512         [TXGBE_PT_NVGRE_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
513                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
514                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT,
515         [TXGBE_PT_NVGRE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
516                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
517                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
518         [TXGBE_PT_NVGRE_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
519                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
520                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
521                 RTE_PTYPE_INNER_L4_TCP,
522         [TXGBE_PT_NVGRE_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
523                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
524                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
525                 RTE_PTYPE_INNER_L4_TCP,
526         [TXGBE_PT_NVGRE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
527                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
528                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
529         [TXGBE_PT_NVGRE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
530                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
531                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
532                 RTE_PTYPE_INNER_L4_TCP,
533         [TXGBE_PT_NVGRE_IPV4_IPV6_EXT_TCP] =
534                 RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
535                 RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
536                 RTE_PTYPE_INNER_L3_IPV4,
537         [TXGBE_PT_NVGRE_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
538                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
539                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
540                 RTE_PTYPE_INNER_L4_UDP,
541         [TXGBE_PT_NVGRE_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
542                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
543                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
544                 RTE_PTYPE_INNER_L4_UDP,
545         [TXGBE_PT_NVGRE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
546                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
547                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 |
548                 RTE_PTYPE_INNER_L4_SCTP,
549         [TXGBE_PT_NVGRE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
550                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
551                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
552         [TXGBE_PT_NVGRE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
553                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
554                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
555                 RTE_PTYPE_INNER_L4_UDP,
556         [TXGBE_PT_NVGRE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
557                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
558                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT |
559                 RTE_PTYPE_INNER_L4_SCTP,
560         [TXGBE_PT_NVGRE_IPV4_IPV6_EXT_UDP] =
561                 RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
562                 RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER |
563                 RTE_PTYPE_INNER_L3_IPV4,
564         [TXGBE_PT_NVGRE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
565                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
566                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 |
567                 RTE_PTYPE_INNER_L4_SCTP,
568         [TXGBE_PT_NVGRE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
569                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
570                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
571                 RTE_PTYPE_INNER_L4_SCTP,
572         [TXGBE_PT_NVGRE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
573                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
574                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
575                 RTE_PTYPE_INNER_L4_TCP,
576         [TXGBE_PT_NVGRE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
577                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE |
578                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT |
579                 RTE_PTYPE_INNER_L4_UDP,
580
581         [TXGBE_PT_VXLAN] = RTE_PTYPE_L2_ETHER |
582                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
583                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER,
584         [TXGBE_PT_VXLAN_IPV4] = RTE_PTYPE_L2_ETHER |
585                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
586                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
587                 RTE_PTYPE_INNER_L3_IPV4,
588         [TXGBE_PT_VXLAN_IPV4_EXT] = RTE_PTYPE_L2_ETHER |
589                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
590                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
591                 RTE_PTYPE_INNER_L3_IPV4_EXT,
592         [TXGBE_PT_VXLAN_IPV6] = RTE_PTYPE_L2_ETHER |
593                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
594                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
595                 RTE_PTYPE_INNER_L3_IPV6,
596         [TXGBE_PT_VXLAN_IPV4_IPV6] = RTE_PTYPE_L2_ETHER |
597                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
598                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
599                 RTE_PTYPE_INNER_L3_IPV4,
600         [TXGBE_PT_VXLAN_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
601                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
602                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
603                 RTE_PTYPE_INNER_L3_IPV6_EXT,
604         [TXGBE_PT_VXLAN_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER |
605                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
606                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
607                 RTE_PTYPE_INNER_L3_IPV4,
608         [TXGBE_PT_VXLAN_IPV4_TCP] = RTE_PTYPE_L2_ETHER |
609                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
610                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
611                 RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_TCP,
612         [TXGBE_PT_VXLAN_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
613                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
614                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
615                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP,
616         [TXGBE_PT_VXLAN_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER |
617                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
618                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
619                 RTE_PTYPE_INNER_L3_IPV4,
620         [TXGBE_PT_VXLAN_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER |
621                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
622                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
623                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP,
624         [TXGBE_PT_VXLAN_IPV4_IPV6_EXT_TCP] =
625                 RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
626                 RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
627                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
628         [TXGBE_PT_VXLAN_IPV4_UDP] = RTE_PTYPE_L2_ETHER |
629                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
630                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
631                 RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_UDP,
632         [TXGBE_PT_VXLAN_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
633                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
634                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
635                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP,
636         [TXGBE_PT_VXLAN_IPV6_SCTP] = RTE_PTYPE_L2_ETHER |
637                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
638                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
639                 RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP,
640         [TXGBE_PT_VXLAN_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER |
641                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
642                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
643                 RTE_PTYPE_INNER_L3_IPV4,
644         [TXGBE_PT_VXLAN_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER |
645                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
646                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
647                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP,
648         [TXGBE_PT_VXLAN_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
649                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
650                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
651                 RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP,
652         [TXGBE_PT_VXLAN_IPV4_IPV6_EXT_UDP] =
653                 RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
654                 RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN |
655                 RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4,
656         [TXGBE_PT_VXLAN_IPV4_SCTP] = RTE_PTYPE_L2_ETHER |
657                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
658                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
659                 RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_SCTP,
660         [TXGBE_PT_VXLAN_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER |
661                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
662                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
663                 RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_SCTP,
664         [TXGBE_PT_VXLAN_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER |
665                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
666                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
667                 RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_TCP,
668         [TXGBE_PT_VXLAN_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER |
669                 RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP |
670                 RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER |
671                 RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_UDP,
672 };
673