xref: /f-stack/dpdk/drivers/net/txgbe/txgbe_ptypes.c (revision 2d9fd380)
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 
txgbe_get_supported_ptypes(void)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
txgbe_encode_ptype_fcoe(u32 ptype)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
txgbe_encode_ptype_mac(u32 ptype)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
txgbe_encode_ptype_ip(u32 ptype)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
txgbe_encode_ptype_tunnel(u32 ptype)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 
txgbe_decode_ptype(u8 ptid)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 
txgbe_encode_ptype(u32 ptype)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 
674