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