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)
87 #define INSET_TUNNEL_IPV4_TYPE2 ( \
88 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
89 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \
90 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT)
91 #define INSET_TUNNEL_IPV4_TYPE3 ( \
92 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
93 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_ICMP)
94 #define INSET_TUNNEL_IPV6_TYPE1 ( \
95 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
96 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO)
97 #define INSET_TUNNEL_IPV6_TYPE2 ( \
98 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
99 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \
100 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT)
101 #define INSET_TUNNEL_IPV6_TYPE3 ( \
102 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
103 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_ICMP6)
106 static enum rte_flow_item_type pattern_ethertype[] = {
107 RTE_FLOW_ITEM_TYPE_ETH,
108 RTE_FLOW_ITEM_TYPE_END,
111 /* non-tunnel IPv4 */
112 static enum rte_flow_item_type pattern_ipv4[] = {
113 RTE_FLOW_ITEM_TYPE_ETH,
114 RTE_FLOW_ITEM_TYPE_IPV4,
115 RTE_FLOW_ITEM_TYPE_END,
118 static enum rte_flow_item_type pattern_ipv4_udp[] = {
119 RTE_FLOW_ITEM_TYPE_ETH,
120 RTE_FLOW_ITEM_TYPE_IPV4,
121 RTE_FLOW_ITEM_TYPE_UDP,
122 RTE_FLOW_ITEM_TYPE_END,
125 static enum rte_flow_item_type pattern_ipv4_tcp[] = {
126 RTE_FLOW_ITEM_TYPE_ETH,
127 RTE_FLOW_ITEM_TYPE_IPV4,
128 RTE_FLOW_ITEM_TYPE_TCP,
129 RTE_FLOW_ITEM_TYPE_END,
132 static enum rte_flow_item_type pattern_ipv4_sctp[] = {
133 RTE_FLOW_ITEM_TYPE_ETH,
134 RTE_FLOW_ITEM_TYPE_IPV4,
135 RTE_FLOW_ITEM_TYPE_SCTP,
136 RTE_FLOW_ITEM_TYPE_END,
139 static enum rte_flow_item_type pattern_ipv4_icmp[] = {
140 RTE_FLOW_ITEM_TYPE_ETH,
141 RTE_FLOW_ITEM_TYPE_IPV4,
142 RTE_FLOW_ITEM_TYPE_ICMP,
143 RTE_FLOW_ITEM_TYPE_END,
146 /* non-tunnel IPv6 */
147 static enum rte_flow_item_type pattern_ipv6[] = {
148 RTE_FLOW_ITEM_TYPE_ETH,
149 RTE_FLOW_ITEM_TYPE_IPV6,
150 RTE_FLOW_ITEM_TYPE_END,
153 static enum rte_flow_item_type pattern_ipv6_udp[] = {
154 RTE_FLOW_ITEM_TYPE_ETH,
155 RTE_FLOW_ITEM_TYPE_IPV6,
156 RTE_FLOW_ITEM_TYPE_UDP,
157 RTE_FLOW_ITEM_TYPE_END,
160 static enum rte_flow_item_type pattern_ipv6_tcp[] = {
161 RTE_FLOW_ITEM_TYPE_ETH,
162 RTE_FLOW_ITEM_TYPE_IPV6,
163 RTE_FLOW_ITEM_TYPE_TCP,
164 RTE_FLOW_ITEM_TYPE_END,
167 static enum rte_flow_item_type pattern_ipv6_sctp[] = {
168 RTE_FLOW_ITEM_TYPE_ETH,
169 RTE_FLOW_ITEM_TYPE_IPV6,
170 RTE_FLOW_ITEM_TYPE_SCTP,
171 RTE_FLOW_ITEM_TYPE_END,
174 static enum rte_flow_item_type pattern_ipv6_icmp6[] = {
175 RTE_FLOW_ITEM_TYPE_ETH,
176 RTE_FLOW_ITEM_TYPE_IPV6,
177 RTE_FLOW_ITEM_TYPE_ICMP6,
178 RTE_FLOW_ITEM_TYPE_END,
181 /* IPv4 VXLAN IPv4 */
182 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4[] = {
183 RTE_FLOW_ITEM_TYPE_ETH,
184 RTE_FLOW_ITEM_TYPE_IPV4,
185 RTE_FLOW_ITEM_TYPE_UDP,
186 RTE_FLOW_ITEM_TYPE_VXLAN,
187 RTE_FLOW_ITEM_TYPE_IPV4,
188 RTE_FLOW_ITEM_TYPE_END,
191 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_udp[] = {
192 RTE_FLOW_ITEM_TYPE_ETH,
193 RTE_FLOW_ITEM_TYPE_IPV4,
194 RTE_FLOW_ITEM_TYPE_UDP,
195 RTE_FLOW_ITEM_TYPE_VXLAN,
196 RTE_FLOW_ITEM_TYPE_IPV4,
197 RTE_FLOW_ITEM_TYPE_UDP,
198 RTE_FLOW_ITEM_TYPE_END,
201 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_tcp[] = {
202 RTE_FLOW_ITEM_TYPE_ETH,
203 RTE_FLOW_ITEM_TYPE_IPV4,
204 RTE_FLOW_ITEM_TYPE_UDP,
205 RTE_FLOW_ITEM_TYPE_VXLAN,
206 RTE_FLOW_ITEM_TYPE_IPV4,
207 RTE_FLOW_ITEM_TYPE_TCP,
208 RTE_FLOW_ITEM_TYPE_END,
211 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_sctp[] = {
212 RTE_FLOW_ITEM_TYPE_ETH,
213 RTE_FLOW_ITEM_TYPE_IPV4,
214 RTE_FLOW_ITEM_TYPE_UDP,
215 RTE_FLOW_ITEM_TYPE_VXLAN,
216 RTE_FLOW_ITEM_TYPE_IPV4,
217 RTE_FLOW_ITEM_TYPE_SCTP,
218 RTE_FLOW_ITEM_TYPE_END,
221 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_icmp[] = {
222 RTE_FLOW_ITEM_TYPE_ETH,
223 RTE_FLOW_ITEM_TYPE_IPV4,
224 RTE_FLOW_ITEM_TYPE_UDP,
225 RTE_FLOW_ITEM_TYPE_VXLAN,
226 RTE_FLOW_ITEM_TYPE_IPV4,
227 RTE_FLOW_ITEM_TYPE_ICMP,
228 RTE_FLOW_ITEM_TYPE_END,
231 /* IPv4 VXLAN MAC IPv4 */
232 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4[] = {
233 RTE_FLOW_ITEM_TYPE_ETH,
234 RTE_FLOW_ITEM_TYPE_IPV4,
235 RTE_FLOW_ITEM_TYPE_UDP,
236 RTE_FLOW_ITEM_TYPE_VXLAN,
237 RTE_FLOW_ITEM_TYPE_ETH,
238 RTE_FLOW_ITEM_TYPE_IPV4,
239 RTE_FLOW_ITEM_TYPE_END,
242 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_udp[] = {
243 RTE_FLOW_ITEM_TYPE_ETH,
244 RTE_FLOW_ITEM_TYPE_IPV4,
245 RTE_FLOW_ITEM_TYPE_UDP,
246 RTE_FLOW_ITEM_TYPE_VXLAN,
247 RTE_FLOW_ITEM_TYPE_ETH,
248 RTE_FLOW_ITEM_TYPE_IPV4,
249 RTE_FLOW_ITEM_TYPE_UDP,
250 RTE_FLOW_ITEM_TYPE_END,
253 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_tcp[] = {
254 RTE_FLOW_ITEM_TYPE_ETH,
255 RTE_FLOW_ITEM_TYPE_IPV4,
256 RTE_FLOW_ITEM_TYPE_UDP,
257 RTE_FLOW_ITEM_TYPE_VXLAN,
258 RTE_FLOW_ITEM_TYPE_ETH,
259 RTE_FLOW_ITEM_TYPE_IPV4,
260 RTE_FLOW_ITEM_TYPE_TCP,
261 RTE_FLOW_ITEM_TYPE_END,
264 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_sctp[] = {
265 RTE_FLOW_ITEM_TYPE_ETH,
266 RTE_FLOW_ITEM_TYPE_IPV4,
267 RTE_FLOW_ITEM_TYPE_UDP,
268 RTE_FLOW_ITEM_TYPE_VXLAN,
269 RTE_FLOW_ITEM_TYPE_ETH,
270 RTE_FLOW_ITEM_TYPE_IPV4,
271 RTE_FLOW_ITEM_TYPE_SCTP,
272 RTE_FLOW_ITEM_TYPE_END,
275 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_icmp[] = {
276 RTE_FLOW_ITEM_TYPE_ETH,
277 RTE_FLOW_ITEM_TYPE_IPV4,
278 RTE_FLOW_ITEM_TYPE_UDP,
279 RTE_FLOW_ITEM_TYPE_VXLAN,
280 RTE_FLOW_ITEM_TYPE_ETH,
281 RTE_FLOW_ITEM_TYPE_IPV4,
282 RTE_FLOW_ITEM_TYPE_ICMP,
283 RTE_FLOW_ITEM_TYPE_END,
286 /* IPv4 VXLAN IPv6 */
287 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6[] = {
288 RTE_FLOW_ITEM_TYPE_ETH,
289 RTE_FLOW_ITEM_TYPE_IPV4,
290 RTE_FLOW_ITEM_TYPE_UDP,
291 RTE_FLOW_ITEM_TYPE_VXLAN,
292 RTE_FLOW_ITEM_TYPE_IPV6,
293 RTE_FLOW_ITEM_TYPE_END,
296 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_udp[] = {
297 RTE_FLOW_ITEM_TYPE_ETH,
298 RTE_FLOW_ITEM_TYPE_IPV4,
299 RTE_FLOW_ITEM_TYPE_UDP,
300 RTE_FLOW_ITEM_TYPE_VXLAN,
301 RTE_FLOW_ITEM_TYPE_IPV6,
302 RTE_FLOW_ITEM_TYPE_UDP,
303 RTE_FLOW_ITEM_TYPE_END,
306 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_tcp[] = {
307 RTE_FLOW_ITEM_TYPE_ETH,
308 RTE_FLOW_ITEM_TYPE_IPV4,
309 RTE_FLOW_ITEM_TYPE_UDP,
310 RTE_FLOW_ITEM_TYPE_VXLAN,
311 RTE_FLOW_ITEM_TYPE_IPV6,
312 RTE_FLOW_ITEM_TYPE_TCP,
313 RTE_FLOW_ITEM_TYPE_END,
316 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_sctp[] = {
317 RTE_FLOW_ITEM_TYPE_ETH,
318 RTE_FLOW_ITEM_TYPE_IPV4,
319 RTE_FLOW_ITEM_TYPE_UDP,
320 RTE_FLOW_ITEM_TYPE_VXLAN,
321 RTE_FLOW_ITEM_TYPE_IPV6,
322 RTE_FLOW_ITEM_TYPE_SCTP,
323 RTE_FLOW_ITEM_TYPE_END,
326 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_icmp[] = {
327 RTE_FLOW_ITEM_TYPE_ETH,
328 RTE_FLOW_ITEM_TYPE_IPV4,
329 RTE_FLOW_ITEM_TYPE_UDP,
330 RTE_FLOW_ITEM_TYPE_VXLAN,
331 RTE_FLOW_ITEM_TYPE_IPV6,
332 RTE_FLOW_ITEM_TYPE_ICMP,
333 RTE_FLOW_ITEM_TYPE_END,
336 /* IPv4 VXLAN MAC IPv6 */
337 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6[] = {
338 RTE_FLOW_ITEM_TYPE_ETH,
339 RTE_FLOW_ITEM_TYPE_IPV4,
340 RTE_FLOW_ITEM_TYPE_UDP,
341 RTE_FLOW_ITEM_TYPE_VXLAN,
342 RTE_FLOW_ITEM_TYPE_ETH,
343 RTE_FLOW_ITEM_TYPE_IPV6,
344 RTE_FLOW_ITEM_TYPE_END,
347 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_udp[] = {
348 RTE_FLOW_ITEM_TYPE_ETH,
349 RTE_FLOW_ITEM_TYPE_IPV4,
350 RTE_FLOW_ITEM_TYPE_UDP,
351 RTE_FLOW_ITEM_TYPE_VXLAN,
352 RTE_FLOW_ITEM_TYPE_ETH,
353 RTE_FLOW_ITEM_TYPE_IPV6,
354 RTE_FLOW_ITEM_TYPE_UDP,
355 RTE_FLOW_ITEM_TYPE_END,
358 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_tcp[] = {
359 RTE_FLOW_ITEM_TYPE_ETH,
360 RTE_FLOW_ITEM_TYPE_IPV4,
361 RTE_FLOW_ITEM_TYPE_UDP,
362 RTE_FLOW_ITEM_TYPE_VXLAN,
363 RTE_FLOW_ITEM_TYPE_ETH,
364 RTE_FLOW_ITEM_TYPE_IPV6,
365 RTE_FLOW_ITEM_TYPE_TCP,
366 RTE_FLOW_ITEM_TYPE_END,
369 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_sctp[] = {
370 RTE_FLOW_ITEM_TYPE_ETH,
371 RTE_FLOW_ITEM_TYPE_IPV4,
372 RTE_FLOW_ITEM_TYPE_UDP,
373 RTE_FLOW_ITEM_TYPE_VXLAN,
374 RTE_FLOW_ITEM_TYPE_ETH,
375 RTE_FLOW_ITEM_TYPE_IPV6,
376 RTE_FLOW_ITEM_TYPE_SCTP,
377 RTE_FLOW_ITEM_TYPE_END,
380 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_icmp[] = {
381 RTE_FLOW_ITEM_TYPE_ETH,
382 RTE_FLOW_ITEM_TYPE_IPV4,
383 RTE_FLOW_ITEM_TYPE_UDP,
384 RTE_FLOW_ITEM_TYPE_VXLAN,
385 RTE_FLOW_ITEM_TYPE_ETH,
386 RTE_FLOW_ITEM_TYPE_IPV6,
387 RTE_FLOW_ITEM_TYPE_ICMP,
388 RTE_FLOW_ITEM_TYPE_END,
391 /* IPv4 NVGRE IPv4 */
392 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4[] = {
393 RTE_FLOW_ITEM_TYPE_ETH,
394 RTE_FLOW_ITEM_TYPE_IPV4,
395 RTE_FLOW_ITEM_TYPE_NVGRE,
396 RTE_FLOW_ITEM_TYPE_IPV4,
397 RTE_FLOW_ITEM_TYPE_END,
400 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_udp[] = {
401 RTE_FLOW_ITEM_TYPE_ETH,
402 RTE_FLOW_ITEM_TYPE_IPV4,
403 RTE_FLOW_ITEM_TYPE_NVGRE,
404 RTE_FLOW_ITEM_TYPE_IPV4,
405 RTE_FLOW_ITEM_TYPE_UDP,
406 RTE_FLOW_ITEM_TYPE_END,
409 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_tcp[] = {
410 RTE_FLOW_ITEM_TYPE_ETH,
411 RTE_FLOW_ITEM_TYPE_IPV4,
412 RTE_FLOW_ITEM_TYPE_NVGRE,
413 RTE_FLOW_ITEM_TYPE_IPV4,
414 RTE_FLOW_ITEM_TYPE_TCP,
415 RTE_FLOW_ITEM_TYPE_END,
418 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_sctp[] = {
419 RTE_FLOW_ITEM_TYPE_ETH,
420 RTE_FLOW_ITEM_TYPE_IPV4,
421 RTE_FLOW_ITEM_TYPE_NVGRE,
422 RTE_FLOW_ITEM_TYPE_IPV4,
423 RTE_FLOW_ITEM_TYPE_SCTP,
424 RTE_FLOW_ITEM_TYPE_END,
427 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_icmp[] = {
428 RTE_FLOW_ITEM_TYPE_ETH,
429 RTE_FLOW_ITEM_TYPE_IPV4,
430 RTE_FLOW_ITEM_TYPE_NVGRE,
431 RTE_FLOW_ITEM_TYPE_IPV4,
432 RTE_FLOW_ITEM_TYPE_ICMP,
433 RTE_FLOW_ITEM_TYPE_END,
436 /* IPv4 NVGRE MAC IPv4 */
437 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4[] = {
438 RTE_FLOW_ITEM_TYPE_ETH,
439 RTE_FLOW_ITEM_TYPE_IPV4,
440 RTE_FLOW_ITEM_TYPE_NVGRE,
441 RTE_FLOW_ITEM_TYPE_ETH,
442 RTE_FLOW_ITEM_TYPE_IPV4,
443 RTE_FLOW_ITEM_TYPE_END,
446 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_udp[] = {
447 RTE_FLOW_ITEM_TYPE_ETH,
448 RTE_FLOW_ITEM_TYPE_IPV4,
449 RTE_FLOW_ITEM_TYPE_NVGRE,
450 RTE_FLOW_ITEM_TYPE_ETH,
451 RTE_FLOW_ITEM_TYPE_IPV4,
452 RTE_FLOW_ITEM_TYPE_UDP,
453 RTE_FLOW_ITEM_TYPE_END,
456 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_tcp[] = {
457 RTE_FLOW_ITEM_TYPE_ETH,
458 RTE_FLOW_ITEM_TYPE_IPV4,
459 RTE_FLOW_ITEM_TYPE_NVGRE,
460 RTE_FLOW_ITEM_TYPE_ETH,
461 RTE_FLOW_ITEM_TYPE_IPV4,
462 RTE_FLOW_ITEM_TYPE_TCP,
463 RTE_FLOW_ITEM_TYPE_END,
466 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_sctp[] = {
467 RTE_FLOW_ITEM_TYPE_ETH,
468 RTE_FLOW_ITEM_TYPE_IPV4,
469 RTE_FLOW_ITEM_TYPE_NVGRE,
470 RTE_FLOW_ITEM_TYPE_ETH,
471 RTE_FLOW_ITEM_TYPE_IPV4,
472 RTE_FLOW_ITEM_TYPE_SCTP,
473 RTE_FLOW_ITEM_TYPE_END,
476 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_icmp[] = {
477 RTE_FLOW_ITEM_TYPE_ETH,
478 RTE_FLOW_ITEM_TYPE_IPV4,
479 RTE_FLOW_ITEM_TYPE_NVGRE,
480 RTE_FLOW_ITEM_TYPE_ETH,
481 RTE_FLOW_ITEM_TYPE_IPV4,
482 RTE_FLOW_ITEM_TYPE_ICMP,
483 RTE_FLOW_ITEM_TYPE_END,
486 /* IPv4 NVGRE IPv6 */
487 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6[] = {
488 RTE_FLOW_ITEM_TYPE_ETH,
489 RTE_FLOW_ITEM_TYPE_IPV4,
490 RTE_FLOW_ITEM_TYPE_NVGRE,
491 RTE_FLOW_ITEM_TYPE_IPV6,
492 RTE_FLOW_ITEM_TYPE_END,
495 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_udp[] = {
496 RTE_FLOW_ITEM_TYPE_ETH,
497 RTE_FLOW_ITEM_TYPE_IPV4,
498 RTE_FLOW_ITEM_TYPE_NVGRE,
499 RTE_FLOW_ITEM_TYPE_IPV6,
500 RTE_FLOW_ITEM_TYPE_UDP,
501 RTE_FLOW_ITEM_TYPE_END,
504 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_tcp[] = {
505 RTE_FLOW_ITEM_TYPE_ETH,
506 RTE_FLOW_ITEM_TYPE_IPV4,
507 RTE_FLOW_ITEM_TYPE_NVGRE,
508 RTE_FLOW_ITEM_TYPE_IPV6,
509 RTE_FLOW_ITEM_TYPE_TCP,
510 RTE_FLOW_ITEM_TYPE_END,
513 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_sctp[] = {
514 RTE_FLOW_ITEM_TYPE_ETH,
515 RTE_FLOW_ITEM_TYPE_IPV4,
516 RTE_FLOW_ITEM_TYPE_NVGRE,
517 RTE_FLOW_ITEM_TYPE_IPV6,
518 RTE_FLOW_ITEM_TYPE_SCTP,
519 RTE_FLOW_ITEM_TYPE_END,
523 /* IPv4 NVGRE MAC IPv6 */
524 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6[] = {
525 RTE_FLOW_ITEM_TYPE_ETH,
526 RTE_FLOW_ITEM_TYPE_IPV4,
527 RTE_FLOW_ITEM_TYPE_NVGRE,
528 RTE_FLOW_ITEM_TYPE_ETH,
529 RTE_FLOW_ITEM_TYPE_IPV6,
530 RTE_FLOW_ITEM_TYPE_END,
533 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_udp[] = {
534 RTE_FLOW_ITEM_TYPE_ETH,
535 RTE_FLOW_ITEM_TYPE_IPV4,
536 RTE_FLOW_ITEM_TYPE_NVGRE,
537 RTE_FLOW_ITEM_TYPE_ETH,
538 RTE_FLOW_ITEM_TYPE_IPV6,
539 RTE_FLOW_ITEM_TYPE_UDP,
540 RTE_FLOW_ITEM_TYPE_END,
543 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_tcp[] = {
544 RTE_FLOW_ITEM_TYPE_ETH,
545 RTE_FLOW_ITEM_TYPE_IPV4,
546 RTE_FLOW_ITEM_TYPE_NVGRE,
547 RTE_FLOW_ITEM_TYPE_ETH,
548 RTE_FLOW_ITEM_TYPE_IPV6,
549 RTE_FLOW_ITEM_TYPE_TCP,
550 RTE_FLOW_ITEM_TYPE_END,
553 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_sctp[] = {
554 RTE_FLOW_ITEM_TYPE_ETH,
555 RTE_FLOW_ITEM_TYPE_IPV4,
556 RTE_FLOW_ITEM_TYPE_NVGRE,
557 RTE_FLOW_ITEM_TYPE_ETH,
558 RTE_FLOW_ITEM_TYPE_IPV6,
559 RTE_FLOW_ITEM_TYPE_SCTP,
560 RTE_FLOW_ITEM_TYPE_END,
563 static struct ice_flow_pattern ice_supported_patterns[] = {
564 {pattern_ethertype, INSET_ETHER},
565 {pattern_ipv4, INSET_MAC_IPV4},
566 {pattern_ipv4_udp, INSET_MAC_IPV4_L4},
567 {pattern_ipv4_sctp, INSET_MAC_IPV4_L4},
568 {pattern_ipv4_tcp, INSET_MAC_IPV4_L4},
569 {pattern_ipv4_icmp, INSET_MAC_IPV4_ICMP},
570 {pattern_ipv6, INSET_MAC_IPV6},
571 {pattern_ipv6_udp, INSET_MAC_IPV6_L4},
572 {pattern_ipv6_sctp, INSET_MAC_IPV6_L4},
573 {pattern_ipv6_tcp, INSET_MAC_IPV6_L4},
574 {pattern_ipv6_icmp6, INSET_MAC_IPV6_ICMP},
575 {pattern_ipv4_vxlan_ipv4, INSET_TUNNEL_IPV4_TYPE1},
576 {pattern_ipv4_vxlan_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
577 {pattern_ipv4_vxlan_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
578 {pattern_ipv4_vxlan_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
579 {pattern_ipv4_vxlan_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
580 {pattern_ipv4_vxlan_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
581 {pattern_ipv4_vxlan_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
582 {pattern_ipv4_vxlan_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
583 {pattern_ipv4_vxlan_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
584 {pattern_ipv4_vxlan_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
585 {pattern_ipv4_vxlan_ipv6, INSET_TUNNEL_IPV6_TYPE1},
586 {pattern_ipv4_vxlan_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
587 {pattern_ipv4_vxlan_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
588 {pattern_ipv4_vxlan_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
589 {pattern_ipv4_vxlan_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
590 {pattern_ipv4_vxlan_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
591 {pattern_ipv4_vxlan_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
592 {pattern_ipv4_vxlan_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
593 {pattern_ipv4_vxlan_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
594 {pattern_ipv4_vxlan_eth_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
595 {pattern_ipv4_nvgre_ipv4, INSET_TUNNEL_IPV4_TYPE1},
596 {pattern_ipv4_nvgre_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
597 {pattern_ipv4_nvgre_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
598 {pattern_ipv4_nvgre_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
599 {pattern_ipv4_nvgre_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
600 {pattern_ipv4_nvgre_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
601 {pattern_ipv4_nvgre_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
602 {pattern_ipv4_nvgre_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
603 {pattern_ipv4_nvgre_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
604 {pattern_ipv4_nvgre_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
605 {pattern_ipv4_nvgre_ipv6, INSET_TUNNEL_IPV6_TYPE1},
606 {pattern_ipv4_nvgre_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
607 {pattern_ipv4_nvgre_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
608 {pattern_ipv4_nvgre_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
609 {pattern_ipv4_nvgre_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
610 {pattern_ipv4_nvgre_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
611 {pattern_ipv4_nvgre_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
612 {pattern_ipv4_nvgre_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},