1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019 Intel Corporation
13 #include <rte_ether.h>
14 #include <ethdev_driver.h>
15 #include <rte_malloc.h>
16 #include <rte_tailq.h>
18 #include "ice_ethdev.h"
19 #include "ice_generic_flow.h"
22 * Non-pipeline mode, fdir and switch both used as distributor,
23 * fdir used first, switch used as fdir's backup.
25 #define ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY 0
26 /*Pipeline mode, switch used at permission stage*/
27 #define ICE_FLOW_CLASSIFY_STAGE_PERMISSION 1
28 /*Pipeline mode, fdir used at distributor stage*/
29 #define ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR 2
31 static struct ice_engine_list engine_list =
32 TAILQ_HEAD_INITIALIZER(engine_list);
34 static int ice_flow_validate(struct rte_eth_dev *dev,
35 const struct rte_flow_attr *attr,
36 const struct rte_flow_item pattern[],
37 const struct rte_flow_action actions[],
38 struct rte_flow_error *error);
39 static struct rte_flow *ice_flow_create(struct rte_eth_dev *dev,
40 const struct rte_flow_attr *attr,
41 const struct rte_flow_item pattern[],
42 const struct rte_flow_action actions[],
43 struct rte_flow_error *error);
44 static int ice_flow_destroy(struct rte_eth_dev *dev,
45 struct rte_flow *flow,
46 struct rte_flow_error *error);
47 static int ice_flow_flush(struct rte_eth_dev *dev,
48 struct rte_flow_error *error);
49 static int ice_flow_query(struct rte_eth_dev *dev,
50 struct rte_flow *flow,
51 const struct rte_flow_action *actions,
53 struct rte_flow_error *error);
55 const struct rte_flow_ops ice_flow_ops = {
56 .validate = ice_flow_validate,
57 .create = ice_flow_create,
58 .destroy = ice_flow_destroy,
59 .flush = ice_flow_flush,
60 .query = ice_flow_query,
64 enum rte_flow_item_type pattern_empty[] = {
65 RTE_FLOW_ITEM_TYPE_END,
68 enum rte_flow_item_type pattern_any[] = {
69 RTE_FLOW_ITEM_TYPE_ANY,
70 RTE_FLOW_ITEM_TYPE_END,
74 enum rte_flow_item_type pattern_raw[] = {
75 RTE_FLOW_ITEM_TYPE_RAW,
76 RTE_FLOW_ITEM_TYPE_END,
80 enum rte_flow_item_type pattern_ethertype[] = {
81 RTE_FLOW_ITEM_TYPE_ETH,
82 RTE_FLOW_ITEM_TYPE_END,
84 enum rte_flow_item_type pattern_ethertype_vlan[] = {
85 RTE_FLOW_ITEM_TYPE_ETH,
86 RTE_FLOW_ITEM_TYPE_VLAN,
87 RTE_FLOW_ITEM_TYPE_END,
89 enum rte_flow_item_type pattern_ethertype_qinq[] = {
90 RTE_FLOW_ITEM_TYPE_ETH,
91 RTE_FLOW_ITEM_TYPE_VLAN,
92 RTE_FLOW_ITEM_TYPE_VLAN,
93 RTE_FLOW_ITEM_TYPE_END,
97 enum rte_flow_item_type pattern_eth_arp[] = {
98 RTE_FLOW_ITEM_TYPE_ETH,
99 RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4,
100 RTE_FLOW_ITEM_TYPE_END,
103 /* non-tunnel IPv4 */
104 enum rte_flow_item_type pattern_eth_ipv4[] = {
105 RTE_FLOW_ITEM_TYPE_ETH,
106 RTE_FLOW_ITEM_TYPE_IPV4,
107 RTE_FLOW_ITEM_TYPE_END,
109 enum rte_flow_item_type pattern_eth_vlan_ipv4[] = {
110 RTE_FLOW_ITEM_TYPE_ETH,
111 RTE_FLOW_ITEM_TYPE_VLAN,
112 RTE_FLOW_ITEM_TYPE_IPV4,
113 RTE_FLOW_ITEM_TYPE_END,
115 enum rte_flow_item_type pattern_eth_qinq_ipv4[] = {
116 RTE_FLOW_ITEM_TYPE_ETH,
117 RTE_FLOW_ITEM_TYPE_VLAN,
118 RTE_FLOW_ITEM_TYPE_VLAN,
119 RTE_FLOW_ITEM_TYPE_IPV4,
120 RTE_FLOW_ITEM_TYPE_END,
122 enum rte_flow_item_type pattern_eth_ipv4_udp[] = {
123 RTE_FLOW_ITEM_TYPE_ETH,
124 RTE_FLOW_ITEM_TYPE_IPV4,
125 RTE_FLOW_ITEM_TYPE_UDP,
126 RTE_FLOW_ITEM_TYPE_END,
128 enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[] = {
129 RTE_FLOW_ITEM_TYPE_ETH,
130 RTE_FLOW_ITEM_TYPE_VLAN,
131 RTE_FLOW_ITEM_TYPE_IPV4,
132 RTE_FLOW_ITEM_TYPE_UDP,
133 RTE_FLOW_ITEM_TYPE_END,
135 enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[] = {
136 RTE_FLOW_ITEM_TYPE_ETH,
137 RTE_FLOW_ITEM_TYPE_VLAN,
138 RTE_FLOW_ITEM_TYPE_VLAN,
139 RTE_FLOW_ITEM_TYPE_IPV4,
140 RTE_FLOW_ITEM_TYPE_UDP,
141 RTE_FLOW_ITEM_TYPE_END,
143 enum rte_flow_item_type pattern_eth_ipv4_tcp[] = {
144 RTE_FLOW_ITEM_TYPE_ETH,
145 RTE_FLOW_ITEM_TYPE_IPV4,
146 RTE_FLOW_ITEM_TYPE_TCP,
147 RTE_FLOW_ITEM_TYPE_END,
149 enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[] = {
150 RTE_FLOW_ITEM_TYPE_ETH,
151 RTE_FLOW_ITEM_TYPE_VLAN,
152 RTE_FLOW_ITEM_TYPE_IPV4,
153 RTE_FLOW_ITEM_TYPE_TCP,
154 RTE_FLOW_ITEM_TYPE_END,
156 enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[] = {
157 RTE_FLOW_ITEM_TYPE_ETH,
158 RTE_FLOW_ITEM_TYPE_VLAN,
159 RTE_FLOW_ITEM_TYPE_VLAN,
160 RTE_FLOW_ITEM_TYPE_IPV4,
161 RTE_FLOW_ITEM_TYPE_TCP,
162 RTE_FLOW_ITEM_TYPE_END,
164 enum rte_flow_item_type pattern_eth_ipv4_sctp[] = {
165 RTE_FLOW_ITEM_TYPE_ETH,
166 RTE_FLOW_ITEM_TYPE_IPV4,
167 RTE_FLOW_ITEM_TYPE_SCTP,
168 RTE_FLOW_ITEM_TYPE_END,
170 enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[] = {
171 RTE_FLOW_ITEM_TYPE_ETH,
172 RTE_FLOW_ITEM_TYPE_VLAN,
173 RTE_FLOW_ITEM_TYPE_IPV4,
174 RTE_FLOW_ITEM_TYPE_SCTP,
175 RTE_FLOW_ITEM_TYPE_END,
177 enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[] = {
178 RTE_FLOW_ITEM_TYPE_ETH,
179 RTE_FLOW_ITEM_TYPE_VLAN,
180 RTE_FLOW_ITEM_TYPE_VLAN,
181 RTE_FLOW_ITEM_TYPE_IPV4,
182 RTE_FLOW_ITEM_TYPE_SCTP,
183 RTE_FLOW_ITEM_TYPE_END,
185 enum rte_flow_item_type pattern_eth_ipv4_icmp[] = {
186 RTE_FLOW_ITEM_TYPE_ETH,
187 RTE_FLOW_ITEM_TYPE_IPV4,
188 RTE_FLOW_ITEM_TYPE_ICMP,
189 RTE_FLOW_ITEM_TYPE_END,
191 enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[] = {
192 RTE_FLOW_ITEM_TYPE_ETH,
193 RTE_FLOW_ITEM_TYPE_VLAN,
194 RTE_FLOW_ITEM_TYPE_IPV4,
195 RTE_FLOW_ITEM_TYPE_ICMP,
196 RTE_FLOW_ITEM_TYPE_END,
198 enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[] = {
199 RTE_FLOW_ITEM_TYPE_ETH,
200 RTE_FLOW_ITEM_TYPE_VLAN,
201 RTE_FLOW_ITEM_TYPE_VLAN,
202 RTE_FLOW_ITEM_TYPE_IPV4,
203 RTE_FLOW_ITEM_TYPE_ICMP,
204 RTE_FLOW_ITEM_TYPE_END,
207 /* non-tunnel IPv6 */
208 enum rte_flow_item_type pattern_eth_ipv6[] = {
209 RTE_FLOW_ITEM_TYPE_ETH,
210 RTE_FLOW_ITEM_TYPE_IPV6,
211 RTE_FLOW_ITEM_TYPE_END,
213 enum rte_flow_item_type pattern_eth_vlan_ipv6[] = {
214 RTE_FLOW_ITEM_TYPE_ETH,
215 RTE_FLOW_ITEM_TYPE_VLAN,
216 RTE_FLOW_ITEM_TYPE_IPV6,
217 RTE_FLOW_ITEM_TYPE_END,
219 enum rte_flow_item_type pattern_eth_qinq_ipv6[] = {
220 RTE_FLOW_ITEM_TYPE_ETH,
221 RTE_FLOW_ITEM_TYPE_VLAN,
222 RTE_FLOW_ITEM_TYPE_VLAN,
223 RTE_FLOW_ITEM_TYPE_IPV6,
224 RTE_FLOW_ITEM_TYPE_END,
226 enum rte_flow_item_type pattern_eth_ipv6_frag_ext[] = {
227 RTE_FLOW_ITEM_TYPE_ETH,
228 RTE_FLOW_ITEM_TYPE_IPV6,
229 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
230 RTE_FLOW_ITEM_TYPE_END,
232 enum rte_flow_item_type pattern_eth_vlan_ipv6_frag_ext[] = {
233 RTE_FLOW_ITEM_TYPE_ETH,
234 RTE_FLOW_ITEM_TYPE_VLAN,
235 RTE_FLOW_ITEM_TYPE_IPV6,
236 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
237 RTE_FLOW_ITEM_TYPE_END,
239 enum rte_flow_item_type pattern_eth_qinq_ipv6_frag_ext[] = {
240 RTE_FLOW_ITEM_TYPE_ETH,
241 RTE_FLOW_ITEM_TYPE_VLAN,
242 RTE_FLOW_ITEM_TYPE_VLAN,
243 RTE_FLOW_ITEM_TYPE_IPV6,
244 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
245 RTE_FLOW_ITEM_TYPE_END,
247 enum rte_flow_item_type pattern_eth_ipv6_udp[] = {
248 RTE_FLOW_ITEM_TYPE_ETH,
249 RTE_FLOW_ITEM_TYPE_IPV6,
250 RTE_FLOW_ITEM_TYPE_UDP,
251 RTE_FLOW_ITEM_TYPE_END,
253 enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[] = {
254 RTE_FLOW_ITEM_TYPE_ETH,
255 RTE_FLOW_ITEM_TYPE_VLAN,
256 RTE_FLOW_ITEM_TYPE_IPV6,
257 RTE_FLOW_ITEM_TYPE_UDP,
258 RTE_FLOW_ITEM_TYPE_END,
260 enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[] = {
261 RTE_FLOW_ITEM_TYPE_ETH,
262 RTE_FLOW_ITEM_TYPE_VLAN,
263 RTE_FLOW_ITEM_TYPE_VLAN,
264 RTE_FLOW_ITEM_TYPE_IPV6,
265 RTE_FLOW_ITEM_TYPE_UDP,
266 RTE_FLOW_ITEM_TYPE_END,
268 enum rte_flow_item_type pattern_eth_ipv6_tcp[] = {
269 RTE_FLOW_ITEM_TYPE_ETH,
270 RTE_FLOW_ITEM_TYPE_IPV6,
271 RTE_FLOW_ITEM_TYPE_TCP,
272 RTE_FLOW_ITEM_TYPE_END,
274 enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[] = {
275 RTE_FLOW_ITEM_TYPE_ETH,
276 RTE_FLOW_ITEM_TYPE_VLAN,
277 RTE_FLOW_ITEM_TYPE_IPV6,
278 RTE_FLOW_ITEM_TYPE_TCP,
279 RTE_FLOW_ITEM_TYPE_END,
281 enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[] = {
282 RTE_FLOW_ITEM_TYPE_ETH,
283 RTE_FLOW_ITEM_TYPE_VLAN,
284 RTE_FLOW_ITEM_TYPE_VLAN,
285 RTE_FLOW_ITEM_TYPE_IPV6,
286 RTE_FLOW_ITEM_TYPE_TCP,
287 RTE_FLOW_ITEM_TYPE_END,
289 enum rte_flow_item_type pattern_eth_ipv6_sctp[] = {
290 RTE_FLOW_ITEM_TYPE_ETH,
291 RTE_FLOW_ITEM_TYPE_IPV6,
292 RTE_FLOW_ITEM_TYPE_SCTP,
293 RTE_FLOW_ITEM_TYPE_END,
295 enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[] = {
296 RTE_FLOW_ITEM_TYPE_ETH,
297 RTE_FLOW_ITEM_TYPE_VLAN,
298 RTE_FLOW_ITEM_TYPE_IPV6,
299 RTE_FLOW_ITEM_TYPE_SCTP,
300 RTE_FLOW_ITEM_TYPE_END,
302 enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[] = {
303 RTE_FLOW_ITEM_TYPE_ETH,
304 RTE_FLOW_ITEM_TYPE_VLAN,
305 RTE_FLOW_ITEM_TYPE_VLAN,
306 RTE_FLOW_ITEM_TYPE_IPV6,
307 RTE_FLOW_ITEM_TYPE_SCTP,
308 RTE_FLOW_ITEM_TYPE_END,
310 enum rte_flow_item_type pattern_eth_ipv6_icmp6[] = {
311 RTE_FLOW_ITEM_TYPE_ETH,
312 RTE_FLOW_ITEM_TYPE_IPV6,
313 RTE_FLOW_ITEM_TYPE_ICMP6,
314 RTE_FLOW_ITEM_TYPE_END,
316 enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[] = {
317 RTE_FLOW_ITEM_TYPE_ETH,
318 RTE_FLOW_ITEM_TYPE_VLAN,
319 RTE_FLOW_ITEM_TYPE_IPV6,
320 RTE_FLOW_ITEM_TYPE_ICMP6,
321 RTE_FLOW_ITEM_TYPE_END,
323 enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[] = {
324 RTE_FLOW_ITEM_TYPE_ETH,
325 RTE_FLOW_ITEM_TYPE_VLAN,
326 RTE_FLOW_ITEM_TYPE_VLAN,
327 RTE_FLOW_ITEM_TYPE_IPV6,
328 RTE_FLOW_ITEM_TYPE_ICMP6,
329 RTE_FLOW_ITEM_TYPE_END,
332 /* IPv4 VXLAN IPv4 */
333 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[] = {
334 RTE_FLOW_ITEM_TYPE_ETH,
335 RTE_FLOW_ITEM_TYPE_IPV4,
336 RTE_FLOW_ITEM_TYPE_UDP,
337 RTE_FLOW_ITEM_TYPE_VXLAN,
338 RTE_FLOW_ITEM_TYPE_IPV4,
339 RTE_FLOW_ITEM_TYPE_END,
341 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[] = {
342 RTE_FLOW_ITEM_TYPE_ETH,
343 RTE_FLOW_ITEM_TYPE_IPV4,
344 RTE_FLOW_ITEM_TYPE_UDP,
345 RTE_FLOW_ITEM_TYPE_VXLAN,
346 RTE_FLOW_ITEM_TYPE_IPV4,
347 RTE_FLOW_ITEM_TYPE_UDP,
348 RTE_FLOW_ITEM_TYPE_END,
350 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[] = {
351 RTE_FLOW_ITEM_TYPE_ETH,
352 RTE_FLOW_ITEM_TYPE_IPV4,
353 RTE_FLOW_ITEM_TYPE_UDP,
354 RTE_FLOW_ITEM_TYPE_VXLAN,
355 RTE_FLOW_ITEM_TYPE_IPV4,
356 RTE_FLOW_ITEM_TYPE_TCP,
357 RTE_FLOW_ITEM_TYPE_END,
359 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[] = {
360 RTE_FLOW_ITEM_TYPE_ETH,
361 RTE_FLOW_ITEM_TYPE_IPV4,
362 RTE_FLOW_ITEM_TYPE_UDP,
363 RTE_FLOW_ITEM_TYPE_VXLAN,
364 RTE_FLOW_ITEM_TYPE_IPV4,
365 RTE_FLOW_ITEM_TYPE_SCTP,
366 RTE_FLOW_ITEM_TYPE_END,
368 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[] = {
369 RTE_FLOW_ITEM_TYPE_ETH,
370 RTE_FLOW_ITEM_TYPE_IPV4,
371 RTE_FLOW_ITEM_TYPE_UDP,
372 RTE_FLOW_ITEM_TYPE_VXLAN,
373 RTE_FLOW_ITEM_TYPE_IPV4,
374 RTE_FLOW_ITEM_TYPE_ICMP,
375 RTE_FLOW_ITEM_TYPE_END,
378 /* IPv4 VXLAN MAC IPv4 */
379 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[] = {
380 RTE_FLOW_ITEM_TYPE_ETH,
381 RTE_FLOW_ITEM_TYPE_IPV4,
382 RTE_FLOW_ITEM_TYPE_UDP,
383 RTE_FLOW_ITEM_TYPE_VXLAN,
384 RTE_FLOW_ITEM_TYPE_ETH,
385 RTE_FLOW_ITEM_TYPE_IPV4,
386 RTE_FLOW_ITEM_TYPE_END,
388 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[] = {
389 RTE_FLOW_ITEM_TYPE_ETH,
390 RTE_FLOW_ITEM_TYPE_IPV4,
391 RTE_FLOW_ITEM_TYPE_UDP,
392 RTE_FLOW_ITEM_TYPE_VXLAN,
393 RTE_FLOW_ITEM_TYPE_ETH,
394 RTE_FLOW_ITEM_TYPE_IPV4,
395 RTE_FLOW_ITEM_TYPE_UDP,
396 RTE_FLOW_ITEM_TYPE_END,
398 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[] = {
399 RTE_FLOW_ITEM_TYPE_ETH,
400 RTE_FLOW_ITEM_TYPE_IPV4,
401 RTE_FLOW_ITEM_TYPE_UDP,
402 RTE_FLOW_ITEM_TYPE_VXLAN,
403 RTE_FLOW_ITEM_TYPE_ETH,
404 RTE_FLOW_ITEM_TYPE_IPV4,
405 RTE_FLOW_ITEM_TYPE_TCP,
406 RTE_FLOW_ITEM_TYPE_END,
408 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[] = {
409 RTE_FLOW_ITEM_TYPE_ETH,
410 RTE_FLOW_ITEM_TYPE_IPV4,
411 RTE_FLOW_ITEM_TYPE_UDP,
412 RTE_FLOW_ITEM_TYPE_VXLAN,
413 RTE_FLOW_ITEM_TYPE_ETH,
414 RTE_FLOW_ITEM_TYPE_IPV4,
415 RTE_FLOW_ITEM_TYPE_SCTP,
416 RTE_FLOW_ITEM_TYPE_END,
418 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[] = {
419 RTE_FLOW_ITEM_TYPE_ETH,
420 RTE_FLOW_ITEM_TYPE_IPV4,
421 RTE_FLOW_ITEM_TYPE_UDP,
422 RTE_FLOW_ITEM_TYPE_VXLAN,
423 RTE_FLOW_ITEM_TYPE_ETH,
424 RTE_FLOW_ITEM_TYPE_IPV4,
425 RTE_FLOW_ITEM_TYPE_ICMP,
426 RTE_FLOW_ITEM_TYPE_END,
429 /* IPv6 VXLAN IPv4 */
430 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[] = {
431 RTE_FLOW_ITEM_TYPE_ETH,
432 RTE_FLOW_ITEM_TYPE_IPV6,
433 RTE_FLOW_ITEM_TYPE_UDP,
434 RTE_FLOW_ITEM_TYPE_VXLAN,
435 RTE_FLOW_ITEM_TYPE_IPV4,
436 RTE_FLOW_ITEM_TYPE_END,
438 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[] = {
439 RTE_FLOW_ITEM_TYPE_ETH,
440 RTE_FLOW_ITEM_TYPE_IPV6,
441 RTE_FLOW_ITEM_TYPE_UDP,
442 RTE_FLOW_ITEM_TYPE_VXLAN,
443 RTE_FLOW_ITEM_TYPE_IPV4,
444 RTE_FLOW_ITEM_TYPE_TCP,
445 RTE_FLOW_ITEM_TYPE_END,
447 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[] = {
448 RTE_FLOW_ITEM_TYPE_ETH,
449 RTE_FLOW_ITEM_TYPE_IPV6,
450 RTE_FLOW_ITEM_TYPE_UDP,
451 RTE_FLOW_ITEM_TYPE_VXLAN,
452 RTE_FLOW_ITEM_TYPE_IPV4,
453 RTE_FLOW_ITEM_TYPE_UDP,
454 RTE_FLOW_ITEM_TYPE_END,
456 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[] = {
457 RTE_FLOW_ITEM_TYPE_ETH,
458 RTE_FLOW_ITEM_TYPE_IPV6,
459 RTE_FLOW_ITEM_TYPE_UDP,
460 RTE_FLOW_ITEM_TYPE_VXLAN,
461 RTE_FLOW_ITEM_TYPE_IPV4,
462 RTE_FLOW_ITEM_TYPE_SCTP,
463 RTE_FLOW_ITEM_TYPE_END,
465 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[] = {
466 RTE_FLOW_ITEM_TYPE_ETH,
467 RTE_FLOW_ITEM_TYPE_IPV6,
468 RTE_FLOW_ITEM_TYPE_UDP,
469 RTE_FLOW_ITEM_TYPE_VXLAN,
470 RTE_FLOW_ITEM_TYPE_IPV4,
471 RTE_FLOW_ITEM_TYPE_ICMP,
472 RTE_FLOW_ITEM_TYPE_END,
475 /* IPv6 VXLAN MAC IPv4 */
476 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[] = {
477 RTE_FLOW_ITEM_TYPE_ETH,
478 RTE_FLOW_ITEM_TYPE_IPV6,
479 RTE_FLOW_ITEM_TYPE_UDP,
480 RTE_FLOW_ITEM_TYPE_VXLAN,
481 RTE_FLOW_ITEM_TYPE_ETH,
482 RTE_FLOW_ITEM_TYPE_IPV4,
483 RTE_FLOW_ITEM_TYPE_END,
485 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[] = {
486 RTE_FLOW_ITEM_TYPE_ETH,
487 RTE_FLOW_ITEM_TYPE_IPV6,
488 RTE_FLOW_ITEM_TYPE_UDP,
489 RTE_FLOW_ITEM_TYPE_VXLAN,
490 RTE_FLOW_ITEM_TYPE_ETH,
491 RTE_FLOW_ITEM_TYPE_IPV4,
492 RTE_FLOW_ITEM_TYPE_TCP,
493 RTE_FLOW_ITEM_TYPE_END,
495 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[] = {
496 RTE_FLOW_ITEM_TYPE_ETH,
497 RTE_FLOW_ITEM_TYPE_IPV6,
498 RTE_FLOW_ITEM_TYPE_UDP,
499 RTE_FLOW_ITEM_TYPE_VXLAN,
500 RTE_FLOW_ITEM_TYPE_ETH,
501 RTE_FLOW_ITEM_TYPE_IPV4,
502 RTE_FLOW_ITEM_TYPE_UDP,
503 RTE_FLOW_ITEM_TYPE_END,
505 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[] = {
506 RTE_FLOW_ITEM_TYPE_ETH,
507 RTE_FLOW_ITEM_TYPE_IPV6,
508 RTE_FLOW_ITEM_TYPE_UDP,
509 RTE_FLOW_ITEM_TYPE_VXLAN,
510 RTE_FLOW_ITEM_TYPE_ETH,
511 RTE_FLOW_ITEM_TYPE_IPV4,
512 RTE_FLOW_ITEM_TYPE_SCTP,
513 RTE_FLOW_ITEM_TYPE_END,
515 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[] = {
516 RTE_FLOW_ITEM_TYPE_ETH,
517 RTE_FLOW_ITEM_TYPE_IPV6,
518 RTE_FLOW_ITEM_TYPE_UDP,
519 RTE_FLOW_ITEM_TYPE_VXLAN,
520 RTE_FLOW_ITEM_TYPE_ETH,
521 RTE_FLOW_ITEM_TYPE_IPV4,
522 RTE_FLOW_ITEM_TYPE_ICMP,
523 RTE_FLOW_ITEM_TYPE_END,
526 /* IPv4 VXLAN IPv6 */
527 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[] = {
528 RTE_FLOW_ITEM_TYPE_ETH,
529 RTE_FLOW_ITEM_TYPE_IPV4,
530 RTE_FLOW_ITEM_TYPE_UDP,
531 RTE_FLOW_ITEM_TYPE_VXLAN,
532 RTE_FLOW_ITEM_TYPE_IPV6,
533 RTE_FLOW_ITEM_TYPE_END,
535 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[] = {
536 RTE_FLOW_ITEM_TYPE_ETH,
537 RTE_FLOW_ITEM_TYPE_IPV4,
538 RTE_FLOW_ITEM_TYPE_UDP,
539 RTE_FLOW_ITEM_TYPE_VXLAN,
540 RTE_FLOW_ITEM_TYPE_IPV6,
541 RTE_FLOW_ITEM_TYPE_UDP,
542 RTE_FLOW_ITEM_TYPE_END,
544 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[] = {
545 RTE_FLOW_ITEM_TYPE_ETH,
546 RTE_FLOW_ITEM_TYPE_IPV4,
547 RTE_FLOW_ITEM_TYPE_UDP,
548 RTE_FLOW_ITEM_TYPE_VXLAN,
549 RTE_FLOW_ITEM_TYPE_IPV6,
550 RTE_FLOW_ITEM_TYPE_TCP,
551 RTE_FLOW_ITEM_TYPE_END,
553 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[] = {
554 RTE_FLOW_ITEM_TYPE_ETH,
555 RTE_FLOW_ITEM_TYPE_IPV4,
556 RTE_FLOW_ITEM_TYPE_UDP,
557 RTE_FLOW_ITEM_TYPE_VXLAN,
558 RTE_FLOW_ITEM_TYPE_IPV6,
559 RTE_FLOW_ITEM_TYPE_SCTP,
560 RTE_FLOW_ITEM_TYPE_END,
562 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[] = {
563 RTE_FLOW_ITEM_TYPE_ETH,
564 RTE_FLOW_ITEM_TYPE_IPV4,
565 RTE_FLOW_ITEM_TYPE_UDP,
566 RTE_FLOW_ITEM_TYPE_VXLAN,
567 RTE_FLOW_ITEM_TYPE_IPV6,
568 RTE_FLOW_ITEM_TYPE_ICMP6,
569 RTE_FLOW_ITEM_TYPE_END,
572 /* IPv4 VXLAN MAC IPv6 */
573 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[] = {
574 RTE_FLOW_ITEM_TYPE_ETH,
575 RTE_FLOW_ITEM_TYPE_IPV4,
576 RTE_FLOW_ITEM_TYPE_UDP,
577 RTE_FLOW_ITEM_TYPE_VXLAN,
578 RTE_FLOW_ITEM_TYPE_ETH,
579 RTE_FLOW_ITEM_TYPE_IPV6,
580 RTE_FLOW_ITEM_TYPE_END,
582 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[] = {
583 RTE_FLOW_ITEM_TYPE_ETH,
584 RTE_FLOW_ITEM_TYPE_IPV4,
585 RTE_FLOW_ITEM_TYPE_UDP,
586 RTE_FLOW_ITEM_TYPE_VXLAN,
587 RTE_FLOW_ITEM_TYPE_ETH,
588 RTE_FLOW_ITEM_TYPE_IPV6,
589 RTE_FLOW_ITEM_TYPE_UDP,
590 RTE_FLOW_ITEM_TYPE_END,
592 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[] = {
593 RTE_FLOW_ITEM_TYPE_ETH,
594 RTE_FLOW_ITEM_TYPE_IPV4,
595 RTE_FLOW_ITEM_TYPE_UDP,
596 RTE_FLOW_ITEM_TYPE_VXLAN,
597 RTE_FLOW_ITEM_TYPE_ETH,
598 RTE_FLOW_ITEM_TYPE_IPV6,
599 RTE_FLOW_ITEM_TYPE_TCP,
600 RTE_FLOW_ITEM_TYPE_END,
602 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[] = {
603 RTE_FLOW_ITEM_TYPE_ETH,
604 RTE_FLOW_ITEM_TYPE_IPV4,
605 RTE_FLOW_ITEM_TYPE_UDP,
606 RTE_FLOW_ITEM_TYPE_VXLAN,
607 RTE_FLOW_ITEM_TYPE_ETH,
608 RTE_FLOW_ITEM_TYPE_IPV6,
609 RTE_FLOW_ITEM_TYPE_SCTP,
610 RTE_FLOW_ITEM_TYPE_END,
612 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[] = {
613 RTE_FLOW_ITEM_TYPE_ETH,
614 RTE_FLOW_ITEM_TYPE_IPV4,
615 RTE_FLOW_ITEM_TYPE_UDP,
616 RTE_FLOW_ITEM_TYPE_VXLAN,
617 RTE_FLOW_ITEM_TYPE_ETH,
618 RTE_FLOW_ITEM_TYPE_IPV6,
619 RTE_FLOW_ITEM_TYPE_ICMP6,
620 RTE_FLOW_ITEM_TYPE_END,
623 /* IPv6 VXLAN IPv6 */
624 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[] = {
625 RTE_FLOW_ITEM_TYPE_ETH,
626 RTE_FLOW_ITEM_TYPE_IPV6,
627 RTE_FLOW_ITEM_TYPE_UDP,
628 RTE_FLOW_ITEM_TYPE_VXLAN,
629 RTE_FLOW_ITEM_TYPE_IPV6,
630 RTE_FLOW_ITEM_TYPE_END,
632 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[] = {
633 RTE_FLOW_ITEM_TYPE_ETH,
634 RTE_FLOW_ITEM_TYPE_IPV6,
635 RTE_FLOW_ITEM_TYPE_UDP,
636 RTE_FLOW_ITEM_TYPE_VXLAN,
637 RTE_FLOW_ITEM_TYPE_IPV6,
638 RTE_FLOW_ITEM_TYPE_TCP,
639 RTE_FLOW_ITEM_TYPE_END,
641 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[] = {
642 RTE_FLOW_ITEM_TYPE_ETH,
643 RTE_FLOW_ITEM_TYPE_IPV6,
644 RTE_FLOW_ITEM_TYPE_UDP,
645 RTE_FLOW_ITEM_TYPE_VXLAN,
646 RTE_FLOW_ITEM_TYPE_IPV6,
647 RTE_FLOW_ITEM_TYPE_UDP,
648 RTE_FLOW_ITEM_TYPE_END,
650 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[] = {
651 RTE_FLOW_ITEM_TYPE_ETH,
652 RTE_FLOW_ITEM_TYPE_IPV6,
653 RTE_FLOW_ITEM_TYPE_UDP,
654 RTE_FLOW_ITEM_TYPE_VXLAN,
655 RTE_FLOW_ITEM_TYPE_IPV6,
656 RTE_FLOW_ITEM_TYPE_SCTP,
657 RTE_FLOW_ITEM_TYPE_END,
659 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[] = {
660 RTE_FLOW_ITEM_TYPE_ETH,
661 RTE_FLOW_ITEM_TYPE_IPV6,
662 RTE_FLOW_ITEM_TYPE_UDP,
663 RTE_FLOW_ITEM_TYPE_VXLAN,
664 RTE_FLOW_ITEM_TYPE_IPV6,
665 RTE_FLOW_ITEM_TYPE_ICMP6,
666 RTE_FLOW_ITEM_TYPE_END,
669 /* IPv6 VXLAN MAC IPv6 */
670 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[] = {
671 RTE_FLOW_ITEM_TYPE_ETH,
672 RTE_FLOW_ITEM_TYPE_IPV6,
673 RTE_FLOW_ITEM_TYPE_UDP,
674 RTE_FLOW_ITEM_TYPE_VXLAN,
675 RTE_FLOW_ITEM_TYPE_ETH,
676 RTE_FLOW_ITEM_TYPE_IPV6,
677 RTE_FLOW_ITEM_TYPE_END,
679 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[] = {
680 RTE_FLOW_ITEM_TYPE_ETH,
681 RTE_FLOW_ITEM_TYPE_IPV6,
682 RTE_FLOW_ITEM_TYPE_UDP,
683 RTE_FLOW_ITEM_TYPE_VXLAN,
684 RTE_FLOW_ITEM_TYPE_ETH,
685 RTE_FLOW_ITEM_TYPE_IPV6,
686 RTE_FLOW_ITEM_TYPE_TCP,
687 RTE_FLOW_ITEM_TYPE_END,
689 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[] = {
690 RTE_FLOW_ITEM_TYPE_ETH,
691 RTE_FLOW_ITEM_TYPE_IPV6,
692 RTE_FLOW_ITEM_TYPE_UDP,
693 RTE_FLOW_ITEM_TYPE_VXLAN,
694 RTE_FLOW_ITEM_TYPE_ETH,
695 RTE_FLOW_ITEM_TYPE_IPV6,
696 RTE_FLOW_ITEM_TYPE_UDP,
697 RTE_FLOW_ITEM_TYPE_END,
699 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[] = {
700 RTE_FLOW_ITEM_TYPE_ETH,
701 RTE_FLOW_ITEM_TYPE_IPV6,
702 RTE_FLOW_ITEM_TYPE_UDP,
703 RTE_FLOW_ITEM_TYPE_VXLAN,
704 RTE_FLOW_ITEM_TYPE_ETH,
705 RTE_FLOW_ITEM_TYPE_IPV6,
706 RTE_FLOW_ITEM_TYPE_SCTP,
707 RTE_FLOW_ITEM_TYPE_END,
709 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[] = {
710 RTE_FLOW_ITEM_TYPE_ETH,
711 RTE_FLOW_ITEM_TYPE_IPV6,
712 RTE_FLOW_ITEM_TYPE_UDP,
713 RTE_FLOW_ITEM_TYPE_VXLAN,
714 RTE_FLOW_ITEM_TYPE_ETH,
715 RTE_FLOW_ITEM_TYPE_IPV6,
716 RTE_FLOW_ITEM_TYPE_ICMP6,
717 RTE_FLOW_ITEM_TYPE_END,
720 /* IPv4 NVGRE IPv4 */
721 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[] = {
722 RTE_FLOW_ITEM_TYPE_ETH,
723 RTE_FLOW_ITEM_TYPE_IPV4,
724 RTE_FLOW_ITEM_TYPE_NVGRE,
725 RTE_FLOW_ITEM_TYPE_IPV4,
726 RTE_FLOW_ITEM_TYPE_END,
728 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[] = {
729 RTE_FLOW_ITEM_TYPE_ETH,
730 RTE_FLOW_ITEM_TYPE_IPV4,
731 RTE_FLOW_ITEM_TYPE_NVGRE,
732 RTE_FLOW_ITEM_TYPE_IPV4,
733 RTE_FLOW_ITEM_TYPE_UDP,
734 RTE_FLOW_ITEM_TYPE_END,
736 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[] = {
737 RTE_FLOW_ITEM_TYPE_ETH,
738 RTE_FLOW_ITEM_TYPE_IPV4,
739 RTE_FLOW_ITEM_TYPE_NVGRE,
740 RTE_FLOW_ITEM_TYPE_IPV4,
741 RTE_FLOW_ITEM_TYPE_TCP,
742 RTE_FLOW_ITEM_TYPE_END,
744 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[] = {
745 RTE_FLOW_ITEM_TYPE_ETH,
746 RTE_FLOW_ITEM_TYPE_IPV4,
747 RTE_FLOW_ITEM_TYPE_NVGRE,
748 RTE_FLOW_ITEM_TYPE_IPV4,
749 RTE_FLOW_ITEM_TYPE_SCTP,
750 RTE_FLOW_ITEM_TYPE_END,
752 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[] = {
753 RTE_FLOW_ITEM_TYPE_ETH,
754 RTE_FLOW_ITEM_TYPE_IPV4,
755 RTE_FLOW_ITEM_TYPE_NVGRE,
756 RTE_FLOW_ITEM_TYPE_IPV4,
757 RTE_FLOW_ITEM_TYPE_ICMP,
758 RTE_FLOW_ITEM_TYPE_END,
761 /* IPv4 NVGRE MAC IPv4 */
762 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[] = {
763 RTE_FLOW_ITEM_TYPE_ETH,
764 RTE_FLOW_ITEM_TYPE_IPV4,
765 RTE_FLOW_ITEM_TYPE_NVGRE,
766 RTE_FLOW_ITEM_TYPE_ETH,
767 RTE_FLOW_ITEM_TYPE_IPV4,
768 RTE_FLOW_ITEM_TYPE_END,
770 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[] = {
771 RTE_FLOW_ITEM_TYPE_ETH,
772 RTE_FLOW_ITEM_TYPE_IPV4,
773 RTE_FLOW_ITEM_TYPE_NVGRE,
774 RTE_FLOW_ITEM_TYPE_ETH,
775 RTE_FLOW_ITEM_TYPE_IPV4,
776 RTE_FLOW_ITEM_TYPE_UDP,
777 RTE_FLOW_ITEM_TYPE_END,
779 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[] = {
780 RTE_FLOW_ITEM_TYPE_ETH,
781 RTE_FLOW_ITEM_TYPE_IPV4,
782 RTE_FLOW_ITEM_TYPE_NVGRE,
783 RTE_FLOW_ITEM_TYPE_ETH,
784 RTE_FLOW_ITEM_TYPE_IPV4,
785 RTE_FLOW_ITEM_TYPE_TCP,
786 RTE_FLOW_ITEM_TYPE_END,
788 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[] = {
789 RTE_FLOW_ITEM_TYPE_ETH,
790 RTE_FLOW_ITEM_TYPE_IPV4,
791 RTE_FLOW_ITEM_TYPE_NVGRE,
792 RTE_FLOW_ITEM_TYPE_ETH,
793 RTE_FLOW_ITEM_TYPE_IPV4,
794 RTE_FLOW_ITEM_TYPE_SCTP,
795 RTE_FLOW_ITEM_TYPE_END,
797 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[] = {
798 RTE_FLOW_ITEM_TYPE_ETH,
799 RTE_FLOW_ITEM_TYPE_IPV4,
800 RTE_FLOW_ITEM_TYPE_NVGRE,
801 RTE_FLOW_ITEM_TYPE_ETH,
802 RTE_FLOW_ITEM_TYPE_IPV4,
803 RTE_FLOW_ITEM_TYPE_ICMP,
804 RTE_FLOW_ITEM_TYPE_END,
807 /* IPv6 NVGRE IPv4 */
808 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[] = {
809 RTE_FLOW_ITEM_TYPE_ETH,
810 RTE_FLOW_ITEM_TYPE_IPV6,
811 RTE_FLOW_ITEM_TYPE_NVGRE,
812 RTE_FLOW_ITEM_TYPE_IPV4,
813 RTE_FLOW_ITEM_TYPE_END,
815 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[] = {
816 RTE_FLOW_ITEM_TYPE_ETH,
817 RTE_FLOW_ITEM_TYPE_IPV6,
818 RTE_FLOW_ITEM_TYPE_NVGRE,
819 RTE_FLOW_ITEM_TYPE_IPV4,
820 RTE_FLOW_ITEM_TYPE_TCP,
821 RTE_FLOW_ITEM_TYPE_END,
823 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[] = {
824 RTE_FLOW_ITEM_TYPE_ETH,
825 RTE_FLOW_ITEM_TYPE_IPV6,
826 RTE_FLOW_ITEM_TYPE_NVGRE,
827 RTE_FLOW_ITEM_TYPE_IPV4,
828 RTE_FLOW_ITEM_TYPE_UDP,
829 RTE_FLOW_ITEM_TYPE_END,
831 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[] = {
832 RTE_FLOW_ITEM_TYPE_ETH,
833 RTE_FLOW_ITEM_TYPE_IPV6,
834 RTE_FLOW_ITEM_TYPE_NVGRE,
835 RTE_FLOW_ITEM_TYPE_IPV4,
836 RTE_FLOW_ITEM_TYPE_SCTP,
837 RTE_FLOW_ITEM_TYPE_END,
839 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[] = {
840 RTE_FLOW_ITEM_TYPE_ETH,
841 RTE_FLOW_ITEM_TYPE_IPV6,
842 RTE_FLOW_ITEM_TYPE_NVGRE,
843 RTE_FLOW_ITEM_TYPE_IPV4,
844 RTE_FLOW_ITEM_TYPE_ICMP,
845 RTE_FLOW_ITEM_TYPE_END,
848 /* IPv6 NVGRE MAC IPv4 */
849 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[] = {
850 RTE_FLOW_ITEM_TYPE_ETH,
851 RTE_FLOW_ITEM_TYPE_IPV6,
852 RTE_FLOW_ITEM_TYPE_NVGRE,
853 RTE_FLOW_ITEM_TYPE_ETH,
854 RTE_FLOW_ITEM_TYPE_IPV4,
855 RTE_FLOW_ITEM_TYPE_END,
857 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[] = {
858 RTE_FLOW_ITEM_TYPE_ETH,
859 RTE_FLOW_ITEM_TYPE_IPV6,
860 RTE_FLOW_ITEM_TYPE_NVGRE,
861 RTE_FLOW_ITEM_TYPE_ETH,
862 RTE_FLOW_ITEM_TYPE_IPV4,
863 RTE_FLOW_ITEM_TYPE_TCP,
864 RTE_FLOW_ITEM_TYPE_END,
866 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[] = {
867 RTE_FLOW_ITEM_TYPE_ETH,
868 RTE_FLOW_ITEM_TYPE_IPV6,
869 RTE_FLOW_ITEM_TYPE_NVGRE,
870 RTE_FLOW_ITEM_TYPE_ETH,
871 RTE_FLOW_ITEM_TYPE_IPV4,
872 RTE_FLOW_ITEM_TYPE_UDP,
873 RTE_FLOW_ITEM_TYPE_END,
875 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[] = {
876 RTE_FLOW_ITEM_TYPE_ETH,
877 RTE_FLOW_ITEM_TYPE_IPV6,
878 RTE_FLOW_ITEM_TYPE_NVGRE,
879 RTE_FLOW_ITEM_TYPE_ETH,
880 RTE_FLOW_ITEM_TYPE_IPV4,
881 RTE_FLOW_ITEM_TYPE_SCTP,
882 RTE_FLOW_ITEM_TYPE_END,
884 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[] = {
885 RTE_FLOW_ITEM_TYPE_ETH,
886 RTE_FLOW_ITEM_TYPE_IPV6,
887 RTE_FLOW_ITEM_TYPE_NVGRE,
888 RTE_FLOW_ITEM_TYPE_ETH,
889 RTE_FLOW_ITEM_TYPE_IPV4,
890 RTE_FLOW_ITEM_TYPE_ICMP,
891 RTE_FLOW_ITEM_TYPE_END,
894 /* IPv4 NVGRE IPv6 */
895 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[] = {
896 RTE_FLOW_ITEM_TYPE_ETH,
897 RTE_FLOW_ITEM_TYPE_IPV4,
898 RTE_FLOW_ITEM_TYPE_NVGRE,
899 RTE_FLOW_ITEM_TYPE_IPV6,
900 RTE_FLOW_ITEM_TYPE_END,
902 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[] = {
903 RTE_FLOW_ITEM_TYPE_ETH,
904 RTE_FLOW_ITEM_TYPE_IPV4,
905 RTE_FLOW_ITEM_TYPE_NVGRE,
906 RTE_FLOW_ITEM_TYPE_IPV6,
907 RTE_FLOW_ITEM_TYPE_UDP,
908 RTE_FLOW_ITEM_TYPE_END,
910 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[] = {
911 RTE_FLOW_ITEM_TYPE_ETH,
912 RTE_FLOW_ITEM_TYPE_IPV4,
913 RTE_FLOW_ITEM_TYPE_NVGRE,
914 RTE_FLOW_ITEM_TYPE_IPV6,
915 RTE_FLOW_ITEM_TYPE_TCP,
916 RTE_FLOW_ITEM_TYPE_END,
918 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[] = {
919 RTE_FLOW_ITEM_TYPE_ETH,
920 RTE_FLOW_ITEM_TYPE_IPV4,
921 RTE_FLOW_ITEM_TYPE_NVGRE,
922 RTE_FLOW_ITEM_TYPE_IPV6,
923 RTE_FLOW_ITEM_TYPE_SCTP,
924 RTE_FLOW_ITEM_TYPE_END,
926 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[] = {
927 RTE_FLOW_ITEM_TYPE_ETH,
928 RTE_FLOW_ITEM_TYPE_IPV4,
929 RTE_FLOW_ITEM_TYPE_NVGRE,
930 RTE_FLOW_ITEM_TYPE_IPV6,
931 RTE_FLOW_ITEM_TYPE_ICMP6,
932 RTE_FLOW_ITEM_TYPE_END,
935 /* IPv4 NVGRE MAC IPv6 */
936 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[] = {
937 RTE_FLOW_ITEM_TYPE_ETH,
938 RTE_FLOW_ITEM_TYPE_IPV4,
939 RTE_FLOW_ITEM_TYPE_NVGRE,
940 RTE_FLOW_ITEM_TYPE_ETH,
941 RTE_FLOW_ITEM_TYPE_IPV6,
942 RTE_FLOW_ITEM_TYPE_END,
944 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[] = {
945 RTE_FLOW_ITEM_TYPE_ETH,
946 RTE_FLOW_ITEM_TYPE_IPV4,
947 RTE_FLOW_ITEM_TYPE_NVGRE,
948 RTE_FLOW_ITEM_TYPE_ETH,
949 RTE_FLOW_ITEM_TYPE_IPV6,
950 RTE_FLOW_ITEM_TYPE_UDP,
951 RTE_FLOW_ITEM_TYPE_END,
953 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[] = {
954 RTE_FLOW_ITEM_TYPE_ETH,
955 RTE_FLOW_ITEM_TYPE_IPV4,
956 RTE_FLOW_ITEM_TYPE_NVGRE,
957 RTE_FLOW_ITEM_TYPE_ETH,
958 RTE_FLOW_ITEM_TYPE_IPV6,
959 RTE_FLOW_ITEM_TYPE_TCP,
960 RTE_FLOW_ITEM_TYPE_END,
962 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[] = {
963 RTE_FLOW_ITEM_TYPE_ETH,
964 RTE_FLOW_ITEM_TYPE_IPV4,
965 RTE_FLOW_ITEM_TYPE_NVGRE,
966 RTE_FLOW_ITEM_TYPE_ETH,
967 RTE_FLOW_ITEM_TYPE_IPV6,
968 RTE_FLOW_ITEM_TYPE_SCTP,
969 RTE_FLOW_ITEM_TYPE_END,
971 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[] = {
972 RTE_FLOW_ITEM_TYPE_ETH,
973 RTE_FLOW_ITEM_TYPE_IPV4,
974 RTE_FLOW_ITEM_TYPE_NVGRE,
975 RTE_FLOW_ITEM_TYPE_ETH,
976 RTE_FLOW_ITEM_TYPE_IPV6,
977 RTE_FLOW_ITEM_TYPE_ICMP6,
978 RTE_FLOW_ITEM_TYPE_END,
981 /* IPv6 NVGRE IPv6 */
982 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[] = {
983 RTE_FLOW_ITEM_TYPE_ETH,
984 RTE_FLOW_ITEM_TYPE_IPV6,
985 RTE_FLOW_ITEM_TYPE_NVGRE,
986 RTE_FLOW_ITEM_TYPE_IPV6,
987 RTE_FLOW_ITEM_TYPE_END,
989 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[] = {
990 RTE_FLOW_ITEM_TYPE_ETH,
991 RTE_FLOW_ITEM_TYPE_IPV6,
992 RTE_FLOW_ITEM_TYPE_NVGRE,
993 RTE_FLOW_ITEM_TYPE_IPV6,
994 RTE_FLOW_ITEM_TYPE_TCP,
995 RTE_FLOW_ITEM_TYPE_END,
997 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[] = {
998 RTE_FLOW_ITEM_TYPE_ETH,
999 RTE_FLOW_ITEM_TYPE_IPV6,
1000 RTE_FLOW_ITEM_TYPE_NVGRE,
1001 RTE_FLOW_ITEM_TYPE_IPV6,
1002 RTE_FLOW_ITEM_TYPE_UDP,
1003 RTE_FLOW_ITEM_TYPE_END,
1005 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[] = {
1006 RTE_FLOW_ITEM_TYPE_ETH,
1007 RTE_FLOW_ITEM_TYPE_IPV6,
1008 RTE_FLOW_ITEM_TYPE_NVGRE,
1009 RTE_FLOW_ITEM_TYPE_IPV6,
1010 RTE_FLOW_ITEM_TYPE_SCTP,
1011 RTE_FLOW_ITEM_TYPE_END,
1013 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[] = {
1014 RTE_FLOW_ITEM_TYPE_ETH,
1015 RTE_FLOW_ITEM_TYPE_IPV6,
1016 RTE_FLOW_ITEM_TYPE_NVGRE,
1017 RTE_FLOW_ITEM_TYPE_IPV6,
1018 RTE_FLOW_ITEM_TYPE_ICMP6,
1019 RTE_FLOW_ITEM_TYPE_END,
1022 /* IPv6 NVGRE MAC IPv6 */
1023 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[] = {
1024 RTE_FLOW_ITEM_TYPE_ETH,
1025 RTE_FLOW_ITEM_TYPE_IPV6,
1026 RTE_FLOW_ITEM_TYPE_NVGRE,
1027 RTE_FLOW_ITEM_TYPE_ETH,
1028 RTE_FLOW_ITEM_TYPE_IPV6,
1029 RTE_FLOW_ITEM_TYPE_END,
1031 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[] = {
1032 RTE_FLOW_ITEM_TYPE_ETH,
1033 RTE_FLOW_ITEM_TYPE_IPV6,
1034 RTE_FLOW_ITEM_TYPE_NVGRE,
1035 RTE_FLOW_ITEM_TYPE_ETH,
1036 RTE_FLOW_ITEM_TYPE_IPV6,
1037 RTE_FLOW_ITEM_TYPE_TCP,
1038 RTE_FLOW_ITEM_TYPE_END,
1040 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[] = {
1041 RTE_FLOW_ITEM_TYPE_ETH,
1042 RTE_FLOW_ITEM_TYPE_IPV6,
1043 RTE_FLOW_ITEM_TYPE_NVGRE,
1044 RTE_FLOW_ITEM_TYPE_ETH,
1045 RTE_FLOW_ITEM_TYPE_IPV6,
1046 RTE_FLOW_ITEM_TYPE_UDP,
1047 RTE_FLOW_ITEM_TYPE_END,
1049 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[] = {
1050 RTE_FLOW_ITEM_TYPE_ETH,
1051 RTE_FLOW_ITEM_TYPE_IPV6,
1052 RTE_FLOW_ITEM_TYPE_NVGRE,
1053 RTE_FLOW_ITEM_TYPE_ETH,
1054 RTE_FLOW_ITEM_TYPE_IPV6,
1055 RTE_FLOW_ITEM_TYPE_SCTP,
1056 RTE_FLOW_ITEM_TYPE_END,
1058 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[] = {
1059 RTE_FLOW_ITEM_TYPE_ETH,
1060 RTE_FLOW_ITEM_TYPE_IPV6,
1061 RTE_FLOW_ITEM_TYPE_NVGRE,
1062 RTE_FLOW_ITEM_TYPE_ETH,
1063 RTE_FLOW_ITEM_TYPE_IPV6,
1064 RTE_FLOW_ITEM_TYPE_ICMP6,
1065 RTE_FLOW_ITEM_TYPE_END,
1069 enum rte_flow_item_type pattern_eth_ipv4_gtpu[] = {
1070 RTE_FLOW_ITEM_TYPE_ETH,
1071 RTE_FLOW_ITEM_TYPE_IPV4,
1072 RTE_FLOW_ITEM_TYPE_UDP,
1073 RTE_FLOW_ITEM_TYPE_GTPU,
1074 RTE_FLOW_ITEM_TYPE_END,
1077 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[] = {
1078 RTE_FLOW_ITEM_TYPE_ETH,
1079 RTE_FLOW_ITEM_TYPE_IPV4,
1080 RTE_FLOW_ITEM_TYPE_UDP,
1081 RTE_FLOW_ITEM_TYPE_GTPU,
1082 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1083 RTE_FLOW_ITEM_TYPE_END,
1087 enum rte_flow_item_type pattern_eth_ipv6_gtpu[] = {
1088 RTE_FLOW_ITEM_TYPE_ETH,
1089 RTE_FLOW_ITEM_TYPE_IPV6,
1090 RTE_FLOW_ITEM_TYPE_UDP,
1091 RTE_FLOW_ITEM_TYPE_GTPU,
1092 RTE_FLOW_ITEM_TYPE_END,
1095 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[] = {
1096 RTE_FLOW_ITEM_TYPE_ETH,
1097 RTE_FLOW_ITEM_TYPE_IPV6,
1098 RTE_FLOW_ITEM_TYPE_UDP,
1099 RTE_FLOW_ITEM_TYPE_GTPU,
1100 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1101 RTE_FLOW_ITEM_TYPE_END,
1105 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[] = {
1106 RTE_FLOW_ITEM_TYPE_ETH,
1107 RTE_FLOW_ITEM_TYPE_IPV4,
1108 RTE_FLOW_ITEM_TYPE_UDP,
1109 RTE_FLOW_ITEM_TYPE_GTPU,
1110 RTE_FLOW_ITEM_TYPE_IPV4,
1111 RTE_FLOW_ITEM_TYPE_END,
1114 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[] = {
1115 RTE_FLOW_ITEM_TYPE_ETH,
1116 RTE_FLOW_ITEM_TYPE_IPV4,
1117 RTE_FLOW_ITEM_TYPE_UDP,
1118 RTE_FLOW_ITEM_TYPE_GTPU,
1119 RTE_FLOW_ITEM_TYPE_IPV4,
1120 RTE_FLOW_ITEM_TYPE_UDP,
1121 RTE_FLOW_ITEM_TYPE_END,
1124 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[] = {
1125 RTE_FLOW_ITEM_TYPE_ETH,
1126 RTE_FLOW_ITEM_TYPE_IPV4,
1127 RTE_FLOW_ITEM_TYPE_UDP,
1128 RTE_FLOW_ITEM_TYPE_GTPU,
1129 RTE_FLOW_ITEM_TYPE_IPV4,
1130 RTE_FLOW_ITEM_TYPE_TCP,
1131 RTE_FLOW_ITEM_TYPE_END,
1134 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[] = {
1135 RTE_FLOW_ITEM_TYPE_ETH,
1136 RTE_FLOW_ITEM_TYPE_IPV4,
1137 RTE_FLOW_ITEM_TYPE_UDP,
1138 RTE_FLOW_ITEM_TYPE_GTPU,
1139 RTE_FLOW_ITEM_TYPE_IPV4,
1140 RTE_FLOW_ITEM_TYPE_ICMP,
1141 RTE_FLOW_ITEM_TYPE_END,
1145 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[] = {
1146 RTE_FLOW_ITEM_TYPE_ETH,
1147 RTE_FLOW_ITEM_TYPE_IPV4,
1148 RTE_FLOW_ITEM_TYPE_UDP,
1149 RTE_FLOW_ITEM_TYPE_GTPU,
1150 RTE_FLOW_ITEM_TYPE_IPV6,
1151 RTE_FLOW_ITEM_TYPE_END,
1154 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[] = {
1155 RTE_FLOW_ITEM_TYPE_ETH,
1156 RTE_FLOW_ITEM_TYPE_IPV4,
1157 RTE_FLOW_ITEM_TYPE_UDP,
1158 RTE_FLOW_ITEM_TYPE_GTPU,
1159 RTE_FLOW_ITEM_TYPE_IPV6,
1160 RTE_FLOW_ITEM_TYPE_UDP,
1161 RTE_FLOW_ITEM_TYPE_END,
1164 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[] = {
1165 RTE_FLOW_ITEM_TYPE_ETH,
1166 RTE_FLOW_ITEM_TYPE_IPV4,
1167 RTE_FLOW_ITEM_TYPE_UDP,
1168 RTE_FLOW_ITEM_TYPE_GTPU,
1169 RTE_FLOW_ITEM_TYPE_IPV6,
1170 RTE_FLOW_ITEM_TYPE_TCP,
1171 RTE_FLOW_ITEM_TYPE_END,
1174 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[] = {
1175 RTE_FLOW_ITEM_TYPE_ETH,
1176 RTE_FLOW_ITEM_TYPE_IPV4,
1177 RTE_FLOW_ITEM_TYPE_UDP,
1178 RTE_FLOW_ITEM_TYPE_GTPU,
1179 RTE_FLOW_ITEM_TYPE_IPV6,
1180 RTE_FLOW_ITEM_TYPE_ICMP,
1181 RTE_FLOW_ITEM_TYPE_END,
1185 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[] = {
1186 RTE_FLOW_ITEM_TYPE_ETH,
1187 RTE_FLOW_ITEM_TYPE_IPV6,
1188 RTE_FLOW_ITEM_TYPE_UDP,
1189 RTE_FLOW_ITEM_TYPE_GTPU,
1190 RTE_FLOW_ITEM_TYPE_IPV4,
1191 RTE_FLOW_ITEM_TYPE_END,
1194 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[] = {
1195 RTE_FLOW_ITEM_TYPE_ETH,
1196 RTE_FLOW_ITEM_TYPE_IPV6,
1197 RTE_FLOW_ITEM_TYPE_UDP,
1198 RTE_FLOW_ITEM_TYPE_GTPU,
1199 RTE_FLOW_ITEM_TYPE_IPV4,
1200 RTE_FLOW_ITEM_TYPE_UDP,
1201 RTE_FLOW_ITEM_TYPE_END,
1204 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[] = {
1205 RTE_FLOW_ITEM_TYPE_ETH,
1206 RTE_FLOW_ITEM_TYPE_IPV6,
1207 RTE_FLOW_ITEM_TYPE_UDP,
1208 RTE_FLOW_ITEM_TYPE_GTPU,
1209 RTE_FLOW_ITEM_TYPE_IPV4,
1210 RTE_FLOW_ITEM_TYPE_TCP,
1211 RTE_FLOW_ITEM_TYPE_END,
1214 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[] = {
1215 RTE_FLOW_ITEM_TYPE_ETH,
1216 RTE_FLOW_ITEM_TYPE_IPV6,
1217 RTE_FLOW_ITEM_TYPE_UDP,
1218 RTE_FLOW_ITEM_TYPE_GTPU,
1219 RTE_FLOW_ITEM_TYPE_IPV4,
1220 RTE_FLOW_ITEM_TYPE_ICMP,
1221 RTE_FLOW_ITEM_TYPE_END,
1225 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[] = {
1226 RTE_FLOW_ITEM_TYPE_ETH,
1227 RTE_FLOW_ITEM_TYPE_IPV6,
1228 RTE_FLOW_ITEM_TYPE_UDP,
1229 RTE_FLOW_ITEM_TYPE_GTPU,
1230 RTE_FLOW_ITEM_TYPE_IPV6,
1231 RTE_FLOW_ITEM_TYPE_END,
1234 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[] = {
1235 RTE_FLOW_ITEM_TYPE_ETH,
1236 RTE_FLOW_ITEM_TYPE_IPV6,
1237 RTE_FLOW_ITEM_TYPE_UDP,
1238 RTE_FLOW_ITEM_TYPE_GTPU,
1239 RTE_FLOW_ITEM_TYPE_IPV6,
1240 RTE_FLOW_ITEM_TYPE_UDP,
1241 RTE_FLOW_ITEM_TYPE_END,
1244 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[] = {
1245 RTE_FLOW_ITEM_TYPE_ETH,
1246 RTE_FLOW_ITEM_TYPE_IPV6,
1247 RTE_FLOW_ITEM_TYPE_UDP,
1248 RTE_FLOW_ITEM_TYPE_GTPU,
1249 RTE_FLOW_ITEM_TYPE_IPV6,
1250 RTE_FLOW_ITEM_TYPE_TCP,
1251 RTE_FLOW_ITEM_TYPE_END,
1254 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[] = {
1255 RTE_FLOW_ITEM_TYPE_ETH,
1256 RTE_FLOW_ITEM_TYPE_IPV6,
1257 RTE_FLOW_ITEM_TYPE_UDP,
1258 RTE_FLOW_ITEM_TYPE_GTPU,
1259 RTE_FLOW_ITEM_TYPE_IPV6,
1260 RTE_FLOW_ITEM_TYPE_ICMP,
1261 RTE_FLOW_ITEM_TYPE_END,
1264 /*IPv4 GTPU EH IPv4 */
1265 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[] = {
1266 RTE_FLOW_ITEM_TYPE_ETH,
1267 RTE_FLOW_ITEM_TYPE_IPV4,
1268 RTE_FLOW_ITEM_TYPE_UDP,
1269 RTE_FLOW_ITEM_TYPE_GTPU,
1270 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1271 RTE_FLOW_ITEM_TYPE_IPV4,
1272 RTE_FLOW_ITEM_TYPE_END,
1275 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[] = {
1276 RTE_FLOW_ITEM_TYPE_ETH,
1277 RTE_FLOW_ITEM_TYPE_IPV4,
1278 RTE_FLOW_ITEM_TYPE_UDP,
1279 RTE_FLOW_ITEM_TYPE_GTPU,
1280 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1281 RTE_FLOW_ITEM_TYPE_IPV4,
1282 RTE_FLOW_ITEM_TYPE_UDP,
1283 RTE_FLOW_ITEM_TYPE_END,
1286 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[] = {
1287 RTE_FLOW_ITEM_TYPE_ETH,
1288 RTE_FLOW_ITEM_TYPE_IPV4,
1289 RTE_FLOW_ITEM_TYPE_UDP,
1290 RTE_FLOW_ITEM_TYPE_GTPU,
1291 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1292 RTE_FLOW_ITEM_TYPE_IPV4,
1293 RTE_FLOW_ITEM_TYPE_TCP,
1294 RTE_FLOW_ITEM_TYPE_END,
1297 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[] = {
1298 RTE_FLOW_ITEM_TYPE_ETH,
1299 RTE_FLOW_ITEM_TYPE_IPV4,
1300 RTE_FLOW_ITEM_TYPE_UDP,
1301 RTE_FLOW_ITEM_TYPE_GTPU,
1302 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1303 RTE_FLOW_ITEM_TYPE_IPV4,
1304 RTE_FLOW_ITEM_TYPE_ICMP,
1305 RTE_FLOW_ITEM_TYPE_END,
1308 /*IPv4 GTPU EH IPv6 */
1309 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[] = {
1310 RTE_FLOW_ITEM_TYPE_ETH,
1311 RTE_FLOW_ITEM_TYPE_IPV4,
1312 RTE_FLOW_ITEM_TYPE_UDP,
1313 RTE_FLOW_ITEM_TYPE_GTPU,
1314 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1315 RTE_FLOW_ITEM_TYPE_IPV6,
1316 RTE_FLOW_ITEM_TYPE_END,
1319 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[] = {
1320 RTE_FLOW_ITEM_TYPE_ETH,
1321 RTE_FLOW_ITEM_TYPE_IPV4,
1322 RTE_FLOW_ITEM_TYPE_UDP,
1323 RTE_FLOW_ITEM_TYPE_GTPU,
1324 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1325 RTE_FLOW_ITEM_TYPE_IPV6,
1326 RTE_FLOW_ITEM_TYPE_UDP,
1327 RTE_FLOW_ITEM_TYPE_END,
1330 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[] = {
1331 RTE_FLOW_ITEM_TYPE_ETH,
1332 RTE_FLOW_ITEM_TYPE_IPV4,
1333 RTE_FLOW_ITEM_TYPE_UDP,
1334 RTE_FLOW_ITEM_TYPE_GTPU,
1335 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1336 RTE_FLOW_ITEM_TYPE_IPV6,
1337 RTE_FLOW_ITEM_TYPE_TCP,
1338 RTE_FLOW_ITEM_TYPE_END,
1341 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[] = {
1342 RTE_FLOW_ITEM_TYPE_ETH,
1343 RTE_FLOW_ITEM_TYPE_IPV4,
1344 RTE_FLOW_ITEM_TYPE_UDP,
1345 RTE_FLOW_ITEM_TYPE_GTPU,
1346 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1347 RTE_FLOW_ITEM_TYPE_IPV6,
1348 RTE_FLOW_ITEM_TYPE_ICMP,
1349 RTE_FLOW_ITEM_TYPE_END,
1352 /*IPv6 GTPU EH IPv4 */
1353 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[] = {
1354 RTE_FLOW_ITEM_TYPE_ETH,
1355 RTE_FLOW_ITEM_TYPE_IPV6,
1356 RTE_FLOW_ITEM_TYPE_UDP,
1357 RTE_FLOW_ITEM_TYPE_GTPU,
1358 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1359 RTE_FLOW_ITEM_TYPE_IPV4,
1360 RTE_FLOW_ITEM_TYPE_END,
1363 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[] = {
1364 RTE_FLOW_ITEM_TYPE_ETH,
1365 RTE_FLOW_ITEM_TYPE_IPV6,
1366 RTE_FLOW_ITEM_TYPE_UDP,
1367 RTE_FLOW_ITEM_TYPE_GTPU,
1368 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1369 RTE_FLOW_ITEM_TYPE_IPV4,
1370 RTE_FLOW_ITEM_TYPE_UDP,
1371 RTE_FLOW_ITEM_TYPE_END,
1374 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[] = {
1375 RTE_FLOW_ITEM_TYPE_ETH,
1376 RTE_FLOW_ITEM_TYPE_IPV6,
1377 RTE_FLOW_ITEM_TYPE_UDP,
1378 RTE_FLOW_ITEM_TYPE_GTPU,
1379 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1380 RTE_FLOW_ITEM_TYPE_IPV4,
1381 RTE_FLOW_ITEM_TYPE_TCP,
1382 RTE_FLOW_ITEM_TYPE_END,
1385 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[] = {
1386 RTE_FLOW_ITEM_TYPE_ETH,
1387 RTE_FLOW_ITEM_TYPE_IPV6,
1388 RTE_FLOW_ITEM_TYPE_UDP,
1389 RTE_FLOW_ITEM_TYPE_GTPU,
1390 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1391 RTE_FLOW_ITEM_TYPE_IPV4,
1392 RTE_FLOW_ITEM_TYPE_ICMP,
1393 RTE_FLOW_ITEM_TYPE_END,
1396 /*IPv6 GTPU EH IPv6 */
1397 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[] = {
1398 RTE_FLOW_ITEM_TYPE_ETH,
1399 RTE_FLOW_ITEM_TYPE_IPV6,
1400 RTE_FLOW_ITEM_TYPE_UDP,
1401 RTE_FLOW_ITEM_TYPE_GTPU,
1402 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1403 RTE_FLOW_ITEM_TYPE_IPV6,
1404 RTE_FLOW_ITEM_TYPE_END,
1407 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[] = {
1408 RTE_FLOW_ITEM_TYPE_ETH,
1409 RTE_FLOW_ITEM_TYPE_IPV6,
1410 RTE_FLOW_ITEM_TYPE_UDP,
1411 RTE_FLOW_ITEM_TYPE_GTPU,
1412 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1413 RTE_FLOW_ITEM_TYPE_IPV6,
1414 RTE_FLOW_ITEM_TYPE_UDP,
1415 RTE_FLOW_ITEM_TYPE_END,
1418 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[] = {
1419 RTE_FLOW_ITEM_TYPE_ETH,
1420 RTE_FLOW_ITEM_TYPE_IPV6,
1421 RTE_FLOW_ITEM_TYPE_UDP,
1422 RTE_FLOW_ITEM_TYPE_GTPU,
1423 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1424 RTE_FLOW_ITEM_TYPE_IPV6,
1425 RTE_FLOW_ITEM_TYPE_TCP,
1426 RTE_FLOW_ITEM_TYPE_END,
1429 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[] = {
1430 RTE_FLOW_ITEM_TYPE_ETH,
1431 RTE_FLOW_ITEM_TYPE_IPV6,
1432 RTE_FLOW_ITEM_TYPE_UDP,
1433 RTE_FLOW_ITEM_TYPE_GTPU,
1434 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1435 RTE_FLOW_ITEM_TYPE_IPV6,
1436 RTE_FLOW_ITEM_TYPE_ICMP,
1437 RTE_FLOW_ITEM_TYPE_END,
1441 enum rte_flow_item_type pattern_eth_pppoed[] = {
1442 RTE_FLOW_ITEM_TYPE_ETH,
1443 RTE_FLOW_ITEM_TYPE_PPPOED,
1444 RTE_FLOW_ITEM_TYPE_END,
1446 enum rte_flow_item_type pattern_eth_vlan_pppoed[] = {
1447 RTE_FLOW_ITEM_TYPE_ETH,
1448 RTE_FLOW_ITEM_TYPE_VLAN,
1449 RTE_FLOW_ITEM_TYPE_PPPOED,
1450 RTE_FLOW_ITEM_TYPE_END,
1452 enum rte_flow_item_type pattern_eth_qinq_pppoed[] = {
1453 RTE_FLOW_ITEM_TYPE_ETH,
1454 RTE_FLOW_ITEM_TYPE_VLAN,
1455 RTE_FLOW_ITEM_TYPE_VLAN,
1456 RTE_FLOW_ITEM_TYPE_PPPOED,
1457 RTE_FLOW_ITEM_TYPE_END,
1459 enum rte_flow_item_type pattern_eth_pppoes[] = {
1460 RTE_FLOW_ITEM_TYPE_ETH,
1461 RTE_FLOW_ITEM_TYPE_PPPOES,
1462 RTE_FLOW_ITEM_TYPE_END,
1464 enum rte_flow_item_type pattern_eth_pppoes_proto[] = {
1465 RTE_FLOW_ITEM_TYPE_ETH,
1466 RTE_FLOW_ITEM_TYPE_PPPOES,
1467 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1468 RTE_FLOW_ITEM_TYPE_END,
1470 enum rte_flow_item_type pattern_eth_vlan_pppoes[] = {
1471 RTE_FLOW_ITEM_TYPE_ETH,
1472 RTE_FLOW_ITEM_TYPE_VLAN,
1473 RTE_FLOW_ITEM_TYPE_PPPOES,
1474 RTE_FLOW_ITEM_TYPE_END,
1476 enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[] = {
1477 RTE_FLOW_ITEM_TYPE_ETH,
1478 RTE_FLOW_ITEM_TYPE_VLAN,
1479 RTE_FLOW_ITEM_TYPE_PPPOES,
1480 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1481 RTE_FLOW_ITEM_TYPE_END,
1483 enum rte_flow_item_type pattern_eth_qinq_pppoes[] = {
1484 RTE_FLOW_ITEM_TYPE_ETH,
1485 RTE_FLOW_ITEM_TYPE_VLAN,
1486 RTE_FLOW_ITEM_TYPE_VLAN,
1487 RTE_FLOW_ITEM_TYPE_PPPOES,
1488 RTE_FLOW_ITEM_TYPE_END,
1490 enum rte_flow_item_type pattern_eth_qinq_pppoes_proto[] = {
1491 RTE_FLOW_ITEM_TYPE_ETH,
1492 RTE_FLOW_ITEM_TYPE_VLAN,
1493 RTE_FLOW_ITEM_TYPE_VLAN,
1494 RTE_FLOW_ITEM_TYPE_PPPOES,
1495 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1496 RTE_FLOW_ITEM_TYPE_END,
1498 enum rte_flow_item_type pattern_eth_pppoes_ipv4[] = {
1499 RTE_FLOW_ITEM_TYPE_ETH,
1500 RTE_FLOW_ITEM_TYPE_PPPOES,
1501 RTE_FLOW_ITEM_TYPE_IPV4,
1502 RTE_FLOW_ITEM_TYPE_END,
1504 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[] = {
1505 RTE_FLOW_ITEM_TYPE_ETH,
1506 RTE_FLOW_ITEM_TYPE_VLAN,
1507 RTE_FLOW_ITEM_TYPE_PPPOES,
1508 RTE_FLOW_ITEM_TYPE_IPV4,
1509 RTE_FLOW_ITEM_TYPE_END,
1511 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[] = {
1512 RTE_FLOW_ITEM_TYPE_ETH,
1513 RTE_FLOW_ITEM_TYPE_VLAN,
1514 RTE_FLOW_ITEM_TYPE_VLAN,
1515 RTE_FLOW_ITEM_TYPE_PPPOES,
1516 RTE_FLOW_ITEM_TYPE_IPV4,
1517 RTE_FLOW_ITEM_TYPE_END,
1519 enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[] = {
1520 RTE_FLOW_ITEM_TYPE_ETH,
1521 RTE_FLOW_ITEM_TYPE_PPPOES,
1522 RTE_FLOW_ITEM_TYPE_IPV4,
1523 RTE_FLOW_ITEM_TYPE_UDP,
1524 RTE_FLOW_ITEM_TYPE_END,
1526 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[] = {
1527 RTE_FLOW_ITEM_TYPE_ETH,
1528 RTE_FLOW_ITEM_TYPE_VLAN,
1529 RTE_FLOW_ITEM_TYPE_PPPOES,
1530 RTE_FLOW_ITEM_TYPE_IPV4,
1531 RTE_FLOW_ITEM_TYPE_UDP,
1532 RTE_FLOW_ITEM_TYPE_END,
1534 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[] = {
1535 RTE_FLOW_ITEM_TYPE_ETH,
1536 RTE_FLOW_ITEM_TYPE_VLAN,
1537 RTE_FLOW_ITEM_TYPE_VLAN,
1538 RTE_FLOW_ITEM_TYPE_PPPOES,
1539 RTE_FLOW_ITEM_TYPE_IPV4,
1540 RTE_FLOW_ITEM_TYPE_UDP,
1541 RTE_FLOW_ITEM_TYPE_END,
1543 enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[] = {
1544 RTE_FLOW_ITEM_TYPE_ETH,
1545 RTE_FLOW_ITEM_TYPE_PPPOES,
1546 RTE_FLOW_ITEM_TYPE_IPV4,
1547 RTE_FLOW_ITEM_TYPE_TCP,
1548 RTE_FLOW_ITEM_TYPE_END,
1550 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[] = {
1551 RTE_FLOW_ITEM_TYPE_ETH,
1552 RTE_FLOW_ITEM_TYPE_VLAN,
1553 RTE_FLOW_ITEM_TYPE_PPPOES,
1554 RTE_FLOW_ITEM_TYPE_IPV4,
1555 RTE_FLOW_ITEM_TYPE_TCP,
1556 RTE_FLOW_ITEM_TYPE_END,
1558 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[] = {
1559 RTE_FLOW_ITEM_TYPE_ETH,
1560 RTE_FLOW_ITEM_TYPE_VLAN,
1561 RTE_FLOW_ITEM_TYPE_VLAN,
1562 RTE_FLOW_ITEM_TYPE_PPPOES,
1563 RTE_FLOW_ITEM_TYPE_IPV4,
1564 RTE_FLOW_ITEM_TYPE_TCP,
1565 RTE_FLOW_ITEM_TYPE_END,
1567 enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[] = {
1568 RTE_FLOW_ITEM_TYPE_ETH,
1569 RTE_FLOW_ITEM_TYPE_PPPOES,
1570 RTE_FLOW_ITEM_TYPE_IPV4,
1571 RTE_FLOW_ITEM_TYPE_SCTP,
1572 RTE_FLOW_ITEM_TYPE_END,
1574 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[] = {
1575 RTE_FLOW_ITEM_TYPE_ETH,
1576 RTE_FLOW_ITEM_TYPE_VLAN,
1577 RTE_FLOW_ITEM_TYPE_PPPOES,
1578 RTE_FLOW_ITEM_TYPE_IPV4,
1579 RTE_FLOW_ITEM_TYPE_SCTP,
1580 RTE_FLOW_ITEM_TYPE_END,
1582 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[] = {
1583 RTE_FLOW_ITEM_TYPE_ETH,
1584 RTE_FLOW_ITEM_TYPE_VLAN,
1585 RTE_FLOW_ITEM_TYPE_VLAN,
1586 RTE_FLOW_ITEM_TYPE_PPPOES,
1587 RTE_FLOW_ITEM_TYPE_IPV4,
1588 RTE_FLOW_ITEM_TYPE_SCTP,
1589 RTE_FLOW_ITEM_TYPE_END,
1591 enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[] = {
1592 RTE_FLOW_ITEM_TYPE_ETH,
1593 RTE_FLOW_ITEM_TYPE_PPPOES,
1594 RTE_FLOW_ITEM_TYPE_IPV4,
1595 RTE_FLOW_ITEM_TYPE_ICMP,
1596 RTE_FLOW_ITEM_TYPE_END,
1598 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[] = {
1599 RTE_FLOW_ITEM_TYPE_ETH,
1600 RTE_FLOW_ITEM_TYPE_VLAN,
1601 RTE_FLOW_ITEM_TYPE_PPPOES,
1602 RTE_FLOW_ITEM_TYPE_IPV4,
1603 RTE_FLOW_ITEM_TYPE_ICMP,
1604 RTE_FLOW_ITEM_TYPE_END,
1606 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[] = {
1607 RTE_FLOW_ITEM_TYPE_ETH,
1608 RTE_FLOW_ITEM_TYPE_VLAN,
1609 RTE_FLOW_ITEM_TYPE_VLAN,
1610 RTE_FLOW_ITEM_TYPE_PPPOES,
1611 RTE_FLOW_ITEM_TYPE_IPV4,
1612 RTE_FLOW_ITEM_TYPE_ICMP,
1613 RTE_FLOW_ITEM_TYPE_END,
1615 enum rte_flow_item_type pattern_eth_pppoes_ipv6[] = {
1616 RTE_FLOW_ITEM_TYPE_ETH,
1617 RTE_FLOW_ITEM_TYPE_PPPOES,
1618 RTE_FLOW_ITEM_TYPE_IPV6,
1619 RTE_FLOW_ITEM_TYPE_END,
1621 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[] = {
1622 RTE_FLOW_ITEM_TYPE_ETH,
1623 RTE_FLOW_ITEM_TYPE_VLAN,
1624 RTE_FLOW_ITEM_TYPE_PPPOES,
1625 RTE_FLOW_ITEM_TYPE_IPV6,
1626 RTE_FLOW_ITEM_TYPE_END,
1628 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[] = {
1629 RTE_FLOW_ITEM_TYPE_ETH,
1630 RTE_FLOW_ITEM_TYPE_VLAN,
1631 RTE_FLOW_ITEM_TYPE_VLAN,
1632 RTE_FLOW_ITEM_TYPE_PPPOES,
1633 RTE_FLOW_ITEM_TYPE_IPV6,
1634 RTE_FLOW_ITEM_TYPE_END,
1636 enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[] = {
1637 RTE_FLOW_ITEM_TYPE_ETH,
1638 RTE_FLOW_ITEM_TYPE_PPPOES,
1639 RTE_FLOW_ITEM_TYPE_IPV6,
1640 RTE_FLOW_ITEM_TYPE_UDP,
1641 RTE_FLOW_ITEM_TYPE_END,
1643 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[] = {
1644 RTE_FLOW_ITEM_TYPE_ETH,
1645 RTE_FLOW_ITEM_TYPE_VLAN,
1646 RTE_FLOW_ITEM_TYPE_PPPOES,
1647 RTE_FLOW_ITEM_TYPE_IPV6,
1648 RTE_FLOW_ITEM_TYPE_UDP,
1649 RTE_FLOW_ITEM_TYPE_END,
1651 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[] = {
1652 RTE_FLOW_ITEM_TYPE_ETH,
1653 RTE_FLOW_ITEM_TYPE_VLAN,
1654 RTE_FLOW_ITEM_TYPE_VLAN,
1655 RTE_FLOW_ITEM_TYPE_PPPOES,
1656 RTE_FLOW_ITEM_TYPE_IPV6,
1657 RTE_FLOW_ITEM_TYPE_UDP,
1658 RTE_FLOW_ITEM_TYPE_END,
1660 enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[] = {
1661 RTE_FLOW_ITEM_TYPE_ETH,
1662 RTE_FLOW_ITEM_TYPE_PPPOES,
1663 RTE_FLOW_ITEM_TYPE_IPV6,
1664 RTE_FLOW_ITEM_TYPE_TCP,
1665 RTE_FLOW_ITEM_TYPE_END,
1667 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[] = {
1668 RTE_FLOW_ITEM_TYPE_ETH,
1669 RTE_FLOW_ITEM_TYPE_VLAN,
1670 RTE_FLOW_ITEM_TYPE_PPPOES,
1671 RTE_FLOW_ITEM_TYPE_IPV6,
1672 RTE_FLOW_ITEM_TYPE_TCP,
1673 RTE_FLOW_ITEM_TYPE_END,
1675 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[] = {
1676 RTE_FLOW_ITEM_TYPE_ETH,
1677 RTE_FLOW_ITEM_TYPE_VLAN,
1678 RTE_FLOW_ITEM_TYPE_VLAN,
1679 RTE_FLOW_ITEM_TYPE_PPPOES,
1680 RTE_FLOW_ITEM_TYPE_IPV6,
1681 RTE_FLOW_ITEM_TYPE_TCP,
1682 RTE_FLOW_ITEM_TYPE_END,
1684 enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[] = {
1685 RTE_FLOW_ITEM_TYPE_ETH,
1686 RTE_FLOW_ITEM_TYPE_PPPOES,
1687 RTE_FLOW_ITEM_TYPE_IPV6,
1688 RTE_FLOW_ITEM_TYPE_SCTP,
1689 RTE_FLOW_ITEM_TYPE_END,
1691 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[] = {
1692 RTE_FLOW_ITEM_TYPE_ETH,
1693 RTE_FLOW_ITEM_TYPE_VLAN,
1694 RTE_FLOW_ITEM_TYPE_PPPOES,
1695 RTE_FLOW_ITEM_TYPE_IPV6,
1696 RTE_FLOW_ITEM_TYPE_SCTP,
1697 RTE_FLOW_ITEM_TYPE_END,
1699 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[] = {
1700 RTE_FLOW_ITEM_TYPE_ETH,
1701 RTE_FLOW_ITEM_TYPE_VLAN,
1702 RTE_FLOW_ITEM_TYPE_VLAN,
1703 RTE_FLOW_ITEM_TYPE_PPPOES,
1704 RTE_FLOW_ITEM_TYPE_IPV6,
1705 RTE_FLOW_ITEM_TYPE_SCTP,
1706 RTE_FLOW_ITEM_TYPE_END,
1708 enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[] = {
1709 RTE_FLOW_ITEM_TYPE_ETH,
1710 RTE_FLOW_ITEM_TYPE_PPPOES,
1711 RTE_FLOW_ITEM_TYPE_IPV6,
1712 RTE_FLOW_ITEM_TYPE_ICMP6,
1713 RTE_FLOW_ITEM_TYPE_END,
1715 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[] = {
1716 RTE_FLOW_ITEM_TYPE_ETH,
1717 RTE_FLOW_ITEM_TYPE_VLAN,
1718 RTE_FLOW_ITEM_TYPE_PPPOES,
1719 RTE_FLOW_ITEM_TYPE_IPV6,
1720 RTE_FLOW_ITEM_TYPE_ICMP6,
1721 RTE_FLOW_ITEM_TYPE_END,
1723 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[] = {
1724 RTE_FLOW_ITEM_TYPE_ETH,
1725 RTE_FLOW_ITEM_TYPE_VLAN,
1726 RTE_FLOW_ITEM_TYPE_VLAN,
1727 RTE_FLOW_ITEM_TYPE_PPPOES,
1728 RTE_FLOW_ITEM_TYPE_IPV6,
1729 RTE_FLOW_ITEM_TYPE_ICMP6,
1730 RTE_FLOW_ITEM_TYPE_END,
1732 enum rte_flow_item_type pattern_eth_ipv4_esp[] = {
1733 RTE_FLOW_ITEM_TYPE_ETH,
1734 RTE_FLOW_ITEM_TYPE_IPV4,
1735 RTE_FLOW_ITEM_TYPE_ESP,
1736 RTE_FLOW_ITEM_TYPE_END,
1738 enum rte_flow_item_type pattern_eth_ipv6_esp[] = {
1739 RTE_FLOW_ITEM_TYPE_ETH,
1740 RTE_FLOW_ITEM_TYPE_IPV6,
1741 RTE_FLOW_ITEM_TYPE_ESP,
1742 RTE_FLOW_ITEM_TYPE_END,
1744 enum rte_flow_item_type pattern_eth_ipv4_ah[] = {
1745 RTE_FLOW_ITEM_TYPE_ETH,
1746 RTE_FLOW_ITEM_TYPE_IPV4,
1747 RTE_FLOW_ITEM_TYPE_AH,
1748 RTE_FLOW_ITEM_TYPE_END,
1750 enum rte_flow_item_type pattern_eth_ipv6_ah[] = {
1751 RTE_FLOW_ITEM_TYPE_ETH,
1752 RTE_FLOW_ITEM_TYPE_IPV6,
1753 RTE_FLOW_ITEM_TYPE_AH,
1754 RTE_FLOW_ITEM_TYPE_END,
1756 enum rte_flow_item_type pattern_eth_ipv4_udp_esp[] = {
1757 RTE_FLOW_ITEM_TYPE_ETH,
1758 RTE_FLOW_ITEM_TYPE_IPV4,
1759 RTE_FLOW_ITEM_TYPE_UDP,
1760 RTE_FLOW_ITEM_TYPE_ESP,
1761 RTE_FLOW_ITEM_TYPE_END,
1763 enum rte_flow_item_type pattern_eth_ipv6_udp_esp[] = {
1764 RTE_FLOW_ITEM_TYPE_ETH,
1765 RTE_FLOW_ITEM_TYPE_IPV6,
1766 RTE_FLOW_ITEM_TYPE_UDP,
1767 RTE_FLOW_ITEM_TYPE_ESP,
1768 RTE_FLOW_ITEM_TYPE_END,
1770 enum rte_flow_item_type pattern_eth_ipv6_udp_ah[] = {
1771 RTE_FLOW_ITEM_TYPE_ETH,
1772 RTE_FLOW_ITEM_TYPE_IPV6,
1773 RTE_FLOW_ITEM_TYPE_UDP,
1774 RTE_FLOW_ITEM_TYPE_AH,
1775 RTE_FLOW_ITEM_TYPE_END,
1777 enum rte_flow_item_type pattern_eth_ipv4_l2tp[] = {
1778 RTE_FLOW_ITEM_TYPE_ETH,
1779 RTE_FLOW_ITEM_TYPE_IPV4,
1780 RTE_FLOW_ITEM_TYPE_L2TPV3OIP,
1781 RTE_FLOW_ITEM_TYPE_END,
1783 enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = {
1784 RTE_FLOW_ITEM_TYPE_ETH,
1785 RTE_FLOW_ITEM_TYPE_IPV6,
1786 RTE_FLOW_ITEM_TYPE_L2TPV3OIP,
1787 RTE_FLOW_ITEM_TYPE_END,
1789 enum rte_flow_item_type pattern_eth_ipv4_pfcp[] = {
1790 RTE_FLOW_ITEM_TYPE_ETH,
1791 RTE_FLOW_ITEM_TYPE_IPV4,
1792 RTE_FLOW_ITEM_TYPE_UDP,
1793 RTE_FLOW_ITEM_TYPE_PFCP,
1794 RTE_FLOW_ITEM_TYPE_END,
1796 enum rte_flow_item_type pattern_eth_ipv6_pfcp[] = {
1797 RTE_FLOW_ITEM_TYPE_ETH,
1798 RTE_FLOW_ITEM_TYPE_IPV6,
1799 RTE_FLOW_ITEM_TYPE_UDP,
1800 RTE_FLOW_ITEM_TYPE_PFCP,
1801 RTE_FLOW_ITEM_TYPE_END,
1806 typedef struct ice_flow_engine * (*parse_engine_t)(struct ice_adapter *ad,
1807 struct rte_flow *flow,
1808 struct ice_parser_list *parser_list,
1810 const struct rte_flow_item pattern[],
1811 const struct rte_flow_action actions[],
1812 struct rte_flow_error *error);
1815 ice_register_flow_engine(struct ice_flow_engine *engine)
1817 TAILQ_INSERT_TAIL(&engine_list, engine, node);
1821 ice_flow_init(struct ice_adapter *ad)
1824 struct ice_pf *pf = &ad->pf;
1826 struct ice_flow_engine *engine;
1828 TAILQ_INIT(&pf->flow_list);
1829 TAILQ_INIT(&pf->rss_parser_list);
1830 TAILQ_INIT(&pf->perm_parser_list);
1831 TAILQ_INIT(&pf->dist_parser_list);
1832 rte_spinlock_init(&pf->flow_ops_lock);
1834 if (ice_parser_create(&ad->hw, &ad->psr) != ICE_SUCCESS)
1835 PMD_INIT_LOG(WARNING, "Failed to initialize DDP parser, raw packet filter will not be supported");
1837 RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {
1838 if (engine->init == NULL) {
1839 PMD_INIT_LOG(ERR, "Invalid engine type (%d)",
1844 ret = engine->init(ad);
1846 PMD_INIT_LOG(ERR, "Failed to initialize engine %d",
1855 ice_flow_uninit(struct ice_adapter *ad)
1857 struct ice_pf *pf = &ad->pf;
1858 struct ice_flow_engine *engine;
1859 struct rte_flow *p_flow;
1860 struct ice_flow_parser_node *p_parser;
1863 RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {
1868 /* Remove all flows */
1869 while ((p_flow = TAILQ_FIRST(&pf->flow_list))) {
1870 TAILQ_REMOVE(&pf->flow_list, p_flow, node);
1871 if (p_flow->engine->free)
1872 p_flow->engine->free(p_flow);
1876 /* Cleanup parser list */
1877 while ((p_parser = TAILQ_FIRST(&pf->rss_parser_list))) {
1878 TAILQ_REMOVE(&pf->rss_parser_list, p_parser, node);
1882 while ((p_parser = TAILQ_FIRST(&pf->perm_parser_list))) {
1883 TAILQ_REMOVE(&pf->perm_parser_list, p_parser, node);
1887 while ((p_parser = TAILQ_FIRST(&pf->dist_parser_list))) {
1888 TAILQ_REMOVE(&pf->dist_parser_list, p_parser, node);
1892 if (ad->psr != NULL) {
1893 ice_parser_destroy(ad->psr);
1898 static struct ice_parser_list *
1899 ice_get_parser_list(struct ice_flow_parser *parser,
1900 struct ice_adapter *ad)
1902 struct ice_parser_list *list;
1903 struct ice_pf *pf = &ad->pf;
1905 switch (parser->stage) {
1906 case ICE_FLOW_STAGE_RSS:
1907 list = &pf->rss_parser_list;
1909 case ICE_FLOW_STAGE_PERMISSION:
1910 list = &pf->perm_parser_list;
1912 case ICE_FLOW_STAGE_DISTRIBUTOR:
1913 list = &pf->dist_parser_list;
1923 ice_register_parser(struct ice_flow_parser *parser,
1924 struct ice_adapter *ad)
1926 struct ice_parser_list *list;
1927 struct ice_flow_parser_node *parser_node;
1928 struct ice_flow_parser_node *existing_node;
1931 parser_node = rte_zmalloc("ice_parser", sizeof(*parser_node), 0);
1932 if (parser_node == NULL) {
1933 PMD_DRV_LOG(ERR, "Failed to allocate memory.");
1936 parser_node->parser = parser;
1938 list = ice_get_parser_list(parser, ad);
1942 if (ad->devargs.pipe_mode_support) {
1943 TAILQ_INSERT_TAIL(list, parser_node, node);
1945 if (parser->engine->type == ICE_FLOW_ENGINE_SWITCH) {
1946 RTE_TAILQ_FOREACH_SAFE(existing_node, list,
1948 if (existing_node->parser->engine->type ==
1949 ICE_FLOW_ENGINE_ACL) {
1950 TAILQ_INSERT_AFTER(list, existing_node,
1955 TAILQ_INSERT_HEAD(list, parser_node, node);
1956 } else if (parser->engine->type == ICE_FLOW_ENGINE_FDIR) {
1957 RTE_TAILQ_FOREACH_SAFE(existing_node, list,
1959 if (existing_node->parser->engine->type ==
1960 ICE_FLOW_ENGINE_SWITCH) {
1961 TAILQ_INSERT_AFTER(list, existing_node,
1966 TAILQ_INSERT_HEAD(list, parser_node, node);
1967 } else if (parser->engine->type == ICE_FLOW_ENGINE_HASH) {
1968 TAILQ_INSERT_TAIL(list, parser_node, node);
1969 } else if (parser->engine->type == ICE_FLOW_ENGINE_ACL) {
1970 TAILQ_INSERT_HEAD(list, parser_node, node);
1980 ice_unregister_parser(struct ice_flow_parser *parser,
1981 struct ice_adapter *ad)
1983 struct ice_parser_list *list;
1984 struct ice_flow_parser_node *p_parser;
1987 list = ice_get_parser_list(parser, ad);
1991 RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {
1992 if (p_parser->parser->engine->type == parser->engine->type) {
1993 TAILQ_REMOVE(list, p_parser, node);
2000 ice_flow_valid_attr(struct ice_adapter *ad,
2001 const struct rte_flow_attr *attr,
2002 int *ice_pipeline_stage,
2003 struct rte_flow_error *error)
2005 /* Must be input direction */
2006 if (!attr->ingress) {
2007 rte_flow_error_set(error, EINVAL,
2008 RTE_FLOW_ERROR_TYPE_ATTR_INGRESS,
2009 attr, "Only support ingress.");
2015 rte_flow_error_set(error, EINVAL,
2016 RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
2017 attr, "Not support egress.");
2021 /* Check pipeline mode support to set classification stage */
2022 if (ad->devargs.pipe_mode_support) {
2023 if (attr->priority == 0)
2024 *ice_pipeline_stage =
2025 ICE_FLOW_CLASSIFY_STAGE_PERMISSION;
2027 *ice_pipeline_stage =
2028 ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR;
2030 *ice_pipeline_stage =
2031 ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY;
2032 if (attr->priority > 1) {
2033 rte_flow_error_set(error, EINVAL,
2034 RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
2035 attr, "Only support priority 0 and 1.");
2042 rte_flow_error_set(error, EINVAL,
2043 RTE_FLOW_ERROR_TYPE_ATTR_GROUP,
2044 attr, "Not support group.");
2051 /* Find the first VOID or non-VOID item pointer */
2052 static const struct rte_flow_item *
2053 ice_find_first_item(const struct rte_flow_item *item, bool is_void)
2057 while (item->type != RTE_FLOW_ITEM_TYPE_END) {
2059 is_find = item->type == RTE_FLOW_ITEM_TYPE_VOID;
2061 is_find = item->type != RTE_FLOW_ITEM_TYPE_VOID;
2069 /* Skip all VOID items of the pattern */
2071 ice_pattern_skip_void_item(struct rte_flow_item *items,
2072 const struct rte_flow_item *pattern)
2074 uint32_t cpy_count = 0;
2075 const struct rte_flow_item *pb = pattern, *pe = pattern;
2078 /* Find a non-void item first */
2079 pb = ice_find_first_item(pb, false);
2080 if (pb->type == RTE_FLOW_ITEM_TYPE_END) {
2085 /* Find a void item */
2086 pe = ice_find_first_item(pb + 1, true);
2088 cpy_count = pe - pb;
2089 rte_memcpy(items, pb, sizeof(struct rte_flow_item) * cpy_count);
2093 if (pe->type == RTE_FLOW_ITEM_TYPE_END) {
2099 /* Copy the END item. */
2100 rte_memcpy(items, pe, sizeof(struct rte_flow_item));
2103 /* Check if the pattern matches a supported item type array */
2105 ice_match_pattern(enum rte_flow_item_type *item_array,
2106 const struct rte_flow_item *pattern)
2108 const struct rte_flow_item *item = pattern;
2110 while ((*item_array == item->type) &&
2111 (*item_array != RTE_FLOW_ITEM_TYPE_END)) {
2116 return (*item_array == RTE_FLOW_ITEM_TYPE_END &&
2117 item->type == RTE_FLOW_ITEM_TYPE_END);
2120 struct ice_ptype_match {
2121 enum rte_flow_item_type *pattern_list;
2125 static struct ice_ptype_match ice_ptype_map[] = {
2126 {pattern_raw, ICE_PTYPE_IPV4_PAY},
2127 {pattern_any, ICE_PTYPE_IPV4_PAY},
2128 {pattern_eth_ipv4, ICE_PTYPE_IPV4_PAY},
2129 {pattern_eth_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2130 {pattern_eth_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2131 {pattern_eth_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
2132 {pattern_eth_ipv4_gtpu, ICE_MAC_IPV4_GTPU},
2133 {pattern_eth_ipv4_gtpu_eh, ICE_MAC_IPV4_GTPU},
2134 {pattern_eth_ipv4_gtpu_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
2135 {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
2136 {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
2137 {pattern_eth_ipv4_gtpu_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
2138 {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
2139 {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
2140 {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
2141 {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
2142 {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
2143 {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
2144 {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
2145 {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
2146 {pattern_eth_ipv4_esp, ICE_MAC_IPV4_ESP},
2147 {pattern_eth_ipv4_udp_esp, ICE_MAC_IPV4_NAT_T_ESP},
2148 {pattern_eth_ipv4_ah, ICE_MAC_IPV4_AH},
2149 {pattern_eth_ipv4_l2tp, ICE_MAC_IPV4_L2TPV3},
2150 {pattern_eth_ipv4_pfcp, ICE_MAC_IPV4_PFCP_SESSION},
2151 {pattern_eth_ipv6, ICE_PTYPE_IPV6_PAY},
2152 {pattern_eth_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2153 {pattern_eth_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2154 {pattern_eth_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
2155 {pattern_eth_ipv6_frag_ext, ICE_PTYPE_IPV6FRAG_PAY},
2156 {pattern_eth_ipv6_gtpu, ICE_MAC_IPV6_GTPU},
2157 {pattern_eth_ipv6_gtpu_eh, ICE_MAC_IPV6_GTPU},
2158 {pattern_eth_ipv6_gtpu_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
2159 {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
2160 {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
2161 {pattern_eth_ipv6_gtpu_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
2162 {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
2163 {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
2164 {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
2165 {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
2166 {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
2167 {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
2168 {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
2169 {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
2170 {pattern_eth_ipv6_esp, ICE_MAC_IPV6_ESP},
2171 {pattern_eth_ipv6_udp_esp, ICE_MAC_IPV6_NAT_T_ESP},
2172 {pattern_eth_ipv6_ah, ICE_MAC_IPV6_AH},
2173 {pattern_eth_ipv6_l2tp, ICE_MAC_IPV6_L2TPV3},
2174 {pattern_eth_ipv6_pfcp, ICE_MAC_IPV6_PFCP_SESSION},
2175 {pattern_ethertype, ICE_PTYPE_MAC_PAY},
2176 {pattern_ethertype_vlan, ICE_PTYPE_MAC_PAY},
2177 {pattern_ethertype_qinq, ICE_PTYPE_MAC_PAY},
2178 {pattern_eth_arp, ICE_PTYPE_MAC_PAY},
2179 {pattern_eth_vlan_ipv4, ICE_PTYPE_IPV4_PAY},
2180 {pattern_eth_qinq_ipv4, ICE_PTYPE_IPV4_PAY},
2181 {pattern_eth_qinq_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2182 {pattern_eth_qinq_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2183 {pattern_eth_vlan_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2184 {pattern_eth_vlan_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2185 {pattern_eth_vlan_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
2186 {pattern_eth_vlan_ipv6, ICE_PTYPE_IPV6_PAY},
2187 {pattern_eth_qinq_ipv6, ICE_PTYPE_IPV6_PAY},
2188 {pattern_eth_qinq_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2189 {pattern_eth_qinq_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2190 {pattern_eth_vlan_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2191 {pattern_eth_vlan_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2192 {pattern_eth_vlan_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
2193 {pattern_eth_pppoes, ICE_MAC_PPPOE_PAY},
2194 {pattern_eth_vlan_pppoes, ICE_MAC_PPPOE_PAY},
2195 {pattern_eth_qinq_pppoes, ICE_MAC_PPPOE_PAY},
2196 {pattern_eth_pppoes_proto, ICE_MAC_PPPOE_PAY},
2197 {pattern_eth_vlan_pppoes_proto, ICE_MAC_PPPOE_PAY},
2198 {pattern_eth_qinq_pppoes_proto, ICE_MAC_PPPOE_PAY},
2199 {pattern_eth_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2200 {pattern_eth_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
2201 {pattern_eth_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
2202 {pattern_eth_vlan_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2203 {pattern_eth_qinq_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2204 {pattern_eth_vlan_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
2205 {pattern_eth_vlan_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
2206 {pattern_eth_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2207 {pattern_eth_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY},
2208 {pattern_eth_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP},
2209 {pattern_eth_vlan_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2210 {pattern_eth_qinq_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2211 {pattern_eth_vlan_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP},
2212 {pattern_eth_vlan_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY},
2213 {pattern_eth_ipv4_udp_vxlan_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2214 {pattern_eth_ipv4_udp_vxlan_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2215 {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2216 {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP},
2217 {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2218 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2219 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2220 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP},
2221 {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2222 {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2223 {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2228 ice_pattern_is_supported(__rte_unused struct ice_adapter *ad,
2229 const struct rte_flow_item *pattern)
2233 for (i = 0; i < RTE_DIM(ice_ptype_map); i++) {
2234 if (ice_match_pattern(ice_ptype_map[i].pattern_list,
2236 return ice_hw_ptype_ena(&ad->hw,
2237 ice_ptype_map[i].hw_ptype);
2244 struct ice_pattern_match_item *
2245 ice_search_pattern_match_item(struct ice_adapter *ad,
2246 const struct rte_flow_item pattern[],
2247 struct ice_pattern_match_item *array,
2249 struct rte_flow_error *error)
2251 struct ice_pattern_match_item *pattern_match_item;
2252 /* need free by each filter */
2253 struct rte_flow_item *items; /* used for pattern without VOID items */
2254 uint32_t item_num = 0; /* non-void item number */
2257 /* Get the non-void item number of pattern */
2258 while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) {
2259 if ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_VOID)
2265 items = rte_zmalloc("ice_pattern",
2266 item_num * sizeof(struct rte_flow_item), 0);
2268 rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ITEM_NUM,
2269 NULL, "No memory for PMD internal items.");
2272 pattern_match_item = rte_zmalloc("ice_pattern_match_item",
2273 sizeof(struct ice_pattern_match_item), 0);
2274 if (!pattern_match_item) {
2275 rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE,
2276 NULL, "Failed to allocate memory.");
2281 ice_pattern_skip_void_item(items, pattern);
2283 if (!ice_pattern_is_supported(ad, pattern))
2286 for (i = 0; i < array_len; i++) {
2287 if (ice_match_pattern(array[i].pattern_list,
2289 pattern_match_item->input_set_mask_o =
2290 array[i].input_set_mask_o;
2291 pattern_match_item->input_set_mask_i =
2292 array[i].input_set_mask_i;
2293 pattern_match_item->pattern_list =
2294 array[i].pattern_list;
2295 pattern_match_item->meta = array[i].meta;
2297 return pattern_match_item;
2302 rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM,
2303 pattern, "Unsupported pattern");
2305 rte_free(pattern_match_item);
2309 static struct ice_flow_engine *
2310 ice_parse_engine_create(struct ice_adapter *ad,
2311 struct rte_flow *flow,
2312 struct ice_parser_list *parser_list,
2314 const struct rte_flow_item pattern[],
2315 const struct rte_flow_action actions[],
2316 struct rte_flow_error *error)
2318 struct ice_flow_engine *engine = NULL;
2319 struct ice_flow_parser_node *parser_node;
2323 RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {
2326 if (parser_node->parser->parse_pattern_action(ad,
2327 parser_node->parser->array,
2328 parser_node->parser->array_len,
2329 pattern, actions, priority, &meta, error) < 0)
2332 engine = parser_node->parser->engine;
2333 RTE_ASSERT(engine->create != NULL);
2334 ret = engine->create(ad, flow, meta, error);
2337 else if (ret == -EEXIST)
2343 static struct ice_flow_engine *
2344 ice_parse_engine_validate(struct ice_adapter *ad,
2345 struct rte_flow *flow __rte_unused,
2346 struct ice_parser_list *parser_list,
2348 const struct rte_flow_item pattern[],
2349 const struct rte_flow_action actions[],
2350 struct rte_flow_error *error)
2352 struct ice_flow_engine *engine = NULL;
2353 struct ice_flow_parser_node *parser_node;
2356 RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {
2357 if (parser_node->parser->parse_pattern_action(ad,
2358 parser_node->parser->array,
2359 parser_node->parser->array_len,
2360 pattern, actions, priority, NULL, error) < 0)
2363 engine = parser_node->parser->engine;
2370 ice_flow_process_filter(struct rte_eth_dev *dev,
2371 struct rte_flow *flow,
2372 const struct rte_flow_attr *attr,
2373 const struct rte_flow_item pattern[],
2374 const struct rte_flow_action actions[],
2375 struct ice_flow_engine **engine,
2376 parse_engine_t ice_parse_engine,
2377 struct rte_flow_error *error)
2379 int ret = ICE_ERR_NOT_SUPPORTED;
2380 struct ice_adapter *ad =
2381 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2382 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2383 int ice_pipeline_stage = 0;
2386 rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_NUM,
2387 NULL, "NULL pattern.");
2391 if (!actions || actions->type == RTE_FLOW_ACTION_TYPE_END) {
2392 rte_flow_error_set(error, EINVAL,
2393 RTE_FLOW_ERROR_TYPE_ACTION_NUM,
2394 NULL, "NULL action.");
2399 rte_flow_error_set(error, EINVAL,
2400 RTE_FLOW_ERROR_TYPE_ATTR,
2401 NULL, "NULL attribute.");
2405 ret = ice_flow_valid_attr(ad, attr, &ice_pipeline_stage, error);
2409 *engine = ice_parse_engine(ad, flow, &pf->rss_parser_list,
2410 attr->priority, pattern, actions, error);
2411 if (*engine != NULL)
2414 switch (ice_pipeline_stage) {
2415 case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY:
2416 case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR:
2417 *engine = ice_parse_engine(ad, flow, &pf->dist_parser_list,
2418 attr->priority, pattern, actions, error);
2420 case ICE_FLOW_CLASSIFY_STAGE_PERMISSION:
2421 *engine = ice_parse_engine(ad, flow, &pf->perm_parser_list,
2422 attr->priority, pattern, actions, error);
2428 if (*engine == NULL)
2435 ice_flow_validate(struct rte_eth_dev *dev,
2436 const struct rte_flow_attr *attr,
2437 const struct rte_flow_item pattern[],
2438 const struct rte_flow_action actions[],
2439 struct rte_flow_error *error)
2441 struct ice_flow_engine *engine;
2443 return ice_flow_process_filter(dev, NULL, attr, pattern, actions,
2444 &engine, ice_parse_engine_validate, error);
2447 static struct rte_flow *
2448 ice_flow_create(struct rte_eth_dev *dev,
2449 const struct rte_flow_attr *attr,
2450 const struct rte_flow_item pattern[],
2451 const struct rte_flow_action actions[],
2452 struct rte_flow_error *error)
2454 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2455 struct rte_flow *flow = NULL;
2457 struct ice_flow_engine *engine = NULL;
2459 flow = rte_zmalloc("ice_flow", sizeof(struct rte_flow), 0);
2461 rte_flow_error_set(error, ENOMEM,
2462 RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
2463 "Failed to allocate memory");
2467 rte_spinlock_lock(&pf->flow_ops_lock);
2469 ret = ice_flow_process_filter(dev, flow, attr, pattern, actions,
2470 &engine, ice_parse_engine_create, error);
2472 PMD_DRV_LOG(ERR, "Failed to create flow");
2478 flow->engine = engine;
2479 TAILQ_INSERT_TAIL(&pf->flow_list, flow, node);
2480 PMD_DRV_LOG(INFO, "Succeeded to create (%d) flow", engine->type);
2483 rte_spinlock_unlock(&pf->flow_ops_lock);
2488 ice_flow_destroy(struct rte_eth_dev *dev,
2489 struct rte_flow *flow,
2490 struct rte_flow_error *error)
2492 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2493 struct ice_adapter *ad =
2494 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2497 if (!flow || !flow->engine || !flow->engine->destroy) {
2498 rte_flow_error_set(error, EINVAL,
2499 RTE_FLOW_ERROR_TYPE_HANDLE,
2500 NULL, "Invalid flow");
2504 rte_spinlock_lock(&pf->flow_ops_lock);
2506 ret = flow->engine->destroy(ad, flow, error);
2508 TAILQ_REMOVE(&pf->flow_list, flow, node);
2511 PMD_DRV_LOG(ERR, "Failed to destroy flow");
2514 rte_spinlock_unlock(&pf->flow_ops_lock);
2520 ice_flow_flush(struct rte_eth_dev *dev,
2521 struct rte_flow_error *error)
2523 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2524 struct rte_flow *p_flow;
2528 RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {
2529 ret = ice_flow_destroy(dev, p_flow, error);
2531 PMD_DRV_LOG(ERR, "Failed to flush flows");
2542 ice_flow_query(struct rte_eth_dev *dev,
2543 struct rte_flow *flow,
2544 const struct rte_flow_action *actions,
2546 struct rte_flow_error *error)
2549 struct ice_adapter *ad =
2550 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2551 struct rte_flow_query_count *count = data;
2552 struct ice_pf *pf = &ad->pf;
2554 if (!flow || !flow->engine || !flow->engine->query_count) {
2555 rte_flow_error_set(error, EINVAL,
2556 RTE_FLOW_ERROR_TYPE_HANDLE,
2557 NULL, "Invalid flow");
2561 rte_spinlock_lock(&pf->flow_ops_lock);
2563 for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
2564 switch (actions->type) {
2565 case RTE_FLOW_ACTION_TYPE_VOID:
2567 case RTE_FLOW_ACTION_TYPE_COUNT:
2568 ret = flow->engine->query_count(ad, flow, count, error);
2571 ret = rte_flow_error_set(error, ENOTSUP,
2572 RTE_FLOW_ERROR_TYPE_ACTION,
2574 "action not supported");
2580 rte_spinlock_unlock(&pf->flow_ops_lock);
2585 ice_flow_redirect(struct ice_adapter *ad,
2586 struct ice_flow_redirect *rd)
2588 struct ice_pf *pf = &ad->pf;
2589 struct rte_flow *p_flow;
2593 rte_spinlock_lock(&pf->flow_ops_lock);
2595 RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {
2596 if (!p_flow->engine->redirect)
2598 ret = p_flow->engine->redirect(ad, p_flow, rd);
2600 PMD_DRV_LOG(ERR, "Failed to redirect flows");
2605 rte_spinlock_unlock(&pf->flow_ops_lock);