1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019 Intel Corporation
5 #ifndef _ICE_GENERIC_FLOW_H_
6 #define _ICE_GENERIC_FLOW_H_
8 #include <rte_flow_driver.h>
10 struct ice_flow_pattern {
11 enum rte_flow_item_type *items;
15 #define ICE_INSET_NONE 0x00000000000000000ULL
18 #define ICE_INSET_SMAC 0x0000000000000001ULL
19 #define ICE_INSET_DMAC 0x0000000000000002ULL
20 #define ICE_INSET_ETHERTYPE 0x0000000000000020ULL
23 #define ICE_INSET_IPV4_SRC 0x0000000000000100ULL
24 #define ICE_INSET_IPV4_DST 0x0000000000000200ULL
25 #define ICE_INSET_IPV6_SRC 0x0000000000000400ULL
26 #define ICE_INSET_IPV6_DST 0x0000000000000800ULL
27 #define ICE_INSET_SRC_PORT 0x0000000000001000ULL
28 #define ICE_INSET_DST_PORT 0x0000000000002000ULL
29 #define ICE_INSET_ARP 0x0000000000004000ULL
32 #define ICE_INSET_IPV4_TOS 0x0000000000010000ULL
33 #define ICE_INSET_IPV4_PROTO 0x0000000000020000ULL
34 #define ICE_INSET_IPV4_TTL 0x0000000000040000ULL
35 #define ICE_INSET_IPV6_TOS 0x0000000000100000ULL
36 #define ICE_INSET_IPV6_PROTO 0x0000000000200000ULL
37 #define ICE_INSET_IPV6_HOP_LIMIT 0x0000000000400000ULL
38 #define ICE_INSET_ICMP 0x0000000001000000ULL
39 #define ICE_INSET_ICMP6 0x0000000002000000ULL
41 /* bit 32 ~ bit 47, tunnel fields */
42 #define ICE_INSET_TUN_SMAC 0x0000000100000000ULL
43 #define ICE_INSET_TUN_DMAC 0x0000000200000000ULL
44 #define ICE_INSET_TUN_IPV4_SRC 0x0000000400000000ULL
45 #define ICE_INSET_TUN_IPV4_DST 0x0000000800000000ULL
46 #define ICE_INSET_TUN_IPV4_TTL 0x0000001000000000ULL
47 #define ICE_INSET_TUN_IPV4_PROTO 0x0000002000000000ULL
48 #define ICE_INSET_TUN_IPV6_SRC 0x0000004000000000ULL
49 #define ICE_INSET_TUN_IPV6_DST 0x0000008000000000ULL
50 #define ICE_INSET_TUN_IPV6_TTL 0x0000010000000000ULL
51 #define ICE_INSET_TUN_IPV6_PROTO 0x0000020000000000ULL
52 #define ICE_INSET_TUN_SRC_PORT 0x0000040000000000ULL
53 #define ICE_INSET_TUN_DST_PORT 0x0000080000000000ULL
54 #define ICE_INSET_TUN_ID 0x0000100000000000ULL
57 #define ICE_INSET_LAST_ETHER_TYPE 0x0001000000000000ULL
59 #define ICE_FLAG_VLAN_INNER 0x00000001ULL
60 #define ICE_FLAG_VLAN_OUTER 0x00000002ULL
62 #define INSET_ETHER ( \
63 ICE_INSET_DMAC | ICE_INSET_SMAC | ICE_INSET_ETHERTYPE)
64 #define INSET_MAC_IPV4 ( \
65 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
66 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS)
67 #define INSET_MAC_IPV4_L4 ( \
68 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
69 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_DST_PORT | \
71 #define INSET_MAC_IPV4_ICMP ( \
72 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
73 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_ICMP)
74 #define INSET_MAC_IPV6 ( \
75 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
76 ICE_INSET_IPV6_TOS | ICE_INSET_IPV6_HOP_LIMIT)
77 #define INSET_MAC_IPV6_L4 ( \
78 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
79 ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | \
80 ICE_INSET_DST_PORT | ICE_INSET_SRC_PORT)
81 #define INSET_MAC_IPV6_ICMP ( \
82 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
83 ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | ICE_INSET_ICMP6)
84 #define INSET_TUNNEL_IPV4_TYPE1 ( \
85 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
86 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \
88 #define INSET_TUNNEL_IPV4_TYPE2 ( \
89 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
90 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \
91 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT | \
93 #define INSET_TUNNEL_IPV4_TYPE3 ( \
94 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
95 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_ICMP | \
97 #define INSET_TUNNEL_IPV6_TYPE1 ( \
98 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
99 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \
101 #define INSET_TUNNEL_IPV6_TYPE2 ( \
102 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
103 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \
104 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT | \
106 #define INSET_TUNNEL_IPV6_TYPE3 ( \
107 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
108 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_ICMP6 | \
112 static enum rte_flow_item_type pattern_ethertype[] = {
113 RTE_FLOW_ITEM_TYPE_ETH,
114 RTE_FLOW_ITEM_TYPE_END,
117 /* non-tunnel IPv4 */
118 static enum rte_flow_item_type pattern_ipv4[] = {
119 RTE_FLOW_ITEM_TYPE_ETH,
120 RTE_FLOW_ITEM_TYPE_IPV4,
121 RTE_FLOW_ITEM_TYPE_END,
124 static enum rte_flow_item_type pattern_ipv4_udp[] = {
125 RTE_FLOW_ITEM_TYPE_ETH,
126 RTE_FLOW_ITEM_TYPE_IPV4,
127 RTE_FLOW_ITEM_TYPE_UDP,
128 RTE_FLOW_ITEM_TYPE_END,
131 static enum rte_flow_item_type pattern_ipv4_tcp[] = {
132 RTE_FLOW_ITEM_TYPE_ETH,
133 RTE_FLOW_ITEM_TYPE_IPV4,
134 RTE_FLOW_ITEM_TYPE_TCP,
135 RTE_FLOW_ITEM_TYPE_END,
138 static enum rte_flow_item_type pattern_ipv4_sctp[] = {
139 RTE_FLOW_ITEM_TYPE_ETH,
140 RTE_FLOW_ITEM_TYPE_IPV4,
141 RTE_FLOW_ITEM_TYPE_SCTP,
142 RTE_FLOW_ITEM_TYPE_END,
145 static enum rte_flow_item_type pattern_ipv4_icmp[] = {
146 RTE_FLOW_ITEM_TYPE_ETH,
147 RTE_FLOW_ITEM_TYPE_IPV4,
148 RTE_FLOW_ITEM_TYPE_ICMP,
149 RTE_FLOW_ITEM_TYPE_END,
152 /* non-tunnel IPv6 */
153 static enum rte_flow_item_type pattern_ipv6[] = {
154 RTE_FLOW_ITEM_TYPE_ETH,
155 RTE_FLOW_ITEM_TYPE_IPV6,
156 RTE_FLOW_ITEM_TYPE_END,
159 static enum rte_flow_item_type pattern_ipv6_udp[] = {
160 RTE_FLOW_ITEM_TYPE_ETH,
161 RTE_FLOW_ITEM_TYPE_IPV6,
162 RTE_FLOW_ITEM_TYPE_UDP,
163 RTE_FLOW_ITEM_TYPE_END,
166 static enum rte_flow_item_type pattern_ipv6_tcp[] = {
167 RTE_FLOW_ITEM_TYPE_ETH,
168 RTE_FLOW_ITEM_TYPE_IPV6,
169 RTE_FLOW_ITEM_TYPE_TCP,
170 RTE_FLOW_ITEM_TYPE_END,
173 static enum rte_flow_item_type pattern_ipv6_sctp[] = {
174 RTE_FLOW_ITEM_TYPE_ETH,
175 RTE_FLOW_ITEM_TYPE_IPV6,
176 RTE_FLOW_ITEM_TYPE_SCTP,
177 RTE_FLOW_ITEM_TYPE_END,
180 static enum rte_flow_item_type pattern_ipv6_icmp6[] = {
181 RTE_FLOW_ITEM_TYPE_ETH,
182 RTE_FLOW_ITEM_TYPE_IPV6,
183 RTE_FLOW_ITEM_TYPE_ICMP6,
184 RTE_FLOW_ITEM_TYPE_END,
187 /* IPv4 VXLAN IPv4 */
188 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4[] = {
189 RTE_FLOW_ITEM_TYPE_ETH,
190 RTE_FLOW_ITEM_TYPE_IPV4,
191 RTE_FLOW_ITEM_TYPE_UDP,
192 RTE_FLOW_ITEM_TYPE_VXLAN,
193 RTE_FLOW_ITEM_TYPE_IPV4,
194 RTE_FLOW_ITEM_TYPE_END,
197 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_udp[] = {
198 RTE_FLOW_ITEM_TYPE_ETH,
199 RTE_FLOW_ITEM_TYPE_IPV4,
200 RTE_FLOW_ITEM_TYPE_UDP,
201 RTE_FLOW_ITEM_TYPE_VXLAN,
202 RTE_FLOW_ITEM_TYPE_IPV4,
203 RTE_FLOW_ITEM_TYPE_UDP,
204 RTE_FLOW_ITEM_TYPE_END,
207 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_tcp[] = {
208 RTE_FLOW_ITEM_TYPE_ETH,
209 RTE_FLOW_ITEM_TYPE_IPV4,
210 RTE_FLOW_ITEM_TYPE_UDP,
211 RTE_FLOW_ITEM_TYPE_VXLAN,
212 RTE_FLOW_ITEM_TYPE_IPV4,
213 RTE_FLOW_ITEM_TYPE_TCP,
214 RTE_FLOW_ITEM_TYPE_END,
217 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_sctp[] = {
218 RTE_FLOW_ITEM_TYPE_ETH,
219 RTE_FLOW_ITEM_TYPE_IPV4,
220 RTE_FLOW_ITEM_TYPE_UDP,
221 RTE_FLOW_ITEM_TYPE_VXLAN,
222 RTE_FLOW_ITEM_TYPE_IPV4,
223 RTE_FLOW_ITEM_TYPE_SCTP,
224 RTE_FLOW_ITEM_TYPE_END,
227 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_icmp[] = {
228 RTE_FLOW_ITEM_TYPE_ETH,
229 RTE_FLOW_ITEM_TYPE_IPV4,
230 RTE_FLOW_ITEM_TYPE_UDP,
231 RTE_FLOW_ITEM_TYPE_VXLAN,
232 RTE_FLOW_ITEM_TYPE_IPV4,
233 RTE_FLOW_ITEM_TYPE_ICMP,
234 RTE_FLOW_ITEM_TYPE_END,
237 /* IPv4 VXLAN MAC IPv4 */
238 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4[] = {
239 RTE_FLOW_ITEM_TYPE_ETH,
240 RTE_FLOW_ITEM_TYPE_IPV4,
241 RTE_FLOW_ITEM_TYPE_UDP,
242 RTE_FLOW_ITEM_TYPE_VXLAN,
243 RTE_FLOW_ITEM_TYPE_ETH,
244 RTE_FLOW_ITEM_TYPE_IPV4,
245 RTE_FLOW_ITEM_TYPE_END,
248 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_udp[] = {
249 RTE_FLOW_ITEM_TYPE_ETH,
250 RTE_FLOW_ITEM_TYPE_IPV4,
251 RTE_FLOW_ITEM_TYPE_UDP,
252 RTE_FLOW_ITEM_TYPE_VXLAN,
253 RTE_FLOW_ITEM_TYPE_ETH,
254 RTE_FLOW_ITEM_TYPE_IPV4,
255 RTE_FLOW_ITEM_TYPE_UDP,
256 RTE_FLOW_ITEM_TYPE_END,
259 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_tcp[] = {
260 RTE_FLOW_ITEM_TYPE_ETH,
261 RTE_FLOW_ITEM_TYPE_IPV4,
262 RTE_FLOW_ITEM_TYPE_UDP,
263 RTE_FLOW_ITEM_TYPE_VXLAN,
264 RTE_FLOW_ITEM_TYPE_ETH,
265 RTE_FLOW_ITEM_TYPE_IPV4,
266 RTE_FLOW_ITEM_TYPE_TCP,
267 RTE_FLOW_ITEM_TYPE_END,
270 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_sctp[] = {
271 RTE_FLOW_ITEM_TYPE_ETH,
272 RTE_FLOW_ITEM_TYPE_IPV4,
273 RTE_FLOW_ITEM_TYPE_UDP,
274 RTE_FLOW_ITEM_TYPE_VXLAN,
275 RTE_FLOW_ITEM_TYPE_ETH,
276 RTE_FLOW_ITEM_TYPE_IPV4,
277 RTE_FLOW_ITEM_TYPE_SCTP,
278 RTE_FLOW_ITEM_TYPE_END,
281 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_icmp[] = {
282 RTE_FLOW_ITEM_TYPE_ETH,
283 RTE_FLOW_ITEM_TYPE_IPV4,
284 RTE_FLOW_ITEM_TYPE_UDP,
285 RTE_FLOW_ITEM_TYPE_VXLAN,
286 RTE_FLOW_ITEM_TYPE_ETH,
287 RTE_FLOW_ITEM_TYPE_IPV4,
288 RTE_FLOW_ITEM_TYPE_ICMP,
289 RTE_FLOW_ITEM_TYPE_END,
292 /* IPv4 VXLAN IPv6 */
293 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6[] = {
294 RTE_FLOW_ITEM_TYPE_ETH,
295 RTE_FLOW_ITEM_TYPE_IPV4,
296 RTE_FLOW_ITEM_TYPE_UDP,
297 RTE_FLOW_ITEM_TYPE_VXLAN,
298 RTE_FLOW_ITEM_TYPE_IPV6,
299 RTE_FLOW_ITEM_TYPE_END,
302 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_udp[] = {
303 RTE_FLOW_ITEM_TYPE_ETH,
304 RTE_FLOW_ITEM_TYPE_IPV4,
305 RTE_FLOW_ITEM_TYPE_UDP,
306 RTE_FLOW_ITEM_TYPE_VXLAN,
307 RTE_FLOW_ITEM_TYPE_IPV6,
308 RTE_FLOW_ITEM_TYPE_UDP,
309 RTE_FLOW_ITEM_TYPE_END,
312 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_tcp[] = {
313 RTE_FLOW_ITEM_TYPE_ETH,
314 RTE_FLOW_ITEM_TYPE_IPV4,
315 RTE_FLOW_ITEM_TYPE_UDP,
316 RTE_FLOW_ITEM_TYPE_VXLAN,
317 RTE_FLOW_ITEM_TYPE_IPV6,
318 RTE_FLOW_ITEM_TYPE_TCP,
319 RTE_FLOW_ITEM_TYPE_END,
322 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_sctp[] = {
323 RTE_FLOW_ITEM_TYPE_ETH,
324 RTE_FLOW_ITEM_TYPE_IPV4,
325 RTE_FLOW_ITEM_TYPE_UDP,
326 RTE_FLOW_ITEM_TYPE_VXLAN,
327 RTE_FLOW_ITEM_TYPE_IPV6,
328 RTE_FLOW_ITEM_TYPE_SCTP,
329 RTE_FLOW_ITEM_TYPE_END,
332 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_icmp[] = {
333 RTE_FLOW_ITEM_TYPE_ETH,
334 RTE_FLOW_ITEM_TYPE_IPV4,
335 RTE_FLOW_ITEM_TYPE_UDP,
336 RTE_FLOW_ITEM_TYPE_VXLAN,
337 RTE_FLOW_ITEM_TYPE_IPV6,
338 RTE_FLOW_ITEM_TYPE_ICMP,
339 RTE_FLOW_ITEM_TYPE_END,
342 /* IPv4 VXLAN MAC IPv6 */
343 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6[] = {
344 RTE_FLOW_ITEM_TYPE_ETH,
345 RTE_FLOW_ITEM_TYPE_IPV4,
346 RTE_FLOW_ITEM_TYPE_UDP,
347 RTE_FLOW_ITEM_TYPE_VXLAN,
348 RTE_FLOW_ITEM_TYPE_ETH,
349 RTE_FLOW_ITEM_TYPE_IPV6,
350 RTE_FLOW_ITEM_TYPE_END,
353 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_udp[] = {
354 RTE_FLOW_ITEM_TYPE_ETH,
355 RTE_FLOW_ITEM_TYPE_IPV4,
356 RTE_FLOW_ITEM_TYPE_UDP,
357 RTE_FLOW_ITEM_TYPE_VXLAN,
358 RTE_FLOW_ITEM_TYPE_ETH,
359 RTE_FLOW_ITEM_TYPE_IPV6,
360 RTE_FLOW_ITEM_TYPE_UDP,
361 RTE_FLOW_ITEM_TYPE_END,
364 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_tcp[] = {
365 RTE_FLOW_ITEM_TYPE_ETH,
366 RTE_FLOW_ITEM_TYPE_IPV4,
367 RTE_FLOW_ITEM_TYPE_UDP,
368 RTE_FLOW_ITEM_TYPE_VXLAN,
369 RTE_FLOW_ITEM_TYPE_ETH,
370 RTE_FLOW_ITEM_TYPE_IPV6,
371 RTE_FLOW_ITEM_TYPE_TCP,
372 RTE_FLOW_ITEM_TYPE_END,
375 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_sctp[] = {
376 RTE_FLOW_ITEM_TYPE_ETH,
377 RTE_FLOW_ITEM_TYPE_IPV4,
378 RTE_FLOW_ITEM_TYPE_UDP,
379 RTE_FLOW_ITEM_TYPE_VXLAN,
380 RTE_FLOW_ITEM_TYPE_ETH,
381 RTE_FLOW_ITEM_TYPE_IPV6,
382 RTE_FLOW_ITEM_TYPE_SCTP,
383 RTE_FLOW_ITEM_TYPE_END,
386 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_icmp[] = {
387 RTE_FLOW_ITEM_TYPE_ETH,
388 RTE_FLOW_ITEM_TYPE_IPV4,
389 RTE_FLOW_ITEM_TYPE_UDP,
390 RTE_FLOW_ITEM_TYPE_VXLAN,
391 RTE_FLOW_ITEM_TYPE_ETH,
392 RTE_FLOW_ITEM_TYPE_IPV6,
393 RTE_FLOW_ITEM_TYPE_ICMP,
394 RTE_FLOW_ITEM_TYPE_END,
397 /* IPv4 NVGRE IPv4 */
398 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4[] = {
399 RTE_FLOW_ITEM_TYPE_ETH,
400 RTE_FLOW_ITEM_TYPE_IPV4,
401 RTE_FLOW_ITEM_TYPE_NVGRE,
402 RTE_FLOW_ITEM_TYPE_IPV4,
403 RTE_FLOW_ITEM_TYPE_END,
406 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_udp[] = {
407 RTE_FLOW_ITEM_TYPE_ETH,
408 RTE_FLOW_ITEM_TYPE_IPV4,
409 RTE_FLOW_ITEM_TYPE_NVGRE,
410 RTE_FLOW_ITEM_TYPE_IPV4,
411 RTE_FLOW_ITEM_TYPE_UDP,
412 RTE_FLOW_ITEM_TYPE_END,
415 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_tcp[] = {
416 RTE_FLOW_ITEM_TYPE_ETH,
417 RTE_FLOW_ITEM_TYPE_IPV4,
418 RTE_FLOW_ITEM_TYPE_NVGRE,
419 RTE_FLOW_ITEM_TYPE_IPV4,
420 RTE_FLOW_ITEM_TYPE_TCP,
421 RTE_FLOW_ITEM_TYPE_END,
424 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_sctp[] = {
425 RTE_FLOW_ITEM_TYPE_ETH,
426 RTE_FLOW_ITEM_TYPE_IPV4,
427 RTE_FLOW_ITEM_TYPE_NVGRE,
428 RTE_FLOW_ITEM_TYPE_IPV4,
429 RTE_FLOW_ITEM_TYPE_SCTP,
430 RTE_FLOW_ITEM_TYPE_END,
433 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_icmp[] = {
434 RTE_FLOW_ITEM_TYPE_ETH,
435 RTE_FLOW_ITEM_TYPE_IPV4,
436 RTE_FLOW_ITEM_TYPE_NVGRE,
437 RTE_FLOW_ITEM_TYPE_IPV4,
438 RTE_FLOW_ITEM_TYPE_ICMP,
439 RTE_FLOW_ITEM_TYPE_END,
442 /* IPv4 NVGRE MAC IPv4 */
443 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4[] = {
444 RTE_FLOW_ITEM_TYPE_ETH,
445 RTE_FLOW_ITEM_TYPE_IPV4,
446 RTE_FLOW_ITEM_TYPE_NVGRE,
447 RTE_FLOW_ITEM_TYPE_ETH,
448 RTE_FLOW_ITEM_TYPE_IPV4,
449 RTE_FLOW_ITEM_TYPE_END,
452 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_udp[] = {
453 RTE_FLOW_ITEM_TYPE_ETH,
454 RTE_FLOW_ITEM_TYPE_IPV4,
455 RTE_FLOW_ITEM_TYPE_NVGRE,
456 RTE_FLOW_ITEM_TYPE_ETH,
457 RTE_FLOW_ITEM_TYPE_IPV4,
458 RTE_FLOW_ITEM_TYPE_UDP,
459 RTE_FLOW_ITEM_TYPE_END,
462 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_tcp[] = {
463 RTE_FLOW_ITEM_TYPE_ETH,
464 RTE_FLOW_ITEM_TYPE_IPV4,
465 RTE_FLOW_ITEM_TYPE_NVGRE,
466 RTE_FLOW_ITEM_TYPE_ETH,
467 RTE_FLOW_ITEM_TYPE_IPV4,
468 RTE_FLOW_ITEM_TYPE_TCP,
469 RTE_FLOW_ITEM_TYPE_END,
472 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_sctp[] = {
473 RTE_FLOW_ITEM_TYPE_ETH,
474 RTE_FLOW_ITEM_TYPE_IPV4,
475 RTE_FLOW_ITEM_TYPE_NVGRE,
476 RTE_FLOW_ITEM_TYPE_ETH,
477 RTE_FLOW_ITEM_TYPE_IPV4,
478 RTE_FLOW_ITEM_TYPE_SCTP,
479 RTE_FLOW_ITEM_TYPE_END,
482 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_icmp[] = {
483 RTE_FLOW_ITEM_TYPE_ETH,
484 RTE_FLOW_ITEM_TYPE_IPV4,
485 RTE_FLOW_ITEM_TYPE_NVGRE,
486 RTE_FLOW_ITEM_TYPE_ETH,
487 RTE_FLOW_ITEM_TYPE_IPV4,
488 RTE_FLOW_ITEM_TYPE_ICMP,
489 RTE_FLOW_ITEM_TYPE_END,
492 /* IPv4 NVGRE IPv6 */
493 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6[] = {
494 RTE_FLOW_ITEM_TYPE_ETH,
495 RTE_FLOW_ITEM_TYPE_IPV4,
496 RTE_FLOW_ITEM_TYPE_NVGRE,
497 RTE_FLOW_ITEM_TYPE_IPV6,
498 RTE_FLOW_ITEM_TYPE_END,
501 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_udp[] = {
502 RTE_FLOW_ITEM_TYPE_ETH,
503 RTE_FLOW_ITEM_TYPE_IPV4,
504 RTE_FLOW_ITEM_TYPE_NVGRE,
505 RTE_FLOW_ITEM_TYPE_IPV6,
506 RTE_FLOW_ITEM_TYPE_UDP,
507 RTE_FLOW_ITEM_TYPE_END,
510 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_tcp[] = {
511 RTE_FLOW_ITEM_TYPE_ETH,
512 RTE_FLOW_ITEM_TYPE_IPV4,
513 RTE_FLOW_ITEM_TYPE_NVGRE,
514 RTE_FLOW_ITEM_TYPE_IPV6,
515 RTE_FLOW_ITEM_TYPE_TCP,
516 RTE_FLOW_ITEM_TYPE_END,
519 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_sctp[] = {
520 RTE_FLOW_ITEM_TYPE_ETH,
521 RTE_FLOW_ITEM_TYPE_IPV4,
522 RTE_FLOW_ITEM_TYPE_NVGRE,
523 RTE_FLOW_ITEM_TYPE_IPV6,
524 RTE_FLOW_ITEM_TYPE_SCTP,
525 RTE_FLOW_ITEM_TYPE_END,
529 /* IPv4 NVGRE MAC IPv6 */
530 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6[] = {
531 RTE_FLOW_ITEM_TYPE_ETH,
532 RTE_FLOW_ITEM_TYPE_IPV4,
533 RTE_FLOW_ITEM_TYPE_NVGRE,
534 RTE_FLOW_ITEM_TYPE_ETH,
535 RTE_FLOW_ITEM_TYPE_IPV6,
536 RTE_FLOW_ITEM_TYPE_END,
539 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_udp[] = {
540 RTE_FLOW_ITEM_TYPE_ETH,
541 RTE_FLOW_ITEM_TYPE_IPV4,
542 RTE_FLOW_ITEM_TYPE_NVGRE,
543 RTE_FLOW_ITEM_TYPE_ETH,
544 RTE_FLOW_ITEM_TYPE_IPV6,
545 RTE_FLOW_ITEM_TYPE_UDP,
546 RTE_FLOW_ITEM_TYPE_END,
549 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_tcp[] = {
550 RTE_FLOW_ITEM_TYPE_ETH,
551 RTE_FLOW_ITEM_TYPE_IPV4,
552 RTE_FLOW_ITEM_TYPE_NVGRE,
553 RTE_FLOW_ITEM_TYPE_ETH,
554 RTE_FLOW_ITEM_TYPE_IPV6,
555 RTE_FLOW_ITEM_TYPE_TCP,
556 RTE_FLOW_ITEM_TYPE_END,
559 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_sctp[] = {
560 RTE_FLOW_ITEM_TYPE_ETH,
561 RTE_FLOW_ITEM_TYPE_IPV4,
562 RTE_FLOW_ITEM_TYPE_NVGRE,
563 RTE_FLOW_ITEM_TYPE_ETH,
564 RTE_FLOW_ITEM_TYPE_IPV6,
565 RTE_FLOW_ITEM_TYPE_SCTP,
566 RTE_FLOW_ITEM_TYPE_END,
569 static struct ice_flow_pattern ice_supported_patterns[] = {
570 {pattern_ethertype, INSET_ETHER},
571 {pattern_ipv4, INSET_MAC_IPV4},
572 {pattern_ipv4_udp, INSET_MAC_IPV4_L4},
573 {pattern_ipv4_sctp, INSET_MAC_IPV4_L4},
574 {pattern_ipv4_tcp, INSET_MAC_IPV4_L4},
575 {pattern_ipv4_icmp, INSET_MAC_IPV4_ICMP},
576 {pattern_ipv6, INSET_MAC_IPV6},
577 {pattern_ipv6_udp, INSET_MAC_IPV6_L4},
578 {pattern_ipv6_sctp, INSET_MAC_IPV6_L4},
579 {pattern_ipv6_tcp, INSET_MAC_IPV6_L4},
580 {pattern_ipv6_icmp6, INSET_MAC_IPV6_ICMP},
581 {pattern_ipv4_vxlan_ipv4, INSET_TUNNEL_IPV4_TYPE1},
582 {pattern_ipv4_vxlan_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
583 {pattern_ipv4_vxlan_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
584 {pattern_ipv4_vxlan_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
585 {pattern_ipv4_vxlan_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
586 {pattern_ipv4_vxlan_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
587 {pattern_ipv4_vxlan_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
588 {pattern_ipv4_vxlan_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
589 {pattern_ipv4_vxlan_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
590 {pattern_ipv4_vxlan_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
591 {pattern_ipv4_vxlan_ipv6, INSET_TUNNEL_IPV6_TYPE1},
592 {pattern_ipv4_vxlan_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
593 {pattern_ipv4_vxlan_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
594 {pattern_ipv4_vxlan_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
595 {pattern_ipv4_vxlan_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
596 {pattern_ipv4_vxlan_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
597 {pattern_ipv4_vxlan_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
598 {pattern_ipv4_vxlan_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
599 {pattern_ipv4_vxlan_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
600 {pattern_ipv4_vxlan_eth_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
601 {pattern_ipv4_nvgre_ipv4, INSET_TUNNEL_IPV4_TYPE1},
602 {pattern_ipv4_nvgre_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
603 {pattern_ipv4_nvgre_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
604 {pattern_ipv4_nvgre_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
605 {pattern_ipv4_nvgre_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
606 {pattern_ipv4_nvgre_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
607 {pattern_ipv4_nvgre_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
608 {pattern_ipv4_nvgre_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
609 {pattern_ipv4_nvgre_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
610 {pattern_ipv4_nvgre_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
611 {pattern_ipv4_nvgre_ipv6, INSET_TUNNEL_IPV6_TYPE1},
612 {pattern_ipv4_nvgre_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
613 {pattern_ipv4_nvgre_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
614 {pattern_ipv4_nvgre_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
615 {pattern_ipv4_nvgre_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
616 {pattern_ipv4_nvgre_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
617 {pattern_ipv4_nvgre_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
618 {pattern_ipv4_nvgre_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},