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,
69 enum rte_flow_item_type pattern_raw[] = {
70 RTE_FLOW_ITEM_TYPE_RAW,
71 RTE_FLOW_ITEM_TYPE_END,
75 enum rte_flow_item_type pattern_ethertype[] = {
76 RTE_FLOW_ITEM_TYPE_ETH,
77 RTE_FLOW_ITEM_TYPE_END,
79 enum rte_flow_item_type pattern_ethertype_vlan[] = {
80 RTE_FLOW_ITEM_TYPE_ETH,
81 RTE_FLOW_ITEM_TYPE_VLAN,
82 RTE_FLOW_ITEM_TYPE_END,
84 enum rte_flow_item_type pattern_ethertype_qinq[] = {
85 RTE_FLOW_ITEM_TYPE_ETH,
86 RTE_FLOW_ITEM_TYPE_VLAN,
87 RTE_FLOW_ITEM_TYPE_VLAN,
88 RTE_FLOW_ITEM_TYPE_END,
92 enum rte_flow_item_type pattern_eth_arp[] = {
93 RTE_FLOW_ITEM_TYPE_ETH,
94 RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4,
95 RTE_FLOW_ITEM_TYPE_END,
99 enum rte_flow_item_type pattern_eth_ipv4[] = {
100 RTE_FLOW_ITEM_TYPE_ETH,
101 RTE_FLOW_ITEM_TYPE_IPV4,
102 RTE_FLOW_ITEM_TYPE_END,
104 enum rte_flow_item_type pattern_eth_vlan_ipv4[] = {
105 RTE_FLOW_ITEM_TYPE_ETH,
106 RTE_FLOW_ITEM_TYPE_VLAN,
107 RTE_FLOW_ITEM_TYPE_IPV4,
108 RTE_FLOW_ITEM_TYPE_END,
110 enum rte_flow_item_type pattern_eth_qinq_ipv4[] = {
111 RTE_FLOW_ITEM_TYPE_ETH,
112 RTE_FLOW_ITEM_TYPE_VLAN,
113 RTE_FLOW_ITEM_TYPE_VLAN,
114 RTE_FLOW_ITEM_TYPE_IPV4,
115 RTE_FLOW_ITEM_TYPE_END,
117 enum rte_flow_item_type pattern_eth_ipv4_udp[] = {
118 RTE_FLOW_ITEM_TYPE_ETH,
119 RTE_FLOW_ITEM_TYPE_IPV4,
120 RTE_FLOW_ITEM_TYPE_UDP,
121 RTE_FLOW_ITEM_TYPE_END,
123 enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[] = {
124 RTE_FLOW_ITEM_TYPE_ETH,
125 RTE_FLOW_ITEM_TYPE_VLAN,
126 RTE_FLOW_ITEM_TYPE_IPV4,
127 RTE_FLOW_ITEM_TYPE_UDP,
128 RTE_FLOW_ITEM_TYPE_END,
130 enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[] = {
131 RTE_FLOW_ITEM_TYPE_ETH,
132 RTE_FLOW_ITEM_TYPE_VLAN,
133 RTE_FLOW_ITEM_TYPE_VLAN,
134 RTE_FLOW_ITEM_TYPE_IPV4,
135 RTE_FLOW_ITEM_TYPE_UDP,
136 RTE_FLOW_ITEM_TYPE_END,
138 enum rte_flow_item_type pattern_eth_ipv4_tcp[] = {
139 RTE_FLOW_ITEM_TYPE_ETH,
140 RTE_FLOW_ITEM_TYPE_IPV4,
141 RTE_FLOW_ITEM_TYPE_TCP,
142 RTE_FLOW_ITEM_TYPE_END,
144 enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[] = {
145 RTE_FLOW_ITEM_TYPE_ETH,
146 RTE_FLOW_ITEM_TYPE_VLAN,
147 RTE_FLOW_ITEM_TYPE_IPV4,
148 RTE_FLOW_ITEM_TYPE_TCP,
149 RTE_FLOW_ITEM_TYPE_END,
151 enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[] = {
152 RTE_FLOW_ITEM_TYPE_ETH,
153 RTE_FLOW_ITEM_TYPE_VLAN,
154 RTE_FLOW_ITEM_TYPE_VLAN,
155 RTE_FLOW_ITEM_TYPE_IPV4,
156 RTE_FLOW_ITEM_TYPE_TCP,
157 RTE_FLOW_ITEM_TYPE_END,
159 enum rte_flow_item_type pattern_eth_ipv4_sctp[] = {
160 RTE_FLOW_ITEM_TYPE_ETH,
161 RTE_FLOW_ITEM_TYPE_IPV4,
162 RTE_FLOW_ITEM_TYPE_SCTP,
163 RTE_FLOW_ITEM_TYPE_END,
165 enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[] = {
166 RTE_FLOW_ITEM_TYPE_ETH,
167 RTE_FLOW_ITEM_TYPE_VLAN,
168 RTE_FLOW_ITEM_TYPE_IPV4,
169 RTE_FLOW_ITEM_TYPE_SCTP,
170 RTE_FLOW_ITEM_TYPE_END,
172 enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[] = {
173 RTE_FLOW_ITEM_TYPE_ETH,
174 RTE_FLOW_ITEM_TYPE_VLAN,
175 RTE_FLOW_ITEM_TYPE_VLAN,
176 RTE_FLOW_ITEM_TYPE_IPV4,
177 RTE_FLOW_ITEM_TYPE_SCTP,
178 RTE_FLOW_ITEM_TYPE_END,
180 enum rte_flow_item_type pattern_eth_ipv4_icmp[] = {
181 RTE_FLOW_ITEM_TYPE_ETH,
182 RTE_FLOW_ITEM_TYPE_IPV4,
183 RTE_FLOW_ITEM_TYPE_ICMP,
184 RTE_FLOW_ITEM_TYPE_END,
186 enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[] = {
187 RTE_FLOW_ITEM_TYPE_ETH,
188 RTE_FLOW_ITEM_TYPE_VLAN,
189 RTE_FLOW_ITEM_TYPE_IPV4,
190 RTE_FLOW_ITEM_TYPE_ICMP,
191 RTE_FLOW_ITEM_TYPE_END,
193 enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[] = {
194 RTE_FLOW_ITEM_TYPE_ETH,
195 RTE_FLOW_ITEM_TYPE_VLAN,
196 RTE_FLOW_ITEM_TYPE_VLAN,
197 RTE_FLOW_ITEM_TYPE_IPV4,
198 RTE_FLOW_ITEM_TYPE_ICMP,
199 RTE_FLOW_ITEM_TYPE_END,
202 /* non-tunnel IPv6 */
203 enum rte_flow_item_type pattern_eth_ipv6[] = {
204 RTE_FLOW_ITEM_TYPE_ETH,
205 RTE_FLOW_ITEM_TYPE_IPV6,
206 RTE_FLOW_ITEM_TYPE_END,
208 enum rte_flow_item_type pattern_eth_vlan_ipv6[] = {
209 RTE_FLOW_ITEM_TYPE_ETH,
210 RTE_FLOW_ITEM_TYPE_VLAN,
211 RTE_FLOW_ITEM_TYPE_IPV6,
212 RTE_FLOW_ITEM_TYPE_END,
214 enum rte_flow_item_type pattern_eth_qinq_ipv6[] = {
215 RTE_FLOW_ITEM_TYPE_ETH,
216 RTE_FLOW_ITEM_TYPE_VLAN,
217 RTE_FLOW_ITEM_TYPE_VLAN,
218 RTE_FLOW_ITEM_TYPE_IPV6,
219 RTE_FLOW_ITEM_TYPE_END,
221 enum rte_flow_item_type pattern_eth_ipv6_frag_ext[] = {
222 RTE_FLOW_ITEM_TYPE_ETH,
223 RTE_FLOW_ITEM_TYPE_IPV6,
224 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
225 RTE_FLOW_ITEM_TYPE_END,
227 enum rte_flow_item_type pattern_eth_vlan_ipv6_frag_ext[] = {
228 RTE_FLOW_ITEM_TYPE_ETH,
229 RTE_FLOW_ITEM_TYPE_VLAN,
230 RTE_FLOW_ITEM_TYPE_IPV6,
231 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
232 RTE_FLOW_ITEM_TYPE_END,
234 enum rte_flow_item_type pattern_eth_qinq_ipv6_frag_ext[] = {
235 RTE_FLOW_ITEM_TYPE_ETH,
236 RTE_FLOW_ITEM_TYPE_VLAN,
237 RTE_FLOW_ITEM_TYPE_VLAN,
238 RTE_FLOW_ITEM_TYPE_IPV6,
239 RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
240 RTE_FLOW_ITEM_TYPE_END,
242 enum rte_flow_item_type pattern_eth_ipv6_udp[] = {
243 RTE_FLOW_ITEM_TYPE_ETH,
244 RTE_FLOW_ITEM_TYPE_IPV6,
245 RTE_FLOW_ITEM_TYPE_UDP,
246 RTE_FLOW_ITEM_TYPE_END,
248 enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[] = {
249 RTE_FLOW_ITEM_TYPE_ETH,
250 RTE_FLOW_ITEM_TYPE_VLAN,
251 RTE_FLOW_ITEM_TYPE_IPV6,
252 RTE_FLOW_ITEM_TYPE_UDP,
253 RTE_FLOW_ITEM_TYPE_END,
255 enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[] = {
256 RTE_FLOW_ITEM_TYPE_ETH,
257 RTE_FLOW_ITEM_TYPE_VLAN,
258 RTE_FLOW_ITEM_TYPE_VLAN,
259 RTE_FLOW_ITEM_TYPE_IPV6,
260 RTE_FLOW_ITEM_TYPE_UDP,
261 RTE_FLOW_ITEM_TYPE_END,
263 enum rte_flow_item_type pattern_eth_ipv6_tcp[] = {
264 RTE_FLOW_ITEM_TYPE_ETH,
265 RTE_FLOW_ITEM_TYPE_IPV6,
266 RTE_FLOW_ITEM_TYPE_TCP,
267 RTE_FLOW_ITEM_TYPE_END,
269 enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[] = {
270 RTE_FLOW_ITEM_TYPE_ETH,
271 RTE_FLOW_ITEM_TYPE_VLAN,
272 RTE_FLOW_ITEM_TYPE_IPV6,
273 RTE_FLOW_ITEM_TYPE_TCP,
274 RTE_FLOW_ITEM_TYPE_END,
276 enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[] = {
277 RTE_FLOW_ITEM_TYPE_ETH,
278 RTE_FLOW_ITEM_TYPE_VLAN,
279 RTE_FLOW_ITEM_TYPE_VLAN,
280 RTE_FLOW_ITEM_TYPE_IPV6,
281 RTE_FLOW_ITEM_TYPE_TCP,
282 RTE_FLOW_ITEM_TYPE_END,
284 enum rte_flow_item_type pattern_eth_ipv6_sctp[] = {
285 RTE_FLOW_ITEM_TYPE_ETH,
286 RTE_FLOW_ITEM_TYPE_IPV6,
287 RTE_FLOW_ITEM_TYPE_SCTP,
288 RTE_FLOW_ITEM_TYPE_END,
290 enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[] = {
291 RTE_FLOW_ITEM_TYPE_ETH,
292 RTE_FLOW_ITEM_TYPE_VLAN,
293 RTE_FLOW_ITEM_TYPE_IPV6,
294 RTE_FLOW_ITEM_TYPE_SCTP,
295 RTE_FLOW_ITEM_TYPE_END,
297 enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[] = {
298 RTE_FLOW_ITEM_TYPE_ETH,
299 RTE_FLOW_ITEM_TYPE_VLAN,
300 RTE_FLOW_ITEM_TYPE_VLAN,
301 RTE_FLOW_ITEM_TYPE_IPV6,
302 RTE_FLOW_ITEM_TYPE_SCTP,
303 RTE_FLOW_ITEM_TYPE_END,
305 enum rte_flow_item_type pattern_eth_ipv6_icmp6[] = {
306 RTE_FLOW_ITEM_TYPE_ETH,
307 RTE_FLOW_ITEM_TYPE_IPV6,
308 RTE_FLOW_ITEM_TYPE_ICMP6,
309 RTE_FLOW_ITEM_TYPE_END,
311 enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[] = {
312 RTE_FLOW_ITEM_TYPE_ETH,
313 RTE_FLOW_ITEM_TYPE_VLAN,
314 RTE_FLOW_ITEM_TYPE_IPV6,
315 RTE_FLOW_ITEM_TYPE_ICMP6,
316 RTE_FLOW_ITEM_TYPE_END,
318 enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[] = {
319 RTE_FLOW_ITEM_TYPE_ETH,
320 RTE_FLOW_ITEM_TYPE_VLAN,
321 RTE_FLOW_ITEM_TYPE_VLAN,
322 RTE_FLOW_ITEM_TYPE_IPV6,
323 RTE_FLOW_ITEM_TYPE_ICMP6,
324 RTE_FLOW_ITEM_TYPE_END,
327 /* IPv4 VXLAN IPv4 */
328 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[] = {
329 RTE_FLOW_ITEM_TYPE_ETH,
330 RTE_FLOW_ITEM_TYPE_IPV4,
331 RTE_FLOW_ITEM_TYPE_UDP,
332 RTE_FLOW_ITEM_TYPE_VXLAN,
333 RTE_FLOW_ITEM_TYPE_IPV4,
334 RTE_FLOW_ITEM_TYPE_END,
336 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[] = {
337 RTE_FLOW_ITEM_TYPE_ETH,
338 RTE_FLOW_ITEM_TYPE_IPV4,
339 RTE_FLOW_ITEM_TYPE_UDP,
340 RTE_FLOW_ITEM_TYPE_VXLAN,
341 RTE_FLOW_ITEM_TYPE_IPV4,
342 RTE_FLOW_ITEM_TYPE_UDP,
343 RTE_FLOW_ITEM_TYPE_END,
345 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[] = {
346 RTE_FLOW_ITEM_TYPE_ETH,
347 RTE_FLOW_ITEM_TYPE_IPV4,
348 RTE_FLOW_ITEM_TYPE_UDP,
349 RTE_FLOW_ITEM_TYPE_VXLAN,
350 RTE_FLOW_ITEM_TYPE_IPV4,
351 RTE_FLOW_ITEM_TYPE_TCP,
352 RTE_FLOW_ITEM_TYPE_END,
354 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[] = {
355 RTE_FLOW_ITEM_TYPE_ETH,
356 RTE_FLOW_ITEM_TYPE_IPV4,
357 RTE_FLOW_ITEM_TYPE_UDP,
358 RTE_FLOW_ITEM_TYPE_VXLAN,
359 RTE_FLOW_ITEM_TYPE_IPV4,
360 RTE_FLOW_ITEM_TYPE_SCTP,
361 RTE_FLOW_ITEM_TYPE_END,
363 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[] = {
364 RTE_FLOW_ITEM_TYPE_ETH,
365 RTE_FLOW_ITEM_TYPE_IPV4,
366 RTE_FLOW_ITEM_TYPE_UDP,
367 RTE_FLOW_ITEM_TYPE_VXLAN,
368 RTE_FLOW_ITEM_TYPE_IPV4,
369 RTE_FLOW_ITEM_TYPE_ICMP,
370 RTE_FLOW_ITEM_TYPE_END,
373 /* IPv4 VXLAN MAC IPv4 */
374 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[] = {
375 RTE_FLOW_ITEM_TYPE_ETH,
376 RTE_FLOW_ITEM_TYPE_IPV4,
377 RTE_FLOW_ITEM_TYPE_UDP,
378 RTE_FLOW_ITEM_TYPE_VXLAN,
379 RTE_FLOW_ITEM_TYPE_ETH,
380 RTE_FLOW_ITEM_TYPE_IPV4,
381 RTE_FLOW_ITEM_TYPE_END,
383 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[] = {
384 RTE_FLOW_ITEM_TYPE_ETH,
385 RTE_FLOW_ITEM_TYPE_IPV4,
386 RTE_FLOW_ITEM_TYPE_UDP,
387 RTE_FLOW_ITEM_TYPE_VXLAN,
388 RTE_FLOW_ITEM_TYPE_ETH,
389 RTE_FLOW_ITEM_TYPE_IPV4,
390 RTE_FLOW_ITEM_TYPE_UDP,
391 RTE_FLOW_ITEM_TYPE_END,
393 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[] = {
394 RTE_FLOW_ITEM_TYPE_ETH,
395 RTE_FLOW_ITEM_TYPE_IPV4,
396 RTE_FLOW_ITEM_TYPE_UDP,
397 RTE_FLOW_ITEM_TYPE_VXLAN,
398 RTE_FLOW_ITEM_TYPE_ETH,
399 RTE_FLOW_ITEM_TYPE_IPV4,
400 RTE_FLOW_ITEM_TYPE_TCP,
401 RTE_FLOW_ITEM_TYPE_END,
403 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[] = {
404 RTE_FLOW_ITEM_TYPE_ETH,
405 RTE_FLOW_ITEM_TYPE_IPV4,
406 RTE_FLOW_ITEM_TYPE_UDP,
407 RTE_FLOW_ITEM_TYPE_VXLAN,
408 RTE_FLOW_ITEM_TYPE_ETH,
409 RTE_FLOW_ITEM_TYPE_IPV4,
410 RTE_FLOW_ITEM_TYPE_SCTP,
411 RTE_FLOW_ITEM_TYPE_END,
413 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[] = {
414 RTE_FLOW_ITEM_TYPE_ETH,
415 RTE_FLOW_ITEM_TYPE_IPV4,
416 RTE_FLOW_ITEM_TYPE_UDP,
417 RTE_FLOW_ITEM_TYPE_VXLAN,
418 RTE_FLOW_ITEM_TYPE_ETH,
419 RTE_FLOW_ITEM_TYPE_IPV4,
420 RTE_FLOW_ITEM_TYPE_ICMP,
421 RTE_FLOW_ITEM_TYPE_END,
424 /* IPv6 VXLAN IPv4 */
425 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[] = {
426 RTE_FLOW_ITEM_TYPE_ETH,
427 RTE_FLOW_ITEM_TYPE_IPV6,
428 RTE_FLOW_ITEM_TYPE_UDP,
429 RTE_FLOW_ITEM_TYPE_VXLAN,
430 RTE_FLOW_ITEM_TYPE_IPV4,
431 RTE_FLOW_ITEM_TYPE_END,
433 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[] = {
434 RTE_FLOW_ITEM_TYPE_ETH,
435 RTE_FLOW_ITEM_TYPE_IPV6,
436 RTE_FLOW_ITEM_TYPE_UDP,
437 RTE_FLOW_ITEM_TYPE_VXLAN,
438 RTE_FLOW_ITEM_TYPE_IPV4,
439 RTE_FLOW_ITEM_TYPE_TCP,
440 RTE_FLOW_ITEM_TYPE_END,
442 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[] = {
443 RTE_FLOW_ITEM_TYPE_ETH,
444 RTE_FLOW_ITEM_TYPE_IPV6,
445 RTE_FLOW_ITEM_TYPE_UDP,
446 RTE_FLOW_ITEM_TYPE_VXLAN,
447 RTE_FLOW_ITEM_TYPE_IPV4,
448 RTE_FLOW_ITEM_TYPE_UDP,
449 RTE_FLOW_ITEM_TYPE_END,
451 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[] = {
452 RTE_FLOW_ITEM_TYPE_ETH,
453 RTE_FLOW_ITEM_TYPE_IPV6,
454 RTE_FLOW_ITEM_TYPE_UDP,
455 RTE_FLOW_ITEM_TYPE_VXLAN,
456 RTE_FLOW_ITEM_TYPE_IPV4,
457 RTE_FLOW_ITEM_TYPE_SCTP,
458 RTE_FLOW_ITEM_TYPE_END,
460 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[] = {
461 RTE_FLOW_ITEM_TYPE_ETH,
462 RTE_FLOW_ITEM_TYPE_IPV6,
463 RTE_FLOW_ITEM_TYPE_UDP,
464 RTE_FLOW_ITEM_TYPE_VXLAN,
465 RTE_FLOW_ITEM_TYPE_IPV4,
466 RTE_FLOW_ITEM_TYPE_ICMP,
467 RTE_FLOW_ITEM_TYPE_END,
470 /* IPv6 VXLAN MAC IPv4 */
471 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[] = {
472 RTE_FLOW_ITEM_TYPE_ETH,
473 RTE_FLOW_ITEM_TYPE_IPV6,
474 RTE_FLOW_ITEM_TYPE_UDP,
475 RTE_FLOW_ITEM_TYPE_VXLAN,
476 RTE_FLOW_ITEM_TYPE_ETH,
477 RTE_FLOW_ITEM_TYPE_IPV4,
478 RTE_FLOW_ITEM_TYPE_END,
480 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[] = {
481 RTE_FLOW_ITEM_TYPE_ETH,
482 RTE_FLOW_ITEM_TYPE_IPV6,
483 RTE_FLOW_ITEM_TYPE_UDP,
484 RTE_FLOW_ITEM_TYPE_VXLAN,
485 RTE_FLOW_ITEM_TYPE_ETH,
486 RTE_FLOW_ITEM_TYPE_IPV4,
487 RTE_FLOW_ITEM_TYPE_TCP,
488 RTE_FLOW_ITEM_TYPE_END,
490 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[] = {
491 RTE_FLOW_ITEM_TYPE_ETH,
492 RTE_FLOW_ITEM_TYPE_IPV6,
493 RTE_FLOW_ITEM_TYPE_UDP,
494 RTE_FLOW_ITEM_TYPE_VXLAN,
495 RTE_FLOW_ITEM_TYPE_ETH,
496 RTE_FLOW_ITEM_TYPE_IPV4,
497 RTE_FLOW_ITEM_TYPE_UDP,
498 RTE_FLOW_ITEM_TYPE_END,
500 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[] = {
501 RTE_FLOW_ITEM_TYPE_ETH,
502 RTE_FLOW_ITEM_TYPE_IPV6,
503 RTE_FLOW_ITEM_TYPE_UDP,
504 RTE_FLOW_ITEM_TYPE_VXLAN,
505 RTE_FLOW_ITEM_TYPE_ETH,
506 RTE_FLOW_ITEM_TYPE_IPV4,
507 RTE_FLOW_ITEM_TYPE_SCTP,
508 RTE_FLOW_ITEM_TYPE_END,
510 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[] = {
511 RTE_FLOW_ITEM_TYPE_ETH,
512 RTE_FLOW_ITEM_TYPE_IPV6,
513 RTE_FLOW_ITEM_TYPE_UDP,
514 RTE_FLOW_ITEM_TYPE_VXLAN,
515 RTE_FLOW_ITEM_TYPE_ETH,
516 RTE_FLOW_ITEM_TYPE_IPV4,
517 RTE_FLOW_ITEM_TYPE_ICMP,
518 RTE_FLOW_ITEM_TYPE_END,
521 /* IPv4 VXLAN IPv6 */
522 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[] = {
523 RTE_FLOW_ITEM_TYPE_ETH,
524 RTE_FLOW_ITEM_TYPE_IPV4,
525 RTE_FLOW_ITEM_TYPE_UDP,
526 RTE_FLOW_ITEM_TYPE_VXLAN,
527 RTE_FLOW_ITEM_TYPE_IPV6,
528 RTE_FLOW_ITEM_TYPE_END,
530 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[] = {
531 RTE_FLOW_ITEM_TYPE_ETH,
532 RTE_FLOW_ITEM_TYPE_IPV4,
533 RTE_FLOW_ITEM_TYPE_UDP,
534 RTE_FLOW_ITEM_TYPE_VXLAN,
535 RTE_FLOW_ITEM_TYPE_IPV6,
536 RTE_FLOW_ITEM_TYPE_UDP,
537 RTE_FLOW_ITEM_TYPE_END,
539 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[] = {
540 RTE_FLOW_ITEM_TYPE_ETH,
541 RTE_FLOW_ITEM_TYPE_IPV4,
542 RTE_FLOW_ITEM_TYPE_UDP,
543 RTE_FLOW_ITEM_TYPE_VXLAN,
544 RTE_FLOW_ITEM_TYPE_IPV6,
545 RTE_FLOW_ITEM_TYPE_TCP,
546 RTE_FLOW_ITEM_TYPE_END,
548 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[] = {
549 RTE_FLOW_ITEM_TYPE_ETH,
550 RTE_FLOW_ITEM_TYPE_IPV4,
551 RTE_FLOW_ITEM_TYPE_UDP,
552 RTE_FLOW_ITEM_TYPE_VXLAN,
553 RTE_FLOW_ITEM_TYPE_IPV6,
554 RTE_FLOW_ITEM_TYPE_SCTP,
555 RTE_FLOW_ITEM_TYPE_END,
557 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[] = {
558 RTE_FLOW_ITEM_TYPE_ETH,
559 RTE_FLOW_ITEM_TYPE_IPV4,
560 RTE_FLOW_ITEM_TYPE_UDP,
561 RTE_FLOW_ITEM_TYPE_VXLAN,
562 RTE_FLOW_ITEM_TYPE_IPV6,
563 RTE_FLOW_ITEM_TYPE_ICMP6,
564 RTE_FLOW_ITEM_TYPE_END,
567 /* IPv4 VXLAN MAC IPv6 */
568 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[] = {
569 RTE_FLOW_ITEM_TYPE_ETH,
570 RTE_FLOW_ITEM_TYPE_IPV4,
571 RTE_FLOW_ITEM_TYPE_UDP,
572 RTE_FLOW_ITEM_TYPE_VXLAN,
573 RTE_FLOW_ITEM_TYPE_ETH,
574 RTE_FLOW_ITEM_TYPE_IPV6,
575 RTE_FLOW_ITEM_TYPE_END,
577 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[] = {
578 RTE_FLOW_ITEM_TYPE_ETH,
579 RTE_FLOW_ITEM_TYPE_IPV4,
580 RTE_FLOW_ITEM_TYPE_UDP,
581 RTE_FLOW_ITEM_TYPE_VXLAN,
582 RTE_FLOW_ITEM_TYPE_ETH,
583 RTE_FLOW_ITEM_TYPE_IPV6,
584 RTE_FLOW_ITEM_TYPE_UDP,
585 RTE_FLOW_ITEM_TYPE_END,
587 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[] = {
588 RTE_FLOW_ITEM_TYPE_ETH,
589 RTE_FLOW_ITEM_TYPE_IPV4,
590 RTE_FLOW_ITEM_TYPE_UDP,
591 RTE_FLOW_ITEM_TYPE_VXLAN,
592 RTE_FLOW_ITEM_TYPE_ETH,
593 RTE_FLOW_ITEM_TYPE_IPV6,
594 RTE_FLOW_ITEM_TYPE_TCP,
595 RTE_FLOW_ITEM_TYPE_END,
597 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[] = {
598 RTE_FLOW_ITEM_TYPE_ETH,
599 RTE_FLOW_ITEM_TYPE_IPV4,
600 RTE_FLOW_ITEM_TYPE_UDP,
601 RTE_FLOW_ITEM_TYPE_VXLAN,
602 RTE_FLOW_ITEM_TYPE_ETH,
603 RTE_FLOW_ITEM_TYPE_IPV6,
604 RTE_FLOW_ITEM_TYPE_SCTP,
605 RTE_FLOW_ITEM_TYPE_END,
607 enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[] = {
608 RTE_FLOW_ITEM_TYPE_ETH,
609 RTE_FLOW_ITEM_TYPE_IPV4,
610 RTE_FLOW_ITEM_TYPE_UDP,
611 RTE_FLOW_ITEM_TYPE_VXLAN,
612 RTE_FLOW_ITEM_TYPE_ETH,
613 RTE_FLOW_ITEM_TYPE_IPV6,
614 RTE_FLOW_ITEM_TYPE_ICMP6,
615 RTE_FLOW_ITEM_TYPE_END,
618 /* IPv6 VXLAN IPv6 */
619 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[] = {
620 RTE_FLOW_ITEM_TYPE_ETH,
621 RTE_FLOW_ITEM_TYPE_IPV6,
622 RTE_FLOW_ITEM_TYPE_UDP,
623 RTE_FLOW_ITEM_TYPE_VXLAN,
624 RTE_FLOW_ITEM_TYPE_IPV6,
625 RTE_FLOW_ITEM_TYPE_END,
627 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[] = {
628 RTE_FLOW_ITEM_TYPE_ETH,
629 RTE_FLOW_ITEM_TYPE_IPV6,
630 RTE_FLOW_ITEM_TYPE_UDP,
631 RTE_FLOW_ITEM_TYPE_VXLAN,
632 RTE_FLOW_ITEM_TYPE_IPV6,
633 RTE_FLOW_ITEM_TYPE_TCP,
634 RTE_FLOW_ITEM_TYPE_END,
636 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[] = {
637 RTE_FLOW_ITEM_TYPE_ETH,
638 RTE_FLOW_ITEM_TYPE_IPV6,
639 RTE_FLOW_ITEM_TYPE_UDP,
640 RTE_FLOW_ITEM_TYPE_VXLAN,
641 RTE_FLOW_ITEM_TYPE_IPV6,
642 RTE_FLOW_ITEM_TYPE_UDP,
643 RTE_FLOW_ITEM_TYPE_END,
645 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[] = {
646 RTE_FLOW_ITEM_TYPE_ETH,
647 RTE_FLOW_ITEM_TYPE_IPV6,
648 RTE_FLOW_ITEM_TYPE_UDP,
649 RTE_FLOW_ITEM_TYPE_VXLAN,
650 RTE_FLOW_ITEM_TYPE_IPV6,
651 RTE_FLOW_ITEM_TYPE_SCTP,
652 RTE_FLOW_ITEM_TYPE_END,
654 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[] = {
655 RTE_FLOW_ITEM_TYPE_ETH,
656 RTE_FLOW_ITEM_TYPE_IPV6,
657 RTE_FLOW_ITEM_TYPE_UDP,
658 RTE_FLOW_ITEM_TYPE_VXLAN,
659 RTE_FLOW_ITEM_TYPE_IPV6,
660 RTE_FLOW_ITEM_TYPE_ICMP6,
661 RTE_FLOW_ITEM_TYPE_END,
664 /* IPv6 VXLAN MAC IPv6 */
665 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[] = {
666 RTE_FLOW_ITEM_TYPE_ETH,
667 RTE_FLOW_ITEM_TYPE_IPV6,
668 RTE_FLOW_ITEM_TYPE_UDP,
669 RTE_FLOW_ITEM_TYPE_VXLAN,
670 RTE_FLOW_ITEM_TYPE_ETH,
671 RTE_FLOW_ITEM_TYPE_IPV6,
672 RTE_FLOW_ITEM_TYPE_END,
674 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[] = {
675 RTE_FLOW_ITEM_TYPE_ETH,
676 RTE_FLOW_ITEM_TYPE_IPV6,
677 RTE_FLOW_ITEM_TYPE_UDP,
678 RTE_FLOW_ITEM_TYPE_VXLAN,
679 RTE_FLOW_ITEM_TYPE_ETH,
680 RTE_FLOW_ITEM_TYPE_IPV6,
681 RTE_FLOW_ITEM_TYPE_TCP,
682 RTE_FLOW_ITEM_TYPE_END,
684 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[] = {
685 RTE_FLOW_ITEM_TYPE_ETH,
686 RTE_FLOW_ITEM_TYPE_IPV6,
687 RTE_FLOW_ITEM_TYPE_UDP,
688 RTE_FLOW_ITEM_TYPE_VXLAN,
689 RTE_FLOW_ITEM_TYPE_ETH,
690 RTE_FLOW_ITEM_TYPE_IPV6,
691 RTE_FLOW_ITEM_TYPE_UDP,
692 RTE_FLOW_ITEM_TYPE_END,
694 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[] = {
695 RTE_FLOW_ITEM_TYPE_ETH,
696 RTE_FLOW_ITEM_TYPE_IPV6,
697 RTE_FLOW_ITEM_TYPE_UDP,
698 RTE_FLOW_ITEM_TYPE_VXLAN,
699 RTE_FLOW_ITEM_TYPE_ETH,
700 RTE_FLOW_ITEM_TYPE_IPV6,
701 RTE_FLOW_ITEM_TYPE_SCTP,
702 RTE_FLOW_ITEM_TYPE_END,
704 enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[] = {
705 RTE_FLOW_ITEM_TYPE_ETH,
706 RTE_FLOW_ITEM_TYPE_IPV6,
707 RTE_FLOW_ITEM_TYPE_UDP,
708 RTE_FLOW_ITEM_TYPE_VXLAN,
709 RTE_FLOW_ITEM_TYPE_ETH,
710 RTE_FLOW_ITEM_TYPE_IPV6,
711 RTE_FLOW_ITEM_TYPE_ICMP6,
712 RTE_FLOW_ITEM_TYPE_END,
715 /* IPv4 NVGRE IPv4 */
716 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[] = {
717 RTE_FLOW_ITEM_TYPE_ETH,
718 RTE_FLOW_ITEM_TYPE_IPV4,
719 RTE_FLOW_ITEM_TYPE_NVGRE,
720 RTE_FLOW_ITEM_TYPE_IPV4,
721 RTE_FLOW_ITEM_TYPE_END,
723 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[] = {
724 RTE_FLOW_ITEM_TYPE_ETH,
725 RTE_FLOW_ITEM_TYPE_IPV4,
726 RTE_FLOW_ITEM_TYPE_NVGRE,
727 RTE_FLOW_ITEM_TYPE_IPV4,
728 RTE_FLOW_ITEM_TYPE_UDP,
729 RTE_FLOW_ITEM_TYPE_END,
731 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[] = {
732 RTE_FLOW_ITEM_TYPE_ETH,
733 RTE_FLOW_ITEM_TYPE_IPV4,
734 RTE_FLOW_ITEM_TYPE_NVGRE,
735 RTE_FLOW_ITEM_TYPE_IPV4,
736 RTE_FLOW_ITEM_TYPE_TCP,
737 RTE_FLOW_ITEM_TYPE_END,
739 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[] = {
740 RTE_FLOW_ITEM_TYPE_ETH,
741 RTE_FLOW_ITEM_TYPE_IPV4,
742 RTE_FLOW_ITEM_TYPE_NVGRE,
743 RTE_FLOW_ITEM_TYPE_IPV4,
744 RTE_FLOW_ITEM_TYPE_SCTP,
745 RTE_FLOW_ITEM_TYPE_END,
747 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[] = {
748 RTE_FLOW_ITEM_TYPE_ETH,
749 RTE_FLOW_ITEM_TYPE_IPV4,
750 RTE_FLOW_ITEM_TYPE_NVGRE,
751 RTE_FLOW_ITEM_TYPE_IPV4,
752 RTE_FLOW_ITEM_TYPE_ICMP,
753 RTE_FLOW_ITEM_TYPE_END,
756 /* IPv4 NVGRE MAC IPv4 */
757 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[] = {
758 RTE_FLOW_ITEM_TYPE_ETH,
759 RTE_FLOW_ITEM_TYPE_IPV4,
760 RTE_FLOW_ITEM_TYPE_NVGRE,
761 RTE_FLOW_ITEM_TYPE_ETH,
762 RTE_FLOW_ITEM_TYPE_IPV4,
763 RTE_FLOW_ITEM_TYPE_END,
765 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[] = {
766 RTE_FLOW_ITEM_TYPE_ETH,
767 RTE_FLOW_ITEM_TYPE_IPV4,
768 RTE_FLOW_ITEM_TYPE_NVGRE,
769 RTE_FLOW_ITEM_TYPE_ETH,
770 RTE_FLOW_ITEM_TYPE_IPV4,
771 RTE_FLOW_ITEM_TYPE_UDP,
772 RTE_FLOW_ITEM_TYPE_END,
774 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[] = {
775 RTE_FLOW_ITEM_TYPE_ETH,
776 RTE_FLOW_ITEM_TYPE_IPV4,
777 RTE_FLOW_ITEM_TYPE_NVGRE,
778 RTE_FLOW_ITEM_TYPE_ETH,
779 RTE_FLOW_ITEM_TYPE_IPV4,
780 RTE_FLOW_ITEM_TYPE_TCP,
781 RTE_FLOW_ITEM_TYPE_END,
783 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[] = {
784 RTE_FLOW_ITEM_TYPE_ETH,
785 RTE_FLOW_ITEM_TYPE_IPV4,
786 RTE_FLOW_ITEM_TYPE_NVGRE,
787 RTE_FLOW_ITEM_TYPE_ETH,
788 RTE_FLOW_ITEM_TYPE_IPV4,
789 RTE_FLOW_ITEM_TYPE_SCTP,
790 RTE_FLOW_ITEM_TYPE_END,
792 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[] = {
793 RTE_FLOW_ITEM_TYPE_ETH,
794 RTE_FLOW_ITEM_TYPE_IPV4,
795 RTE_FLOW_ITEM_TYPE_NVGRE,
796 RTE_FLOW_ITEM_TYPE_ETH,
797 RTE_FLOW_ITEM_TYPE_IPV4,
798 RTE_FLOW_ITEM_TYPE_ICMP,
799 RTE_FLOW_ITEM_TYPE_END,
802 /* IPv6 NVGRE IPv4 */
803 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[] = {
804 RTE_FLOW_ITEM_TYPE_ETH,
805 RTE_FLOW_ITEM_TYPE_IPV6,
806 RTE_FLOW_ITEM_TYPE_NVGRE,
807 RTE_FLOW_ITEM_TYPE_IPV4,
808 RTE_FLOW_ITEM_TYPE_END,
810 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[] = {
811 RTE_FLOW_ITEM_TYPE_ETH,
812 RTE_FLOW_ITEM_TYPE_IPV6,
813 RTE_FLOW_ITEM_TYPE_NVGRE,
814 RTE_FLOW_ITEM_TYPE_IPV4,
815 RTE_FLOW_ITEM_TYPE_TCP,
816 RTE_FLOW_ITEM_TYPE_END,
818 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[] = {
819 RTE_FLOW_ITEM_TYPE_ETH,
820 RTE_FLOW_ITEM_TYPE_IPV6,
821 RTE_FLOW_ITEM_TYPE_NVGRE,
822 RTE_FLOW_ITEM_TYPE_IPV4,
823 RTE_FLOW_ITEM_TYPE_UDP,
824 RTE_FLOW_ITEM_TYPE_END,
826 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[] = {
827 RTE_FLOW_ITEM_TYPE_ETH,
828 RTE_FLOW_ITEM_TYPE_IPV6,
829 RTE_FLOW_ITEM_TYPE_NVGRE,
830 RTE_FLOW_ITEM_TYPE_IPV4,
831 RTE_FLOW_ITEM_TYPE_SCTP,
832 RTE_FLOW_ITEM_TYPE_END,
834 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[] = {
835 RTE_FLOW_ITEM_TYPE_ETH,
836 RTE_FLOW_ITEM_TYPE_IPV6,
837 RTE_FLOW_ITEM_TYPE_NVGRE,
838 RTE_FLOW_ITEM_TYPE_IPV4,
839 RTE_FLOW_ITEM_TYPE_ICMP,
840 RTE_FLOW_ITEM_TYPE_END,
843 /* IPv6 NVGRE MAC IPv4 */
844 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[] = {
845 RTE_FLOW_ITEM_TYPE_ETH,
846 RTE_FLOW_ITEM_TYPE_IPV6,
847 RTE_FLOW_ITEM_TYPE_NVGRE,
848 RTE_FLOW_ITEM_TYPE_ETH,
849 RTE_FLOW_ITEM_TYPE_IPV4,
850 RTE_FLOW_ITEM_TYPE_END,
852 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[] = {
853 RTE_FLOW_ITEM_TYPE_ETH,
854 RTE_FLOW_ITEM_TYPE_IPV6,
855 RTE_FLOW_ITEM_TYPE_NVGRE,
856 RTE_FLOW_ITEM_TYPE_ETH,
857 RTE_FLOW_ITEM_TYPE_IPV4,
858 RTE_FLOW_ITEM_TYPE_TCP,
859 RTE_FLOW_ITEM_TYPE_END,
861 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[] = {
862 RTE_FLOW_ITEM_TYPE_ETH,
863 RTE_FLOW_ITEM_TYPE_IPV6,
864 RTE_FLOW_ITEM_TYPE_NVGRE,
865 RTE_FLOW_ITEM_TYPE_ETH,
866 RTE_FLOW_ITEM_TYPE_IPV4,
867 RTE_FLOW_ITEM_TYPE_UDP,
868 RTE_FLOW_ITEM_TYPE_END,
870 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[] = {
871 RTE_FLOW_ITEM_TYPE_ETH,
872 RTE_FLOW_ITEM_TYPE_IPV6,
873 RTE_FLOW_ITEM_TYPE_NVGRE,
874 RTE_FLOW_ITEM_TYPE_ETH,
875 RTE_FLOW_ITEM_TYPE_IPV4,
876 RTE_FLOW_ITEM_TYPE_SCTP,
877 RTE_FLOW_ITEM_TYPE_END,
879 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[] = {
880 RTE_FLOW_ITEM_TYPE_ETH,
881 RTE_FLOW_ITEM_TYPE_IPV6,
882 RTE_FLOW_ITEM_TYPE_NVGRE,
883 RTE_FLOW_ITEM_TYPE_ETH,
884 RTE_FLOW_ITEM_TYPE_IPV4,
885 RTE_FLOW_ITEM_TYPE_ICMP,
886 RTE_FLOW_ITEM_TYPE_END,
889 /* IPv4 NVGRE IPv6 */
890 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[] = {
891 RTE_FLOW_ITEM_TYPE_ETH,
892 RTE_FLOW_ITEM_TYPE_IPV4,
893 RTE_FLOW_ITEM_TYPE_NVGRE,
894 RTE_FLOW_ITEM_TYPE_IPV6,
895 RTE_FLOW_ITEM_TYPE_END,
897 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[] = {
898 RTE_FLOW_ITEM_TYPE_ETH,
899 RTE_FLOW_ITEM_TYPE_IPV4,
900 RTE_FLOW_ITEM_TYPE_NVGRE,
901 RTE_FLOW_ITEM_TYPE_IPV6,
902 RTE_FLOW_ITEM_TYPE_UDP,
903 RTE_FLOW_ITEM_TYPE_END,
905 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[] = {
906 RTE_FLOW_ITEM_TYPE_ETH,
907 RTE_FLOW_ITEM_TYPE_IPV4,
908 RTE_FLOW_ITEM_TYPE_NVGRE,
909 RTE_FLOW_ITEM_TYPE_IPV6,
910 RTE_FLOW_ITEM_TYPE_TCP,
911 RTE_FLOW_ITEM_TYPE_END,
913 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[] = {
914 RTE_FLOW_ITEM_TYPE_ETH,
915 RTE_FLOW_ITEM_TYPE_IPV4,
916 RTE_FLOW_ITEM_TYPE_NVGRE,
917 RTE_FLOW_ITEM_TYPE_IPV6,
918 RTE_FLOW_ITEM_TYPE_SCTP,
919 RTE_FLOW_ITEM_TYPE_END,
921 enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[] = {
922 RTE_FLOW_ITEM_TYPE_ETH,
923 RTE_FLOW_ITEM_TYPE_IPV4,
924 RTE_FLOW_ITEM_TYPE_NVGRE,
925 RTE_FLOW_ITEM_TYPE_IPV6,
926 RTE_FLOW_ITEM_TYPE_ICMP6,
927 RTE_FLOW_ITEM_TYPE_END,
930 /* IPv4 NVGRE MAC IPv6 */
931 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[] = {
932 RTE_FLOW_ITEM_TYPE_ETH,
933 RTE_FLOW_ITEM_TYPE_IPV4,
934 RTE_FLOW_ITEM_TYPE_NVGRE,
935 RTE_FLOW_ITEM_TYPE_ETH,
936 RTE_FLOW_ITEM_TYPE_IPV6,
937 RTE_FLOW_ITEM_TYPE_END,
939 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[] = {
940 RTE_FLOW_ITEM_TYPE_ETH,
941 RTE_FLOW_ITEM_TYPE_IPV4,
942 RTE_FLOW_ITEM_TYPE_NVGRE,
943 RTE_FLOW_ITEM_TYPE_ETH,
944 RTE_FLOW_ITEM_TYPE_IPV6,
945 RTE_FLOW_ITEM_TYPE_UDP,
946 RTE_FLOW_ITEM_TYPE_END,
948 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[] = {
949 RTE_FLOW_ITEM_TYPE_ETH,
950 RTE_FLOW_ITEM_TYPE_IPV4,
951 RTE_FLOW_ITEM_TYPE_NVGRE,
952 RTE_FLOW_ITEM_TYPE_ETH,
953 RTE_FLOW_ITEM_TYPE_IPV6,
954 RTE_FLOW_ITEM_TYPE_TCP,
955 RTE_FLOW_ITEM_TYPE_END,
957 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[] = {
958 RTE_FLOW_ITEM_TYPE_ETH,
959 RTE_FLOW_ITEM_TYPE_IPV4,
960 RTE_FLOW_ITEM_TYPE_NVGRE,
961 RTE_FLOW_ITEM_TYPE_ETH,
962 RTE_FLOW_ITEM_TYPE_IPV6,
963 RTE_FLOW_ITEM_TYPE_SCTP,
964 RTE_FLOW_ITEM_TYPE_END,
966 enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[] = {
967 RTE_FLOW_ITEM_TYPE_ETH,
968 RTE_FLOW_ITEM_TYPE_IPV4,
969 RTE_FLOW_ITEM_TYPE_NVGRE,
970 RTE_FLOW_ITEM_TYPE_ETH,
971 RTE_FLOW_ITEM_TYPE_IPV6,
972 RTE_FLOW_ITEM_TYPE_ICMP6,
973 RTE_FLOW_ITEM_TYPE_END,
976 /* IPv6 NVGRE IPv6 */
977 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[] = {
978 RTE_FLOW_ITEM_TYPE_ETH,
979 RTE_FLOW_ITEM_TYPE_IPV6,
980 RTE_FLOW_ITEM_TYPE_NVGRE,
981 RTE_FLOW_ITEM_TYPE_IPV6,
982 RTE_FLOW_ITEM_TYPE_END,
984 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[] = {
985 RTE_FLOW_ITEM_TYPE_ETH,
986 RTE_FLOW_ITEM_TYPE_IPV6,
987 RTE_FLOW_ITEM_TYPE_NVGRE,
988 RTE_FLOW_ITEM_TYPE_IPV6,
989 RTE_FLOW_ITEM_TYPE_TCP,
990 RTE_FLOW_ITEM_TYPE_END,
992 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[] = {
993 RTE_FLOW_ITEM_TYPE_ETH,
994 RTE_FLOW_ITEM_TYPE_IPV6,
995 RTE_FLOW_ITEM_TYPE_NVGRE,
996 RTE_FLOW_ITEM_TYPE_IPV6,
997 RTE_FLOW_ITEM_TYPE_UDP,
998 RTE_FLOW_ITEM_TYPE_END,
1000 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[] = {
1001 RTE_FLOW_ITEM_TYPE_ETH,
1002 RTE_FLOW_ITEM_TYPE_IPV6,
1003 RTE_FLOW_ITEM_TYPE_NVGRE,
1004 RTE_FLOW_ITEM_TYPE_IPV6,
1005 RTE_FLOW_ITEM_TYPE_SCTP,
1006 RTE_FLOW_ITEM_TYPE_END,
1008 enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[] = {
1009 RTE_FLOW_ITEM_TYPE_ETH,
1010 RTE_FLOW_ITEM_TYPE_IPV6,
1011 RTE_FLOW_ITEM_TYPE_NVGRE,
1012 RTE_FLOW_ITEM_TYPE_IPV6,
1013 RTE_FLOW_ITEM_TYPE_ICMP6,
1014 RTE_FLOW_ITEM_TYPE_END,
1017 /* IPv6 NVGRE MAC IPv6 */
1018 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[] = {
1019 RTE_FLOW_ITEM_TYPE_ETH,
1020 RTE_FLOW_ITEM_TYPE_IPV6,
1021 RTE_FLOW_ITEM_TYPE_NVGRE,
1022 RTE_FLOW_ITEM_TYPE_ETH,
1023 RTE_FLOW_ITEM_TYPE_IPV6,
1024 RTE_FLOW_ITEM_TYPE_END,
1026 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[] = {
1027 RTE_FLOW_ITEM_TYPE_ETH,
1028 RTE_FLOW_ITEM_TYPE_IPV6,
1029 RTE_FLOW_ITEM_TYPE_NVGRE,
1030 RTE_FLOW_ITEM_TYPE_ETH,
1031 RTE_FLOW_ITEM_TYPE_IPV6,
1032 RTE_FLOW_ITEM_TYPE_TCP,
1033 RTE_FLOW_ITEM_TYPE_END,
1035 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[] = {
1036 RTE_FLOW_ITEM_TYPE_ETH,
1037 RTE_FLOW_ITEM_TYPE_IPV6,
1038 RTE_FLOW_ITEM_TYPE_NVGRE,
1039 RTE_FLOW_ITEM_TYPE_ETH,
1040 RTE_FLOW_ITEM_TYPE_IPV6,
1041 RTE_FLOW_ITEM_TYPE_UDP,
1042 RTE_FLOW_ITEM_TYPE_END,
1044 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[] = {
1045 RTE_FLOW_ITEM_TYPE_ETH,
1046 RTE_FLOW_ITEM_TYPE_IPV6,
1047 RTE_FLOW_ITEM_TYPE_NVGRE,
1048 RTE_FLOW_ITEM_TYPE_ETH,
1049 RTE_FLOW_ITEM_TYPE_IPV6,
1050 RTE_FLOW_ITEM_TYPE_SCTP,
1051 RTE_FLOW_ITEM_TYPE_END,
1053 enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[] = {
1054 RTE_FLOW_ITEM_TYPE_ETH,
1055 RTE_FLOW_ITEM_TYPE_IPV6,
1056 RTE_FLOW_ITEM_TYPE_NVGRE,
1057 RTE_FLOW_ITEM_TYPE_ETH,
1058 RTE_FLOW_ITEM_TYPE_IPV6,
1059 RTE_FLOW_ITEM_TYPE_ICMP6,
1060 RTE_FLOW_ITEM_TYPE_END,
1064 enum rte_flow_item_type pattern_eth_ipv4_gtpu[] = {
1065 RTE_FLOW_ITEM_TYPE_ETH,
1066 RTE_FLOW_ITEM_TYPE_IPV4,
1067 RTE_FLOW_ITEM_TYPE_UDP,
1068 RTE_FLOW_ITEM_TYPE_GTPU,
1069 RTE_FLOW_ITEM_TYPE_END,
1072 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[] = {
1073 RTE_FLOW_ITEM_TYPE_ETH,
1074 RTE_FLOW_ITEM_TYPE_IPV4,
1075 RTE_FLOW_ITEM_TYPE_UDP,
1076 RTE_FLOW_ITEM_TYPE_GTPU,
1077 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1078 RTE_FLOW_ITEM_TYPE_END,
1082 enum rte_flow_item_type pattern_eth_ipv6_gtpu[] = {
1083 RTE_FLOW_ITEM_TYPE_ETH,
1084 RTE_FLOW_ITEM_TYPE_IPV6,
1085 RTE_FLOW_ITEM_TYPE_UDP,
1086 RTE_FLOW_ITEM_TYPE_GTPU,
1087 RTE_FLOW_ITEM_TYPE_END,
1090 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[] = {
1091 RTE_FLOW_ITEM_TYPE_ETH,
1092 RTE_FLOW_ITEM_TYPE_IPV6,
1093 RTE_FLOW_ITEM_TYPE_UDP,
1094 RTE_FLOW_ITEM_TYPE_GTPU,
1095 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1096 RTE_FLOW_ITEM_TYPE_END,
1100 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[] = {
1101 RTE_FLOW_ITEM_TYPE_ETH,
1102 RTE_FLOW_ITEM_TYPE_IPV4,
1103 RTE_FLOW_ITEM_TYPE_UDP,
1104 RTE_FLOW_ITEM_TYPE_GTPU,
1105 RTE_FLOW_ITEM_TYPE_IPV4,
1106 RTE_FLOW_ITEM_TYPE_END,
1109 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[] = {
1110 RTE_FLOW_ITEM_TYPE_ETH,
1111 RTE_FLOW_ITEM_TYPE_IPV4,
1112 RTE_FLOW_ITEM_TYPE_UDP,
1113 RTE_FLOW_ITEM_TYPE_GTPU,
1114 RTE_FLOW_ITEM_TYPE_IPV4,
1115 RTE_FLOW_ITEM_TYPE_UDP,
1116 RTE_FLOW_ITEM_TYPE_END,
1119 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[] = {
1120 RTE_FLOW_ITEM_TYPE_ETH,
1121 RTE_FLOW_ITEM_TYPE_IPV4,
1122 RTE_FLOW_ITEM_TYPE_UDP,
1123 RTE_FLOW_ITEM_TYPE_GTPU,
1124 RTE_FLOW_ITEM_TYPE_IPV4,
1125 RTE_FLOW_ITEM_TYPE_TCP,
1126 RTE_FLOW_ITEM_TYPE_END,
1129 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[] = {
1130 RTE_FLOW_ITEM_TYPE_ETH,
1131 RTE_FLOW_ITEM_TYPE_IPV4,
1132 RTE_FLOW_ITEM_TYPE_UDP,
1133 RTE_FLOW_ITEM_TYPE_GTPU,
1134 RTE_FLOW_ITEM_TYPE_IPV4,
1135 RTE_FLOW_ITEM_TYPE_ICMP,
1136 RTE_FLOW_ITEM_TYPE_END,
1140 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[] = {
1141 RTE_FLOW_ITEM_TYPE_ETH,
1142 RTE_FLOW_ITEM_TYPE_IPV4,
1143 RTE_FLOW_ITEM_TYPE_UDP,
1144 RTE_FLOW_ITEM_TYPE_GTPU,
1145 RTE_FLOW_ITEM_TYPE_IPV6,
1146 RTE_FLOW_ITEM_TYPE_END,
1149 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[] = {
1150 RTE_FLOW_ITEM_TYPE_ETH,
1151 RTE_FLOW_ITEM_TYPE_IPV4,
1152 RTE_FLOW_ITEM_TYPE_UDP,
1153 RTE_FLOW_ITEM_TYPE_GTPU,
1154 RTE_FLOW_ITEM_TYPE_IPV6,
1155 RTE_FLOW_ITEM_TYPE_UDP,
1156 RTE_FLOW_ITEM_TYPE_END,
1159 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[] = {
1160 RTE_FLOW_ITEM_TYPE_ETH,
1161 RTE_FLOW_ITEM_TYPE_IPV4,
1162 RTE_FLOW_ITEM_TYPE_UDP,
1163 RTE_FLOW_ITEM_TYPE_GTPU,
1164 RTE_FLOW_ITEM_TYPE_IPV6,
1165 RTE_FLOW_ITEM_TYPE_TCP,
1166 RTE_FLOW_ITEM_TYPE_END,
1169 enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[] = {
1170 RTE_FLOW_ITEM_TYPE_ETH,
1171 RTE_FLOW_ITEM_TYPE_IPV4,
1172 RTE_FLOW_ITEM_TYPE_UDP,
1173 RTE_FLOW_ITEM_TYPE_GTPU,
1174 RTE_FLOW_ITEM_TYPE_IPV6,
1175 RTE_FLOW_ITEM_TYPE_ICMP,
1176 RTE_FLOW_ITEM_TYPE_END,
1180 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[] = {
1181 RTE_FLOW_ITEM_TYPE_ETH,
1182 RTE_FLOW_ITEM_TYPE_IPV6,
1183 RTE_FLOW_ITEM_TYPE_UDP,
1184 RTE_FLOW_ITEM_TYPE_GTPU,
1185 RTE_FLOW_ITEM_TYPE_IPV4,
1186 RTE_FLOW_ITEM_TYPE_END,
1189 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[] = {
1190 RTE_FLOW_ITEM_TYPE_ETH,
1191 RTE_FLOW_ITEM_TYPE_IPV6,
1192 RTE_FLOW_ITEM_TYPE_UDP,
1193 RTE_FLOW_ITEM_TYPE_GTPU,
1194 RTE_FLOW_ITEM_TYPE_IPV4,
1195 RTE_FLOW_ITEM_TYPE_UDP,
1196 RTE_FLOW_ITEM_TYPE_END,
1199 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[] = {
1200 RTE_FLOW_ITEM_TYPE_ETH,
1201 RTE_FLOW_ITEM_TYPE_IPV6,
1202 RTE_FLOW_ITEM_TYPE_UDP,
1203 RTE_FLOW_ITEM_TYPE_GTPU,
1204 RTE_FLOW_ITEM_TYPE_IPV4,
1205 RTE_FLOW_ITEM_TYPE_TCP,
1206 RTE_FLOW_ITEM_TYPE_END,
1209 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[] = {
1210 RTE_FLOW_ITEM_TYPE_ETH,
1211 RTE_FLOW_ITEM_TYPE_IPV6,
1212 RTE_FLOW_ITEM_TYPE_UDP,
1213 RTE_FLOW_ITEM_TYPE_GTPU,
1214 RTE_FLOW_ITEM_TYPE_IPV4,
1215 RTE_FLOW_ITEM_TYPE_ICMP,
1216 RTE_FLOW_ITEM_TYPE_END,
1220 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[] = {
1221 RTE_FLOW_ITEM_TYPE_ETH,
1222 RTE_FLOW_ITEM_TYPE_IPV6,
1223 RTE_FLOW_ITEM_TYPE_UDP,
1224 RTE_FLOW_ITEM_TYPE_GTPU,
1225 RTE_FLOW_ITEM_TYPE_IPV6,
1226 RTE_FLOW_ITEM_TYPE_END,
1229 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[] = {
1230 RTE_FLOW_ITEM_TYPE_ETH,
1231 RTE_FLOW_ITEM_TYPE_IPV6,
1232 RTE_FLOW_ITEM_TYPE_UDP,
1233 RTE_FLOW_ITEM_TYPE_GTPU,
1234 RTE_FLOW_ITEM_TYPE_IPV6,
1235 RTE_FLOW_ITEM_TYPE_UDP,
1236 RTE_FLOW_ITEM_TYPE_END,
1239 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[] = {
1240 RTE_FLOW_ITEM_TYPE_ETH,
1241 RTE_FLOW_ITEM_TYPE_IPV6,
1242 RTE_FLOW_ITEM_TYPE_UDP,
1243 RTE_FLOW_ITEM_TYPE_GTPU,
1244 RTE_FLOW_ITEM_TYPE_IPV6,
1245 RTE_FLOW_ITEM_TYPE_TCP,
1246 RTE_FLOW_ITEM_TYPE_END,
1249 enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[] = {
1250 RTE_FLOW_ITEM_TYPE_ETH,
1251 RTE_FLOW_ITEM_TYPE_IPV6,
1252 RTE_FLOW_ITEM_TYPE_UDP,
1253 RTE_FLOW_ITEM_TYPE_GTPU,
1254 RTE_FLOW_ITEM_TYPE_IPV6,
1255 RTE_FLOW_ITEM_TYPE_ICMP,
1256 RTE_FLOW_ITEM_TYPE_END,
1259 /*IPv4 GTPU EH IPv4 */
1260 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[] = {
1261 RTE_FLOW_ITEM_TYPE_ETH,
1262 RTE_FLOW_ITEM_TYPE_IPV4,
1263 RTE_FLOW_ITEM_TYPE_UDP,
1264 RTE_FLOW_ITEM_TYPE_GTPU,
1265 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1266 RTE_FLOW_ITEM_TYPE_IPV4,
1267 RTE_FLOW_ITEM_TYPE_END,
1270 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[] = {
1271 RTE_FLOW_ITEM_TYPE_ETH,
1272 RTE_FLOW_ITEM_TYPE_IPV4,
1273 RTE_FLOW_ITEM_TYPE_UDP,
1274 RTE_FLOW_ITEM_TYPE_GTPU,
1275 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1276 RTE_FLOW_ITEM_TYPE_IPV4,
1277 RTE_FLOW_ITEM_TYPE_UDP,
1278 RTE_FLOW_ITEM_TYPE_END,
1281 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[] = {
1282 RTE_FLOW_ITEM_TYPE_ETH,
1283 RTE_FLOW_ITEM_TYPE_IPV4,
1284 RTE_FLOW_ITEM_TYPE_UDP,
1285 RTE_FLOW_ITEM_TYPE_GTPU,
1286 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1287 RTE_FLOW_ITEM_TYPE_IPV4,
1288 RTE_FLOW_ITEM_TYPE_TCP,
1289 RTE_FLOW_ITEM_TYPE_END,
1292 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[] = {
1293 RTE_FLOW_ITEM_TYPE_ETH,
1294 RTE_FLOW_ITEM_TYPE_IPV4,
1295 RTE_FLOW_ITEM_TYPE_UDP,
1296 RTE_FLOW_ITEM_TYPE_GTPU,
1297 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1298 RTE_FLOW_ITEM_TYPE_IPV4,
1299 RTE_FLOW_ITEM_TYPE_ICMP,
1300 RTE_FLOW_ITEM_TYPE_END,
1303 /*IPv4 GTPU EH IPv6 */
1304 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[] = {
1305 RTE_FLOW_ITEM_TYPE_ETH,
1306 RTE_FLOW_ITEM_TYPE_IPV4,
1307 RTE_FLOW_ITEM_TYPE_UDP,
1308 RTE_FLOW_ITEM_TYPE_GTPU,
1309 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1310 RTE_FLOW_ITEM_TYPE_IPV6,
1311 RTE_FLOW_ITEM_TYPE_END,
1314 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[] = {
1315 RTE_FLOW_ITEM_TYPE_ETH,
1316 RTE_FLOW_ITEM_TYPE_IPV4,
1317 RTE_FLOW_ITEM_TYPE_UDP,
1318 RTE_FLOW_ITEM_TYPE_GTPU,
1319 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1320 RTE_FLOW_ITEM_TYPE_IPV6,
1321 RTE_FLOW_ITEM_TYPE_UDP,
1322 RTE_FLOW_ITEM_TYPE_END,
1325 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[] = {
1326 RTE_FLOW_ITEM_TYPE_ETH,
1327 RTE_FLOW_ITEM_TYPE_IPV4,
1328 RTE_FLOW_ITEM_TYPE_UDP,
1329 RTE_FLOW_ITEM_TYPE_GTPU,
1330 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1331 RTE_FLOW_ITEM_TYPE_IPV6,
1332 RTE_FLOW_ITEM_TYPE_TCP,
1333 RTE_FLOW_ITEM_TYPE_END,
1336 enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[] = {
1337 RTE_FLOW_ITEM_TYPE_ETH,
1338 RTE_FLOW_ITEM_TYPE_IPV4,
1339 RTE_FLOW_ITEM_TYPE_UDP,
1340 RTE_FLOW_ITEM_TYPE_GTPU,
1341 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1342 RTE_FLOW_ITEM_TYPE_IPV6,
1343 RTE_FLOW_ITEM_TYPE_ICMP,
1344 RTE_FLOW_ITEM_TYPE_END,
1347 /*IPv6 GTPU EH IPv4 */
1348 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[] = {
1349 RTE_FLOW_ITEM_TYPE_ETH,
1350 RTE_FLOW_ITEM_TYPE_IPV6,
1351 RTE_FLOW_ITEM_TYPE_UDP,
1352 RTE_FLOW_ITEM_TYPE_GTPU,
1353 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1354 RTE_FLOW_ITEM_TYPE_IPV4,
1355 RTE_FLOW_ITEM_TYPE_END,
1358 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[] = {
1359 RTE_FLOW_ITEM_TYPE_ETH,
1360 RTE_FLOW_ITEM_TYPE_IPV6,
1361 RTE_FLOW_ITEM_TYPE_UDP,
1362 RTE_FLOW_ITEM_TYPE_GTPU,
1363 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1364 RTE_FLOW_ITEM_TYPE_IPV4,
1365 RTE_FLOW_ITEM_TYPE_UDP,
1366 RTE_FLOW_ITEM_TYPE_END,
1369 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[] = {
1370 RTE_FLOW_ITEM_TYPE_ETH,
1371 RTE_FLOW_ITEM_TYPE_IPV6,
1372 RTE_FLOW_ITEM_TYPE_UDP,
1373 RTE_FLOW_ITEM_TYPE_GTPU,
1374 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1375 RTE_FLOW_ITEM_TYPE_IPV4,
1376 RTE_FLOW_ITEM_TYPE_TCP,
1377 RTE_FLOW_ITEM_TYPE_END,
1380 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[] = {
1381 RTE_FLOW_ITEM_TYPE_ETH,
1382 RTE_FLOW_ITEM_TYPE_IPV6,
1383 RTE_FLOW_ITEM_TYPE_UDP,
1384 RTE_FLOW_ITEM_TYPE_GTPU,
1385 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1386 RTE_FLOW_ITEM_TYPE_IPV4,
1387 RTE_FLOW_ITEM_TYPE_ICMP,
1388 RTE_FLOW_ITEM_TYPE_END,
1391 /*IPv6 GTPU EH IPv6 */
1392 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[] = {
1393 RTE_FLOW_ITEM_TYPE_ETH,
1394 RTE_FLOW_ITEM_TYPE_IPV6,
1395 RTE_FLOW_ITEM_TYPE_UDP,
1396 RTE_FLOW_ITEM_TYPE_GTPU,
1397 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1398 RTE_FLOW_ITEM_TYPE_IPV6,
1399 RTE_FLOW_ITEM_TYPE_END,
1402 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[] = {
1403 RTE_FLOW_ITEM_TYPE_ETH,
1404 RTE_FLOW_ITEM_TYPE_IPV6,
1405 RTE_FLOW_ITEM_TYPE_UDP,
1406 RTE_FLOW_ITEM_TYPE_GTPU,
1407 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1408 RTE_FLOW_ITEM_TYPE_IPV6,
1409 RTE_FLOW_ITEM_TYPE_UDP,
1410 RTE_FLOW_ITEM_TYPE_END,
1413 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[] = {
1414 RTE_FLOW_ITEM_TYPE_ETH,
1415 RTE_FLOW_ITEM_TYPE_IPV6,
1416 RTE_FLOW_ITEM_TYPE_UDP,
1417 RTE_FLOW_ITEM_TYPE_GTPU,
1418 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1419 RTE_FLOW_ITEM_TYPE_IPV6,
1420 RTE_FLOW_ITEM_TYPE_TCP,
1421 RTE_FLOW_ITEM_TYPE_END,
1424 enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[] = {
1425 RTE_FLOW_ITEM_TYPE_ETH,
1426 RTE_FLOW_ITEM_TYPE_IPV6,
1427 RTE_FLOW_ITEM_TYPE_UDP,
1428 RTE_FLOW_ITEM_TYPE_GTPU,
1429 RTE_FLOW_ITEM_TYPE_GTP_PSC,
1430 RTE_FLOW_ITEM_TYPE_IPV6,
1431 RTE_FLOW_ITEM_TYPE_ICMP,
1432 RTE_FLOW_ITEM_TYPE_END,
1436 enum rte_flow_item_type pattern_eth_pppoed[] = {
1437 RTE_FLOW_ITEM_TYPE_ETH,
1438 RTE_FLOW_ITEM_TYPE_PPPOED,
1439 RTE_FLOW_ITEM_TYPE_END,
1441 enum rte_flow_item_type pattern_eth_vlan_pppoed[] = {
1442 RTE_FLOW_ITEM_TYPE_ETH,
1443 RTE_FLOW_ITEM_TYPE_VLAN,
1444 RTE_FLOW_ITEM_TYPE_PPPOED,
1445 RTE_FLOW_ITEM_TYPE_END,
1447 enum rte_flow_item_type pattern_eth_qinq_pppoed[] = {
1448 RTE_FLOW_ITEM_TYPE_ETH,
1449 RTE_FLOW_ITEM_TYPE_VLAN,
1450 RTE_FLOW_ITEM_TYPE_VLAN,
1451 RTE_FLOW_ITEM_TYPE_PPPOED,
1452 RTE_FLOW_ITEM_TYPE_END,
1454 enum rte_flow_item_type pattern_eth_pppoes[] = {
1455 RTE_FLOW_ITEM_TYPE_ETH,
1456 RTE_FLOW_ITEM_TYPE_PPPOES,
1457 RTE_FLOW_ITEM_TYPE_END,
1459 enum rte_flow_item_type pattern_eth_pppoes_proto[] = {
1460 RTE_FLOW_ITEM_TYPE_ETH,
1461 RTE_FLOW_ITEM_TYPE_PPPOES,
1462 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1463 RTE_FLOW_ITEM_TYPE_END,
1465 enum rte_flow_item_type pattern_eth_vlan_pppoes[] = {
1466 RTE_FLOW_ITEM_TYPE_ETH,
1467 RTE_FLOW_ITEM_TYPE_VLAN,
1468 RTE_FLOW_ITEM_TYPE_PPPOES,
1469 RTE_FLOW_ITEM_TYPE_END,
1471 enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[] = {
1472 RTE_FLOW_ITEM_TYPE_ETH,
1473 RTE_FLOW_ITEM_TYPE_VLAN,
1474 RTE_FLOW_ITEM_TYPE_PPPOES,
1475 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1476 RTE_FLOW_ITEM_TYPE_END,
1478 enum rte_flow_item_type pattern_eth_qinq_pppoes[] = {
1479 RTE_FLOW_ITEM_TYPE_ETH,
1480 RTE_FLOW_ITEM_TYPE_VLAN,
1481 RTE_FLOW_ITEM_TYPE_VLAN,
1482 RTE_FLOW_ITEM_TYPE_PPPOES,
1483 RTE_FLOW_ITEM_TYPE_END,
1485 enum rte_flow_item_type pattern_eth_qinq_pppoes_proto[] = {
1486 RTE_FLOW_ITEM_TYPE_ETH,
1487 RTE_FLOW_ITEM_TYPE_VLAN,
1488 RTE_FLOW_ITEM_TYPE_VLAN,
1489 RTE_FLOW_ITEM_TYPE_PPPOES,
1490 RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID,
1491 RTE_FLOW_ITEM_TYPE_END,
1493 enum rte_flow_item_type pattern_eth_pppoes_ipv4[] = {
1494 RTE_FLOW_ITEM_TYPE_ETH,
1495 RTE_FLOW_ITEM_TYPE_PPPOES,
1496 RTE_FLOW_ITEM_TYPE_IPV4,
1497 RTE_FLOW_ITEM_TYPE_END,
1499 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[] = {
1500 RTE_FLOW_ITEM_TYPE_ETH,
1501 RTE_FLOW_ITEM_TYPE_VLAN,
1502 RTE_FLOW_ITEM_TYPE_PPPOES,
1503 RTE_FLOW_ITEM_TYPE_IPV4,
1504 RTE_FLOW_ITEM_TYPE_END,
1506 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[] = {
1507 RTE_FLOW_ITEM_TYPE_ETH,
1508 RTE_FLOW_ITEM_TYPE_VLAN,
1509 RTE_FLOW_ITEM_TYPE_VLAN,
1510 RTE_FLOW_ITEM_TYPE_PPPOES,
1511 RTE_FLOW_ITEM_TYPE_IPV4,
1512 RTE_FLOW_ITEM_TYPE_END,
1514 enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[] = {
1515 RTE_FLOW_ITEM_TYPE_ETH,
1516 RTE_FLOW_ITEM_TYPE_PPPOES,
1517 RTE_FLOW_ITEM_TYPE_IPV4,
1518 RTE_FLOW_ITEM_TYPE_UDP,
1519 RTE_FLOW_ITEM_TYPE_END,
1521 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[] = {
1522 RTE_FLOW_ITEM_TYPE_ETH,
1523 RTE_FLOW_ITEM_TYPE_VLAN,
1524 RTE_FLOW_ITEM_TYPE_PPPOES,
1525 RTE_FLOW_ITEM_TYPE_IPV4,
1526 RTE_FLOW_ITEM_TYPE_UDP,
1527 RTE_FLOW_ITEM_TYPE_END,
1529 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[] = {
1530 RTE_FLOW_ITEM_TYPE_ETH,
1531 RTE_FLOW_ITEM_TYPE_VLAN,
1532 RTE_FLOW_ITEM_TYPE_VLAN,
1533 RTE_FLOW_ITEM_TYPE_PPPOES,
1534 RTE_FLOW_ITEM_TYPE_IPV4,
1535 RTE_FLOW_ITEM_TYPE_UDP,
1536 RTE_FLOW_ITEM_TYPE_END,
1538 enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[] = {
1539 RTE_FLOW_ITEM_TYPE_ETH,
1540 RTE_FLOW_ITEM_TYPE_PPPOES,
1541 RTE_FLOW_ITEM_TYPE_IPV4,
1542 RTE_FLOW_ITEM_TYPE_TCP,
1543 RTE_FLOW_ITEM_TYPE_END,
1545 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[] = {
1546 RTE_FLOW_ITEM_TYPE_ETH,
1547 RTE_FLOW_ITEM_TYPE_VLAN,
1548 RTE_FLOW_ITEM_TYPE_PPPOES,
1549 RTE_FLOW_ITEM_TYPE_IPV4,
1550 RTE_FLOW_ITEM_TYPE_TCP,
1551 RTE_FLOW_ITEM_TYPE_END,
1553 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[] = {
1554 RTE_FLOW_ITEM_TYPE_ETH,
1555 RTE_FLOW_ITEM_TYPE_VLAN,
1556 RTE_FLOW_ITEM_TYPE_VLAN,
1557 RTE_FLOW_ITEM_TYPE_PPPOES,
1558 RTE_FLOW_ITEM_TYPE_IPV4,
1559 RTE_FLOW_ITEM_TYPE_TCP,
1560 RTE_FLOW_ITEM_TYPE_END,
1562 enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[] = {
1563 RTE_FLOW_ITEM_TYPE_ETH,
1564 RTE_FLOW_ITEM_TYPE_PPPOES,
1565 RTE_FLOW_ITEM_TYPE_IPV4,
1566 RTE_FLOW_ITEM_TYPE_SCTP,
1567 RTE_FLOW_ITEM_TYPE_END,
1569 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[] = {
1570 RTE_FLOW_ITEM_TYPE_ETH,
1571 RTE_FLOW_ITEM_TYPE_VLAN,
1572 RTE_FLOW_ITEM_TYPE_PPPOES,
1573 RTE_FLOW_ITEM_TYPE_IPV4,
1574 RTE_FLOW_ITEM_TYPE_SCTP,
1575 RTE_FLOW_ITEM_TYPE_END,
1577 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[] = {
1578 RTE_FLOW_ITEM_TYPE_ETH,
1579 RTE_FLOW_ITEM_TYPE_VLAN,
1580 RTE_FLOW_ITEM_TYPE_VLAN,
1581 RTE_FLOW_ITEM_TYPE_PPPOES,
1582 RTE_FLOW_ITEM_TYPE_IPV4,
1583 RTE_FLOW_ITEM_TYPE_SCTP,
1584 RTE_FLOW_ITEM_TYPE_END,
1586 enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[] = {
1587 RTE_FLOW_ITEM_TYPE_ETH,
1588 RTE_FLOW_ITEM_TYPE_PPPOES,
1589 RTE_FLOW_ITEM_TYPE_IPV4,
1590 RTE_FLOW_ITEM_TYPE_ICMP,
1591 RTE_FLOW_ITEM_TYPE_END,
1593 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[] = {
1594 RTE_FLOW_ITEM_TYPE_ETH,
1595 RTE_FLOW_ITEM_TYPE_VLAN,
1596 RTE_FLOW_ITEM_TYPE_PPPOES,
1597 RTE_FLOW_ITEM_TYPE_IPV4,
1598 RTE_FLOW_ITEM_TYPE_ICMP,
1599 RTE_FLOW_ITEM_TYPE_END,
1601 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[] = {
1602 RTE_FLOW_ITEM_TYPE_ETH,
1603 RTE_FLOW_ITEM_TYPE_VLAN,
1604 RTE_FLOW_ITEM_TYPE_VLAN,
1605 RTE_FLOW_ITEM_TYPE_PPPOES,
1606 RTE_FLOW_ITEM_TYPE_IPV4,
1607 RTE_FLOW_ITEM_TYPE_ICMP,
1608 RTE_FLOW_ITEM_TYPE_END,
1610 enum rte_flow_item_type pattern_eth_pppoes_ipv6[] = {
1611 RTE_FLOW_ITEM_TYPE_ETH,
1612 RTE_FLOW_ITEM_TYPE_PPPOES,
1613 RTE_FLOW_ITEM_TYPE_IPV6,
1614 RTE_FLOW_ITEM_TYPE_END,
1616 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[] = {
1617 RTE_FLOW_ITEM_TYPE_ETH,
1618 RTE_FLOW_ITEM_TYPE_VLAN,
1619 RTE_FLOW_ITEM_TYPE_PPPOES,
1620 RTE_FLOW_ITEM_TYPE_IPV6,
1621 RTE_FLOW_ITEM_TYPE_END,
1623 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[] = {
1624 RTE_FLOW_ITEM_TYPE_ETH,
1625 RTE_FLOW_ITEM_TYPE_VLAN,
1626 RTE_FLOW_ITEM_TYPE_VLAN,
1627 RTE_FLOW_ITEM_TYPE_PPPOES,
1628 RTE_FLOW_ITEM_TYPE_IPV6,
1629 RTE_FLOW_ITEM_TYPE_END,
1631 enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[] = {
1632 RTE_FLOW_ITEM_TYPE_ETH,
1633 RTE_FLOW_ITEM_TYPE_PPPOES,
1634 RTE_FLOW_ITEM_TYPE_IPV6,
1635 RTE_FLOW_ITEM_TYPE_UDP,
1636 RTE_FLOW_ITEM_TYPE_END,
1638 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[] = {
1639 RTE_FLOW_ITEM_TYPE_ETH,
1640 RTE_FLOW_ITEM_TYPE_VLAN,
1641 RTE_FLOW_ITEM_TYPE_PPPOES,
1642 RTE_FLOW_ITEM_TYPE_IPV6,
1643 RTE_FLOW_ITEM_TYPE_UDP,
1644 RTE_FLOW_ITEM_TYPE_END,
1646 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[] = {
1647 RTE_FLOW_ITEM_TYPE_ETH,
1648 RTE_FLOW_ITEM_TYPE_VLAN,
1649 RTE_FLOW_ITEM_TYPE_VLAN,
1650 RTE_FLOW_ITEM_TYPE_PPPOES,
1651 RTE_FLOW_ITEM_TYPE_IPV6,
1652 RTE_FLOW_ITEM_TYPE_UDP,
1653 RTE_FLOW_ITEM_TYPE_END,
1655 enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[] = {
1656 RTE_FLOW_ITEM_TYPE_ETH,
1657 RTE_FLOW_ITEM_TYPE_PPPOES,
1658 RTE_FLOW_ITEM_TYPE_IPV6,
1659 RTE_FLOW_ITEM_TYPE_TCP,
1660 RTE_FLOW_ITEM_TYPE_END,
1662 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[] = {
1663 RTE_FLOW_ITEM_TYPE_ETH,
1664 RTE_FLOW_ITEM_TYPE_VLAN,
1665 RTE_FLOW_ITEM_TYPE_PPPOES,
1666 RTE_FLOW_ITEM_TYPE_IPV6,
1667 RTE_FLOW_ITEM_TYPE_TCP,
1668 RTE_FLOW_ITEM_TYPE_END,
1670 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[] = {
1671 RTE_FLOW_ITEM_TYPE_ETH,
1672 RTE_FLOW_ITEM_TYPE_VLAN,
1673 RTE_FLOW_ITEM_TYPE_VLAN,
1674 RTE_FLOW_ITEM_TYPE_PPPOES,
1675 RTE_FLOW_ITEM_TYPE_IPV6,
1676 RTE_FLOW_ITEM_TYPE_TCP,
1677 RTE_FLOW_ITEM_TYPE_END,
1679 enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[] = {
1680 RTE_FLOW_ITEM_TYPE_ETH,
1681 RTE_FLOW_ITEM_TYPE_PPPOES,
1682 RTE_FLOW_ITEM_TYPE_IPV6,
1683 RTE_FLOW_ITEM_TYPE_SCTP,
1684 RTE_FLOW_ITEM_TYPE_END,
1686 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[] = {
1687 RTE_FLOW_ITEM_TYPE_ETH,
1688 RTE_FLOW_ITEM_TYPE_VLAN,
1689 RTE_FLOW_ITEM_TYPE_PPPOES,
1690 RTE_FLOW_ITEM_TYPE_IPV6,
1691 RTE_FLOW_ITEM_TYPE_SCTP,
1692 RTE_FLOW_ITEM_TYPE_END,
1694 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[] = {
1695 RTE_FLOW_ITEM_TYPE_ETH,
1696 RTE_FLOW_ITEM_TYPE_VLAN,
1697 RTE_FLOW_ITEM_TYPE_VLAN,
1698 RTE_FLOW_ITEM_TYPE_PPPOES,
1699 RTE_FLOW_ITEM_TYPE_IPV6,
1700 RTE_FLOW_ITEM_TYPE_SCTP,
1701 RTE_FLOW_ITEM_TYPE_END,
1703 enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[] = {
1704 RTE_FLOW_ITEM_TYPE_ETH,
1705 RTE_FLOW_ITEM_TYPE_PPPOES,
1706 RTE_FLOW_ITEM_TYPE_IPV6,
1707 RTE_FLOW_ITEM_TYPE_ICMP6,
1708 RTE_FLOW_ITEM_TYPE_END,
1710 enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[] = {
1711 RTE_FLOW_ITEM_TYPE_ETH,
1712 RTE_FLOW_ITEM_TYPE_VLAN,
1713 RTE_FLOW_ITEM_TYPE_PPPOES,
1714 RTE_FLOW_ITEM_TYPE_IPV6,
1715 RTE_FLOW_ITEM_TYPE_ICMP6,
1716 RTE_FLOW_ITEM_TYPE_END,
1718 enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[] = {
1719 RTE_FLOW_ITEM_TYPE_ETH,
1720 RTE_FLOW_ITEM_TYPE_VLAN,
1721 RTE_FLOW_ITEM_TYPE_VLAN,
1722 RTE_FLOW_ITEM_TYPE_PPPOES,
1723 RTE_FLOW_ITEM_TYPE_IPV6,
1724 RTE_FLOW_ITEM_TYPE_ICMP6,
1725 RTE_FLOW_ITEM_TYPE_END,
1727 enum rte_flow_item_type pattern_eth_ipv4_esp[] = {
1728 RTE_FLOW_ITEM_TYPE_ETH,
1729 RTE_FLOW_ITEM_TYPE_IPV4,
1730 RTE_FLOW_ITEM_TYPE_ESP,
1731 RTE_FLOW_ITEM_TYPE_END,
1733 enum rte_flow_item_type pattern_eth_ipv6_esp[] = {
1734 RTE_FLOW_ITEM_TYPE_ETH,
1735 RTE_FLOW_ITEM_TYPE_IPV6,
1736 RTE_FLOW_ITEM_TYPE_ESP,
1737 RTE_FLOW_ITEM_TYPE_END,
1739 enum rte_flow_item_type pattern_eth_ipv4_ah[] = {
1740 RTE_FLOW_ITEM_TYPE_ETH,
1741 RTE_FLOW_ITEM_TYPE_IPV4,
1742 RTE_FLOW_ITEM_TYPE_AH,
1743 RTE_FLOW_ITEM_TYPE_END,
1745 enum rte_flow_item_type pattern_eth_ipv6_ah[] = {
1746 RTE_FLOW_ITEM_TYPE_ETH,
1747 RTE_FLOW_ITEM_TYPE_IPV6,
1748 RTE_FLOW_ITEM_TYPE_AH,
1749 RTE_FLOW_ITEM_TYPE_END,
1751 enum rte_flow_item_type pattern_eth_ipv4_udp_esp[] = {
1752 RTE_FLOW_ITEM_TYPE_ETH,
1753 RTE_FLOW_ITEM_TYPE_IPV4,
1754 RTE_FLOW_ITEM_TYPE_UDP,
1755 RTE_FLOW_ITEM_TYPE_ESP,
1756 RTE_FLOW_ITEM_TYPE_END,
1758 enum rte_flow_item_type pattern_eth_ipv6_udp_esp[] = {
1759 RTE_FLOW_ITEM_TYPE_ETH,
1760 RTE_FLOW_ITEM_TYPE_IPV6,
1761 RTE_FLOW_ITEM_TYPE_UDP,
1762 RTE_FLOW_ITEM_TYPE_ESP,
1763 RTE_FLOW_ITEM_TYPE_END,
1765 enum rte_flow_item_type pattern_eth_ipv6_udp_ah[] = {
1766 RTE_FLOW_ITEM_TYPE_ETH,
1767 RTE_FLOW_ITEM_TYPE_IPV6,
1768 RTE_FLOW_ITEM_TYPE_UDP,
1769 RTE_FLOW_ITEM_TYPE_AH,
1770 RTE_FLOW_ITEM_TYPE_END,
1772 enum rte_flow_item_type pattern_eth_ipv4_l2tp[] = {
1773 RTE_FLOW_ITEM_TYPE_ETH,
1774 RTE_FLOW_ITEM_TYPE_IPV4,
1775 RTE_FLOW_ITEM_TYPE_L2TPV3OIP,
1776 RTE_FLOW_ITEM_TYPE_END,
1778 enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = {
1779 RTE_FLOW_ITEM_TYPE_ETH,
1780 RTE_FLOW_ITEM_TYPE_IPV6,
1781 RTE_FLOW_ITEM_TYPE_L2TPV3OIP,
1782 RTE_FLOW_ITEM_TYPE_END,
1784 enum rte_flow_item_type pattern_eth_ipv4_pfcp[] = {
1785 RTE_FLOW_ITEM_TYPE_ETH,
1786 RTE_FLOW_ITEM_TYPE_IPV4,
1787 RTE_FLOW_ITEM_TYPE_UDP,
1788 RTE_FLOW_ITEM_TYPE_PFCP,
1789 RTE_FLOW_ITEM_TYPE_END,
1791 enum rte_flow_item_type pattern_eth_ipv6_pfcp[] = {
1792 RTE_FLOW_ITEM_TYPE_ETH,
1793 RTE_FLOW_ITEM_TYPE_IPV6,
1794 RTE_FLOW_ITEM_TYPE_UDP,
1795 RTE_FLOW_ITEM_TYPE_PFCP,
1796 RTE_FLOW_ITEM_TYPE_END,
1801 typedef struct ice_flow_engine * (*parse_engine_t)(struct ice_adapter *ad,
1802 struct rte_flow *flow,
1803 struct ice_parser_list *parser_list,
1805 const struct rte_flow_item pattern[],
1806 const struct rte_flow_action actions[],
1807 struct rte_flow_error *error);
1810 ice_register_flow_engine(struct ice_flow_engine *engine)
1812 TAILQ_INSERT_TAIL(&engine_list, engine, node);
1816 ice_flow_init(struct ice_adapter *ad)
1819 struct ice_pf *pf = &ad->pf;
1821 struct ice_flow_engine *engine;
1823 TAILQ_INIT(&pf->flow_list);
1824 TAILQ_INIT(&pf->rss_parser_list);
1825 TAILQ_INIT(&pf->perm_parser_list);
1826 TAILQ_INIT(&pf->dist_parser_list);
1827 rte_spinlock_init(&pf->flow_ops_lock);
1829 RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {
1830 if (engine->init == NULL) {
1831 PMD_INIT_LOG(ERR, "Invalid engine type (%d)",
1836 ret = engine->init(ad);
1838 PMD_INIT_LOG(ERR, "Failed to initialize engine %d",
1847 ice_flow_uninit(struct ice_adapter *ad)
1849 struct ice_pf *pf = &ad->pf;
1850 struct ice_flow_engine *engine;
1851 struct rte_flow *p_flow;
1852 struct ice_flow_parser_node *p_parser;
1855 RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {
1860 /* Remove all flows */
1861 while ((p_flow = TAILQ_FIRST(&pf->flow_list))) {
1862 TAILQ_REMOVE(&pf->flow_list, p_flow, node);
1863 if (p_flow->engine->free)
1864 p_flow->engine->free(p_flow);
1868 /* Cleanup parser list */
1869 while ((p_parser = TAILQ_FIRST(&pf->rss_parser_list))) {
1870 TAILQ_REMOVE(&pf->rss_parser_list, p_parser, node);
1874 while ((p_parser = TAILQ_FIRST(&pf->perm_parser_list))) {
1875 TAILQ_REMOVE(&pf->perm_parser_list, p_parser, node);
1879 while ((p_parser = TAILQ_FIRST(&pf->dist_parser_list))) {
1880 TAILQ_REMOVE(&pf->dist_parser_list, p_parser, node);
1885 static struct ice_parser_list *
1886 ice_get_parser_list(struct ice_flow_parser *parser,
1887 struct ice_adapter *ad)
1889 struct ice_parser_list *list;
1890 struct ice_pf *pf = &ad->pf;
1892 switch (parser->stage) {
1893 case ICE_FLOW_STAGE_RSS:
1894 list = &pf->rss_parser_list;
1896 case ICE_FLOW_STAGE_PERMISSION:
1897 list = &pf->perm_parser_list;
1899 case ICE_FLOW_STAGE_DISTRIBUTOR:
1900 list = &pf->dist_parser_list;
1910 ice_register_parser(struct ice_flow_parser *parser,
1911 struct ice_adapter *ad)
1913 struct ice_parser_list *list;
1914 struct ice_flow_parser_node *parser_node;
1916 parser_node = rte_zmalloc("ice_parser", sizeof(*parser_node), 0);
1917 if (parser_node == NULL) {
1918 PMD_DRV_LOG(ERR, "Failed to allocate memory.");
1921 parser_node->parser = parser;
1923 list = ice_get_parser_list(parser, ad);
1927 if (ad->devargs.pipe_mode_support) {
1928 TAILQ_INSERT_TAIL(list, parser_node, node);
1930 if (parser->engine->type == ICE_FLOW_ENGINE_SWITCH ||
1931 parser->engine->type == ICE_FLOW_ENGINE_HASH)
1932 TAILQ_INSERT_HEAD(list, parser_node, node);
1933 else if (parser->engine->type == ICE_FLOW_ENGINE_FDIR)
1934 TAILQ_INSERT_TAIL(list, parser_node, node);
1935 else if (parser->engine->type == ICE_FLOW_ENGINE_ACL)
1936 TAILQ_INSERT_HEAD(list, parser_node, node);
1944 ice_unregister_parser(struct ice_flow_parser *parser,
1945 struct ice_adapter *ad)
1947 struct ice_parser_list *list;
1948 struct ice_flow_parser_node *p_parser;
1951 list = ice_get_parser_list(parser, ad);
1955 RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {
1956 if (p_parser->parser->engine->type == parser->engine->type) {
1957 TAILQ_REMOVE(list, p_parser, node);
1964 ice_flow_valid_attr(struct ice_adapter *ad,
1965 const struct rte_flow_attr *attr,
1966 int *ice_pipeline_stage,
1967 struct rte_flow_error *error)
1969 /* Must be input direction */
1970 if (!attr->ingress) {
1971 rte_flow_error_set(error, EINVAL,
1972 RTE_FLOW_ERROR_TYPE_ATTR_INGRESS,
1973 attr, "Only support ingress.");
1979 rte_flow_error_set(error, EINVAL,
1980 RTE_FLOW_ERROR_TYPE_ATTR_EGRESS,
1981 attr, "Not support egress.");
1985 /* Check pipeline mode support to set classification stage */
1986 if (ad->devargs.pipe_mode_support) {
1987 if (attr->priority == 0)
1988 *ice_pipeline_stage =
1989 ICE_FLOW_CLASSIFY_STAGE_PERMISSION;
1991 *ice_pipeline_stage =
1992 ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR;
1994 *ice_pipeline_stage =
1995 ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY;
1996 if (attr->priority > 1) {
1997 rte_flow_error_set(error, EINVAL,
1998 RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
1999 attr, "Only support priority 0 and 1.");
2006 rte_flow_error_set(error, EINVAL,
2007 RTE_FLOW_ERROR_TYPE_ATTR_GROUP,
2008 attr, "Not support group.");
2015 /* Find the first VOID or non-VOID item pointer */
2016 static const struct rte_flow_item *
2017 ice_find_first_item(const struct rte_flow_item *item, bool is_void)
2021 while (item->type != RTE_FLOW_ITEM_TYPE_END) {
2023 is_find = item->type == RTE_FLOW_ITEM_TYPE_VOID;
2025 is_find = item->type != RTE_FLOW_ITEM_TYPE_VOID;
2033 /* Skip all VOID items of the pattern */
2035 ice_pattern_skip_void_item(struct rte_flow_item *items,
2036 const struct rte_flow_item *pattern)
2038 uint32_t cpy_count = 0;
2039 const struct rte_flow_item *pb = pattern, *pe = pattern;
2042 /* Find a non-void item first */
2043 pb = ice_find_first_item(pb, false);
2044 if (pb->type == RTE_FLOW_ITEM_TYPE_END) {
2049 /* Find a void item */
2050 pe = ice_find_first_item(pb + 1, true);
2052 cpy_count = pe - pb;
2053 rte_memcpy(items, pb, sizeof(struct rte_flow_item) * cpy_count);
2057 if (pe->type == RTE_FLOW_ITEM_TYPE_END) {
2063 /* Copy the END item. */
2064 rte_memcpy(items, pe, sizeof(struct rte_flow_item));
2067 /* Check if the pattern matches a supported item type array */
2069 ice_match_pattern(enum rte_flow_item_type *item_array,
2070 const struct rte_flow_item *pattern)
2072 const struct rte_flow_item *item = pattern;
2074 while ((*item_array == item->type) &&
2075 (*item_array != RTE_FLOW_ITEM_TYPE_END)) {
2080 return (*item_array == RTE_FLOW_ITEM_TYPE_END &&
2081 item->type == RTE_FLOW_ITEM_TYPE_END);
2084 struct ice_ptype_match {
2085 enum rte_flow_item_type *pattern_list;
2089 static struct ice_ptype_match ice_ptype_map[] = {
2090 {pattern_raw, ICE_PTYPE_IPV4_PAY},
2091 {pattern_eth_ipv4, ICE_PTYPE_IPV4_PAY},
2092 {pattern_eth_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2093 {pattern_eth_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2094 {pattern_eth_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
2095 {pattern_eth_ipv4_gtpu, ICE_MAC_IPV4_GTPU},
2096 {pattern_eth_ipv4_gtpu_eh, ICE_MAC_IPV4_GTPU},
2097 {pattern_eth_ipv4_gtpu_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
2098 {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
2099 {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
2100 {pattern_eth_ipv4_gtpu_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
2101 {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
2102 {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
2103 {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
2104 {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
2105 {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
2106 {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
2107 {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
2108 {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
2109 {pattern_eth_ipv4_esp, ICE_MAC_IPV4_ESP},
2110 {pattern_eth_ipv4_udp_esp, ICE_MAC_IPV4_NAT_T_ESP},
2111 {pattern_eth_ipv4_ah, ICE_MAC_IPV4_AH},
2112 {pattern_eth_ipv4_l2tp, ICE_MAC_IPV4_L2TPV3},
2113 {pattern_eth_ipv4_pfcp, ICE_MAC_IPV4_PFCP_SESSION},
2114 {pattern_eth_ipv6, ICE_PTYPE_IPV6_PAY},
2115 {pattern_eth_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2116 {pattern_eth_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2117 {pattern_eth_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
2118 {pattern_eth_ipv6_frag_ext, ICE_PTYPE_IPV6FRAG_PAY},
2119 {pattern_eth_ipv6_gtpu, ICE_MAC_IPV6_GTPU},
2120 {pattern_eth_ipv6_gtpu_eh, ICE_MAC_IPV6_GTPU},
2121 {pattern_eth_ipv6_gtpu_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
2122 {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
2123 {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
2124 {pattern_eth_ipv6_gtpu_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
2125 {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
2126 {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
2127 {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
2128 {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
2129 {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
2130 {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
2131 {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
2132 {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
2133 {pattern_eth_ipv6_esp, ICE_MAC_IPV6_ESP},
2134 {pattern_eth_ipv6_udp_esp, ICE_MAC_IPV6_NAT_T_ESP},
2135 {pattern_eth_ipv6_ah, ICE_MAC_IPV6_AH},
2136 {pattern_eth_ipv6_l2tp, ICE_MAC_IPV6_L2TPV3},
2137 {pattern_eth_ipv6_pfcp, ICE_MAC_IPV6_PFCP_SESSION},
2138 {pattern_ethertype, ICE_PTYPE_MAC_PAY},
2139 {pattern_ethertype_vlan, ICE_PTYPE_MAC_PAY},
2140 {pattern_ethertype_qinq, ICE_PTYPE_MAC_PAY},
2141 {pattern_eth_arp, ICE_PTYPE_MAC_PAY},
2142 {pattern_eth_vlan_ipv4, ICE_PTYPE_IPV4_PAY},
2143 {pattern_eth_qinq_ipv4, ICE_PTYPE_IPV4_PAY},
2144 {pattern_eth_qinq_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2145 {pattern_eth_qinq_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2146 {pattern_eth_vlan_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
2147 {pattern_eth_vlan_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
2148 {pattern_eth_vlan_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
2149 {pattern_eth_vlan_ipv6, ICE_PTYPE_IPV6_PAY},
2150 {pattern_eth_qinq_ipv6, ICE_PTYPE_IPV6_PAY},
2151 {pattern_eth_qinq_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2152 {pattern_eth_qinq_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2153 {pattern_eth_vlan_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
2154 {pattern_eth_vlan_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
2155 {pattern_eth_vlan_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
2156 {pattern_eth_pppoes, ICE_MAC_PPPOE_PAY},
2157 {pattern_eth_vlan_pppoes, ICE_MAC_PPPOE_PAY},
2158 {pattern_eth_qinq_pppoes, ICE_MAC_PPPOE_PAY},
2159 {pattern_eth_pppoes_proto, ICE_MAC_PPPOE_PAY},
2160 {pattern_eth_vlan_pppoes_proto, ICE_MAC_PPPOE_PAY},
2161 {pattern_eth_qinq_pppoes_proto, ICE_MAC_PPPOE_PAY},
2162 {pattern_eth_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2163 {pattern_eth_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
2164 {pattern_eth_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
2165 {pattern_eth_vlan_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2166 {pattern_eth_qinq_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
2167 {pattern_eth_vlan_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
2168 {pattern_eth_vlan_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
2169 {pattern_eth_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2170 {pattern_eth_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY},
2171 {pattern_eth_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP},
2172 {pattern_eth_vlan_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2173 {pattern_eth_qinq_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
2174 {pattern_eth_vlan_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP},
2175 {pattern_eth_vlan_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY},
2176 {pattern_eth_ipv4_udp_vxlan_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2177 {pattern_eth_ipv4_udp_vxlan_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2178 {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2179 {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP},
2180 {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2181 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2182 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2183 {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP},
2184 {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY},
2185 {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY},
2186 {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP},
2191 ice_pattern_is_supported(__rte_unused struct ice_adapter *ad,
2192 const struct rte_flow_item *pattern)
2196 for (i = 0; i < RTE_DIM(ice_ptype_map); i++) {
2197 if (ice_match_pattern(ice_ptype_map[i].pattern_list,
2199 return ice_hw_ptype_ena(&ad->hw,
2200 ice_ptype_map[i].hw_ptype);
2207 struct ice_pattern_match_item *
2208 ice_search_pattern_match_item(struct ice_adapter *ad,
2209 const struct rte_flow_item pattern[],
2210 struct ice_pattern_match_item *array,
2212 struct rte_flow_error *error)
2214 struct ice_pattern_match_item *pattern_match_item;
2215 /* need free by each filter */
2216 struct rte_flow_item *items; /* used for pattern without VOID items */
2217 uint32_t item_num = 0; /* non-void item number */
2220 /* Get the non-void item number of pattern */
2221 while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) {
2222 if ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_VOID)
2228 items = rte_zmalloc("ice_pattern",
2229 item_num * sizeof(struct rte_flow_item), 0);
2231 rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ITEM_NUM,
2232 NULL, "No memory for PMD internal items.");
2235 pattern_match_item = rte_zmalloc("ice_pattern_match_item",
2236 sizeof(struct ice_pattern_match_item), 0);
2237 if (!pattern_match_item) {
2238 rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE,
2239 NULL, "Failed to allocate memory.");
2244 ice_pattern_skip_void_item(items, pattern);
2246 if (!ice_pattern_is_supported(ad, pattern))
2249 for (i = 0; i < array_len; i++) {
2250 if (ice_match_pattern(array[i].pattern_list,
2252 pattern_match_item->input_set_mask_o =
2253 array[i].input_set_mask_o;
2254 pattern_match_item->input_set_mask_i =
2255 array[i].input_set_mask_i;
2256 pattern_match_item->pattern_list =
2257 array[i].pattern_list;
2258 pattern_match_item->meta = array[i].meta;
2260 return pattern_match_item;
2265 rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM,
2266 pattern, "Unsupported pattern");
2268 rte_free(pattern_match_item);
2272 static struct ice_flow_engine *
2273 ice_parse_engine_create(struct ice_adapter *ad,
2274 struct rte_flow *flow,
2275 struct ice_parser_list *parser_list,
2277 const struct rte_flow_item pattern[],
2278 const struct rte_flow_action actions[],
2279 struct rte_flow_error *error)
2281 struct ice_flow_engine *engine = NULL;
2282 struct ice_flow_parser_node *parser_node;
2286 RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {
2289 if (parser_node->parser->parse_pattern_action(ad,
2290 parser_node->parser->array,
2291 parser_node->parser->array_len,
2292 pattern, actions, priority, &meta, error) < 0)
2295 engine = parser_node->parser->engine;
2296 RTE_ASSERT(engine->create != NULL);
2297 ret = engine->create(ad, flow, meta, error);
2300 else if (ret == -EEXIST)
2306 static struct ice_flow_engine *
2307 ice_parse_engine_validate(struct ice_adapter *ad,
2308 struct rte_flow *flow __rte_unused,
2309 struct ice_parser_list *parser_list,
2311 const struct rte_flow_item pattern[],
2312 const struct rte_flow_action actions[],
2313 struct rte_flow_error *error)
2315 struct ice_flow_engine *engine = NULL;
2316 struct ice_flow_parser_node *parser_node;
2319 RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {
2320 if (parser_node->parser->parse_pattern_action(ad,
2321 parser_node->parser->array,
2322 parser_node->parser->array_len,
2323 pattern, actions, priority, NULL, error) < 0)
2326 engine = parser_node->parser->engine;
2333 ice_flow_process_filter(struct rte_eth_dev *dev,
2334 struct rte_flow *flow,
2335 const struct rte_flow_attr *attr,
2336 const struct rte_flow_item pattern[],
2337 const struct rte_flow_action actions[],
2338 struct ice_flow_engine **engine,
2339 parse_engine_t ice_parse_engine,
2340 struct rte_flow_error *error)
2342 int ret = ICE_ERR_NOT_SUPPORTED;
2343 struct ice_adapter *ad =
2344 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2345 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2346 int ice_pipeline_stage = 0;
2349 rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_NUM,
2350 NULL, "NULL pattern.");
2354 if (!actions || actions->type == RTE_FLOW_ACTION_TYPE_END) {
2355 rte_flow_error_set(error, EINVAL,
2356 RTE_FLOW_ERROR_TYPE_ACTION_NUM,
2357 NULL, "NULL action.");
2362 rte_flow_error_set(error, EINVAL,
2363 RTE_FLOW_ERROR_TYPE_ATTR,
2364 NULL, "NULL attribute.");
2368 ret = ice_flow_valid_attr(ad, attr, &ice_pipeline_stage, error);
2372 *engine = ice_parse_engine(ad, flow, &pf->rss_parser_list,
2373 attr->priority, pattern, actions, error);
2374 if (*engine != NULL)
2377 switch (ice_pipeline_stage) {
2378 case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY:
2379 case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR:
2380 *engine = ice_parse_engine(ad, flow, &pf->dist_parser_list,
2381 attr->priority, pattern, actions, error);
2383 case ICE_FLOW_CLASSIFY_STAGE_PERMISSION:
2384 *engine = ice_parse_engine(ad, flow, &pf->perm_parser_list,
2385 attr->priority, pattern, actions, error);
2391 if (*engine == NULL)
2398 ice_flow_validate(struct rte_eth_dev *dev,
2399 const struct rte_flow_attr *attr,
2400 const struct rte_flow_item pattern[],
2401 const struct rte_flow_action actions[],
2402 struct rte_flow_error *error)
2404 struct ice_flow_engine *engine;
2406 return ice_flow_process_filter(dev, NULL, attr, pattern, actions,
2407 &engine, ice_parse_engine_validate, error);
2410 static struct rte_flow *
2411 ice_flow_create(struct rte_eth_dev *dev,
2412 const struct rte_flow_attr *attr,
2413 const struct rte_flow_item pattern[],
2414 const struct rte_flow_action actions[],
2415 struct rte_flow_error *error)
2417 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2418 struct rte_flow *flow = NULL;
2420 struct ice_flow_engine *engine = NULL;
2422 flow = rte_zmalloc("ice_flow", sizeof(struct rte_flow), 0);
2424 rte_flow_error_set(error, ENOMEM,
2425 RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
2426 "Failed to allocate memory");
2430 rte_spinlock_lock(&pf->flow_ops_lock);
2432 ret = ice_flow_process_filter(dev, flow, attr, pattern, actions,
2433 &engine, ice_parse_engine_create, error);
2435 PMD_DRV_LOG(ERR, "Failed to create flow");
2441 flow->engine = engine;
2442 TAILQ_INSERT_TAIL(&pf->flow_list, flow, node);
2443 PMD_DRV_LOG(INFO, "Succeeded to create (%d) flow", engine->type);
2446 rte_spinlock_unlock(&pf->flow_ops_lock);
2451 ice_flow_destroy(struct rte_eth_dev *dev,
2452 struct rte_flow *flow,
2453 struct rte_flow_error *error)
2455 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2456 struct ice_adapter *ad =
2457 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2460 if (!flow || !flow->engine || !flow->engine->destroy) {
2461 rte_flow_error_set(error, EINVAL,
2462 RTE_FLOW_ERROR_TYPE_HANDLE,
2463 NULL, "Invalid flow");
2467 rte_spinlock_lock(&pf->flow_ops_lock);
2469 ret = flow->engine->destroy(ad, flow, error);
2471 TAILQ_REMOVE(&pf->flow_list, flow, node);
2474 PMD_DRV_LOG(ERR, "Failed to destroy flow");
2477 rte_spinlock_unlock(&pf->flow_ops_lock);
2483 ice_flow_flush(struct rte_eth_dev *dev,
2484 struct rte_flow_error *error)
2486 struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
2487 struct rte_flow *p_flow;
2491 RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {
2492 ret = ice_flow_destroy(dev, p_flow, error);
2494 PMD_DRV_LOG(ERR, "Failed to flush flows");
2503 ice_flow_query(struct rte_eth_dev *dev,
2504 struct rte_flow *flow,
2505 const struct rte_flow_action *actions,
2507 struct rte_flow_error *error)
2510 struct ice_adapter *ad =
2511 ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
2512 struct rte_flow_query_count *count = data;
2513 struct ice_pf *pf = &ad->pf;
2515 if (!flow || !flow->engine || !flow->engine->query_count) {
2516 rte_flow_error_set(error, EINVAL,
2517 RTE_FLOW_ERROR_TYPE_HANDLE,
2518 NULL, "Invalid flow");
2522 rte_spinlock_lock(&pf->flow_ops_lock);
2524 for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
2525 switch (actions->type) {
2526 case RTE_FLOW_ACTION_TYPE_VOID:
2528 case RTE_FLOW_ACTION_TYPE_COUNT:
2529 ret = flow->engine->query_count(ad, flow, count, error);
2532 ret = rte_flow_error_set(error, ENOTSUP,
2533 RTE_FLOW_ERROR_TYPE_ACTION,
2535 "action not supported");
2541 rte_spinlock_unlock(&pf->flow_ops_lock);
2546 ice_flow_redirect(struct ice_adapter *ad,
2547 struct ice_flow_redirect *rd)
2549 struct ice_pf *pf = &ad->pf;
2550 struct rte_flow *p_flow;
2554 rte_spinlock_lock(&pf->flow_ops_lock);
2556 RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {
2557 if (!p_flow->engine->redirect)
2559 ret = p_flow->engine->redirect(ad, p_flow, rd);
2561 PMD_DRV_LOG(ERR, "Failed to redirect flows");
2566 rte_spinlock_unlock(&pf->flow_ops_lock);