2 *------------------------------------------------------------------
3 * Copyright (c) 2022 Intel and/or its affiliates.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *------------------------------------------------------------------
18 #include <vppinfra/mem.h>
19 #include "avf_advanced_flow.h"
21 #define AVF_PHINT_NONE 0
22 #define AVF_PHINT_GTPU BIT_ULL (0)
23 #define AVF_PHINT_GTPU_EH BIT_ULL (1)
24 #define AVF_PHINT_GTPU_EH_DWN BIT_ULL (2)
25 #define AVF_PHINT_GTPU_EH_UP BIT_ULL (3)
26 #define AVF_PHINT_OUTER_IPV4 BIT_ULL (4)
27 #define AVF_PHINT_OUTER_IPV6 BIT_ULL (5)
28 #define AVF_PHINT_GRE BIT_ULL (6)
29 /* the second IP header of GTPoGRE */
30 #define AVF_PHINT_MID_IPV4 BIT_ULL (7)
31 #define AVF_PHINT_MID_IPV6 BIT_ULL (8)
33 #define AVF_PHINT_L2TPV2 BIT_ULL (9)
34 #define AVF_PHINT_L2TPV2_LEN BIT_ULL (10)
36 #define AVF_PHINT_RAW BIT_ULL (11)
38 #define AVF_PHINT_GTPU_MSK \
39 (AVF_PHINT_GTPU | AVF_PHINT_GTPU_EH | AVF_PHINT_GTPU_EH_DWN | \
42 #define AVF_PHINT_LAYERS_MSK (AVF_PHINT_OUTER_IPV4 | AVF_PHINT_OUTER_IPV6)
44 #define AVF_GTPU_EH_DWNLINK 0
45 #define AVF_GTPU_EH_UPLINK 1
47 #define FIELD_SELECTOR(proto_hdr_field) \
48 (1UL << ((proto_hdr_field) &PROTO_HDR_FIELD_MASK))
51 #define REFINE_PROTO_FLD(op, fld) \
52 VIRTCHNL_##op##_PROTO_HDR_FIELD (hdr, VIRTCHNL_PROTO_HDR_##fld)
53 #define REPALCE_PROTO_FLD(fld_1, fld_2) \
56 REFINE_PROTO_FLD (DEL, fld_1); \
57 REFINE_PROTO_FLD (ADD, fld_2); \
61 #define proto_hdr_eth \
63 VIRTCHNL_PROTO_HDR_ETH, \
64 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_ETH_SRC) | \
65 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_ETH_DST), \
71 #define proto_hdr_svlan \
73 VIRTCHNL_PROTO_HDR_S_VLAN, FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_S_VLAN_ID), \
79 #define proto_hdr_cvlan \
81 VIRTCHNL_PROTO_HDR_C_VLAN, FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_C_VLAN_ID), \
87 #define proto_hdr_ipv4 \
89 VIRTCHNL_PROTO_HDR_IPV4, \
90 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV4_SRC) | \
91 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV4_DST), \
97 #define proto_hdr_ipv4_with_prot \
99 VIRTCHNL_PROTO_HDR_IPV4, \
100 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV4_SRC) | \
101 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV4_DST) | \
102 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV4_PROT), \
108 #define proto_hdr_ipv6 \
110 VIRTCHNL_PROTO_HDR_IPV6, \
111 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_SRC) | \
112 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_DST), \
118 #define proto_hdr_ipv6_frag \
120 VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG, \
121 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID), \
127 #define proto_hdr_ipv6_with_prot \
129 VIRTCHNL_PROTO_HDR_IPV6, \
130 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_SRC) | \
131 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_DST) | \
132 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_IPV6_PROT), \
138 #define proto_hdr_udp \
140 VIRTCHNL_PROTO_HDR_UDP, \
141 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) | \
142 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_UDP_DST_PORT), \
148 #define proto_hdr_tcp \
150 VIRTCHNL_PROTO_HDR_TCP, \
151 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) | \
152 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_TCP_DST_PORT), \
158 #define proto_hdr_sctp \
160 VIRTCHNL_PROTO_HDR_SCTP, \
161 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) | \
162 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_SCTP_DST_PORT), \
168 #define proto_hdr_esp \
170 VIRTCHNL_PROTO_HDR_ESP, FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_ESP_SPI), \
176 #define proto_hdr_ah \
178 VIRTCHNL_PROTO_HDR_AH, FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_AH_SPI), \
184 #define proto_hdr_l2tpv3 \
186 VIRTCHNL_PROTO_HDR_L2TPV3, \
187 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID), \
193 #define proto_hdr_pfcp \
195 VIRTCHNL_PROTO_HDR_PFCP, FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_PFCP_SEID), \
201 #define proto_hdr_gtpc \
203 VIRTCHNL_PROTO_HDR_GTPC, 0, { BUFF_NOUSED } \
206 #define proto_hdr_ecpri \
208 VIRTCHNL_PROTO_HDR_ECPRI, \
209 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_ECPRI_PC_RTC_ID), \
215 #define proto_hdr_l2tpv2 \
217 VIRTCHNL_PROTO_HDR_L2TPV2, \
218 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID) | \
219 FIELD_SELECTOR (VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID), \
225 #define proto_hdr_ppp \
227 VIRTCHNL_PROTO_HDR_PPP, 0, { BUFF_NOUSED } \
230 #define TUNNEL_LEVEL_OUTER 0
231 #define TUNNEL_LEVEL_INNER 1
233 /* proto_hdrs template */
234 struct virtchnl_proto_hdrs outer_ipv4_tmplt = {
237 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan, proto_hdr_ipv4 } }
240 struct virtchnl_proto_hdrs outer_ipv4_udp_tmplt = {
243 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan,
244 proto_hdr_ipv4_with_prot, proto_hdr_udp } }
247 struct virtchnl_proto_hdrs outer_ipv4_tcp_tmplt = {
250 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan,
251 proto_hdr_ipv4_with_prot, proto_hdr_tcp } }
254 struct virtchnl_proto_hdrs outer_ipv4_sctp_tmplt = {
257 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan, proto_hdr_ipv4,
261 struct virtchnl_proto_hdrs outer_ipv6_tmplt = {
264 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan, proto_hdr_ipv6 } }
267 struct virtchnl_proto_hdrs outer_ipv6_frag_tmplt = {
270 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan, proto_hdr_ipv6,
271 proto_hdr_ipv6_frag } }
274 struct virtchnl_proto_hdrs outer_ipv6_udp_tmplt = {
277 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan,
278 proto_hdr_ipv6_with_prot, proto_hdr_udp } }
281 struct virtchnl_proto_hdrs outer_ipv6_tcp_tmplt = {
284 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan,
285 proto_hdr_ipv6_with_prot, proto_hdr_tcp } }
288 struct virtchnl_proto_hdrs outer_ipv6_sctp_tmplt = {
291 { { proto_hdr_eth, proto_hdr_svlan, proto_hdr_cvlan, proto_hdr_ipv6,
295 struct virtchnl_proto_hdrs inner_ipv4_tmplt = { TUNNEL_LEVEL_INNER,
297 { { proto_hdr_ipv4 } } };
299 struct virtchnl_proto_hdrs inner_ipv4_udp_tmplt = {
300 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv4_with_prot, proto_hdr_udp } }
303 struct virtchnl_proto_hdrs inner_ipv4_tcp_tmplt = {
304 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv4_with_prot, proto_hdr_tcp } }
307 struct virtchnl_proto_hdrs second_inner_ipv4_tmplt = {
308 2, 1, { { proto_hdr_ipv4 } }
311 struct virtchnl_proto_hdrs second_inner_ipv4_udp_tmplt = {
312 2, 2, { { proto_hdr_ipv4_with_prot, proto_hdr_udp } }
315 struct virtchnl_proto_hdrs second_inner_ipv4_tcp_tmplt = {
316 2, 2, { { proto_hdr_ipv4_with_prot, proto_hdr_tcp } }
319 struct virtchnl_proto_hdrs second_inner_ipv6_tmplt = {
320 2, 1, { { proto_hdr_ipv6 } }
323 struct virtchnl_proto_hdrs second_inner_ipv6_udp_tmplt = {
324 2, 2, { { proto_hdr_ipv6_with_prot, proto_hdr_udp } }
327 struct virtchnl_proto_hdrs second_inner_ipv6_tcp_tmplt = {
328 2, 2, { { proto_hdr_ipv6_with_prot, proto_hdr_tcp } }
331 struct virtchnl_proto_hdrs inner_ipv4_sctp_tmplt = {
332 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv4, proto_hdr_sctp } }
335 struct virtchnl_proto_hdrs inner_ipv6_tmplt = { TUNNEL_LEVEL_INNER,
337 { { proto_hdr_ipv6 } } };
339 struct virtchnl_proto_hdrs inner_ipv6_udp_tmplt = {
340 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv6_with_prot, proto_hdr_udp } }
343 struct virtchnl_proto_hdrs inner_ipv6_tcp_tmplt = {
344 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv6_with_prot, proto_hdr_tcp } }
347 struct virtchnl_proto_hdrs inner_ipv6_sctp_tmplt = {
348 TUNNEL_LEVEL_INNER, 2, { { proto_hdr_ipv6, proto_hdr_sctp } }
351 struct virtchnl_proto_hdrs ipv4_esp_tmplt = {
352 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv4, proto_hdr_esp } }
355 struct virtchnl_proto_hdrs ipv4_udp_esp_tmplt = {
356 TUNNEL_LEVEL_OUTER, 3, { { proto_hdr_ipv4, proto_hdr_udp, proto_hdr_esp } }
359 struct virtchnl_proto_hdrs ipv4_ah_tmplt = {
360 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv4, proto_hdr_ah } }
363 struct virtchnl_proto_hdrs ipv6_esp_tmplt = {
364 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv6, proto_hdr_esp } }
367 struct virtchnl_proto_hdrs ipv6_udp_esp_tmplt = {
368 TUNNEL_LEVEL_OUTER, 3, { { proto_hdr_ipv6, proto_hdr_udp, proto_hdr_esp } }
371 struct virtchnl_proto_hdrs ipv6_ah_tmplt = {
372 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv6, proto_hdr_ah } }
375 struct virtchnl_proto_hdrs ipv4_l2tpv3_tmplt = {
376 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv4, proto_hdr_l2tpv3 } }
379 struct virtchnl_proto_hdrs ipv6_l2tpv3_tmplt = {
380 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv6, proto_hdr_l2tpv3 } }
383 struct virtchnl_proto_hdrs ipv4_pfcp_tmplt = {
384 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv4, proto_hdr_pfcp } }
387 struct virtchnl_proto_hdrs ipv6_pfcp_tmplt = {
388 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_ipv6, proto_hdr_pfcp } }
391 struct virtchnl_proto_hdrs ipv4_udp_gtpc_tmplt = {
392 TUNNEL_LEVEL_OUTER, 3, { { proto_hdr_ipv4, proto_hdr_udp, proto_hdr_gtpc } }
395 struct virtchnl_proto_hdrs ipv6_udp_gtpc_tmplt = {
396 TUNNEL_LEVEL_OUTER, 3, { { proto_hdr_ipv6, proto_hdr_udp, proto_hdr_gtpc } }
399 struct virtchnl_proto_hdrs eth_ecpri_tmplt = {
400 TUNNEL_LEVEL_OUTER, 2, { { proto_hdr_eth, proto_hdr_ecpri } }
403 struct virtchnl_proto_hdrs ipv4_ecpri_tmplt = {
404 TUNNEL_LEVEL_OUTER, 3, { { proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ecpri } }
407 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv4_tmplt = {
410 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv4 } }
413 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv6_tmplt = {
416 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv6 } }
419 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv4_udp_tmplt = {
422 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv4_with_prot,
426 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv4_tcp_tmplt = {
429 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv4_with_prot,
433 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv6_udp_tmplt = {
436 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv6_with_prot,
440 struct virtchnl_proto_hdrs udp_l2tpv2_ppp_ipv6_tcp_tmplt = {
443 { { proto_hdr_l2tpv2, proto_hdr_ppp, proto_hdr_ipv6_with_prot,
448 struct virtchnl_proto_hdrs ipv4_l2tpv2_tmplt = {
451 { { proto_hdr_eth, proto_hdr_ipv4, proto_hdr_udp, proto_hdr_l2tpv2 } }
454 struct virtchnl_proto_hdrs ipv6_l2tpv2_tmplt = {
457 { { proto_hdr_eth, proto_hdr_ipv6, proto_hdr_udp, proto_hdr_l2tpv2 } }
460 struct virtchnl_proto_hdrs ipv4_l2tpv2_ppp_tmplt = {
463 { { proto_hdr_eth, proto_hdr_ipv4, proto_hdr_udp, proto_hdr_l2tpv2,
467 struct virtchnl_proto_hdrs ipv6_l2tpv2_ppp_tmplt = {
470 { { proto_hdr_eth, proto_hdr_ipv6, proto_hdr_udp, proto_hdr_l2tpv2,
474 /* rss type super set */
476 #define AVF_INSET_NONE 0ULL
479 #define AVF_RSS_TYPE_OUTER_IPV4 \
480 (AVF_ETH_RSS_ETH | AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_FRAG_IPV4 | \
481 AVF_ETH_RSS_IPV4_CHKSUM)
482 #define AVF_RSS_TYPE_OUTER_IPV4_UDP \
483 (AVF_RSS_TYPE_OUTER_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_UDP | \
484 AVF_ETH_RSS_L4_CHKSUM)
485 #define AVF_RSS_TYPE_OUTER_IPV4_TCP \
486 (AVF_RSS_TYPE_OUTER_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_TCP | \
487 AVF_ETH_RSS_L4_CHKSUM)
488 #define AVF_RSS_TYPE_OUTER_IPV4_SCTP \
489 (AVF_RSS_TYPE_OUTER_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_SCTP | \
490 AVF_ETH_RSS_L4_CHKSUM)
492 #define AVF_RSS_TYPE_OUTER_IPV6 (AVF_ETH_RSS_ETH | AVF_ETH_RSS_IPV6)
493 #define AVF_RSS_TYPE_OUTER_IPV6_FRAG \
494 (AVF_RSS_TYPE_OUTER_IPV6 | AVF_ETH_RSS_FRAG_IPV6)
495 #define AVF_RSS_TYPE_OUTER_IPV6_UDP \
496 (AVF_RSS_TYPE_OUTER_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_UDP | \
497 AVF_ETH_RSS_L4_CHKSUM)
498 #define AVF_RSS_TYPE_OUTER_IPV6_TCP \
499 (AVF_RSS_TYPE_OUTER_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_TCP | \
500 AVF_ETH_RSS_L4_CHKSUM)
501 #define AVF_RSS_TYPE_OUTER_IPV6_SCTP \
502 (AVF_RSS_TYPE_OUTER_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_SCTP | \
503 AVF_ETH_RSS_L4_CHKSUM)
505 #define AVF_RSS_TYPE_VLAN_IPV4 \
506 (AVF_RSS_TYPE_OUTER_IPV4 | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
507 #define AVF_RSS_TYPE_VLAN_IPV4_UDP \
508 (AVF_RSS_TYPE_OUTER_IPV4_UDP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
509 #define AVF_RSS_TYPE_VLAN_IPV4_TCP \
510 (AVF_RSS_TYPE_OUTER_IPV4_TCP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
511 #define AVF_RSS_TYPE_VLAN_IPV4_SCTP \
512 (AVF_RSS_TYPE_OUTER_IPV4_SCTP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
514 #define AVF_RSS_TYPE_VLAN_IPV6 \
515 (AVF_RSS_TYPE_OUTER_IPV6 | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
516 #define AVF_RSS_TYPE_VLAN_IPV6_FRAG \
517 (AVF_RSS_TYPE_OUTER_IPV6_FRAG | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
518 #define AVF_RSS_TYPE_VLAN_IPV6_UDP \
519 (AVF_RSS_TYPE_OUTER_IPV6_UDP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
520 #define AVF_RSS_TYPE_VLAN_IPV6_TCP \
521 (AVF_RSS_TYPE_OUTER_IPV6_TCP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
522 #define AVF_RSS_TYPE_VLAN_IPV6_SCTP \
523 (AVF_RSS_TYPE_OUTER_IPV6_SCTP | AVF_ETH_RSS_S_VLAN | AVF_ETH_RSS_C_VLAN)
525 #define AVF_RSS_TYPE_INNER_IPV4 AVF_ETH_RSS_IPV4
526 #define AVF_RSS_TYPE_INNER_IPV4_UDP \
527 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_UDP)
528 #define AVF_RSS_TYPE_INNER_IPV4_TCP \
529 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_TCP)
530 #define AVF_RSS_TYPE_INNER_IPV4_SCTP \
531 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_SCTP)
533 #define AVF_RSS_TYPE_INNER_IPV6 AVF_ETH_RSS_IPV6
534 #define AVF_RSS_TYPE_INNER_IPV6_UDP \
535 (AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_UDP)
536 #define AVF_RSS_TYPE_INNER_IPV6_TCP \
537 (AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_TCP)
538 #define AVF_RSS_TYPE_INNER_IPV6_SCTP \
539 (AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_SCTP)
541 #define AVF_RSS_TYPE_GTPU_IPV4 (AVF_RSS_TYPE_INNER_IPV4 | AVF_ETH_RSS_GTPU)
542 #define AVF_RSS_TYPE_GTPU_IPV4_UDP \
543 (AVF_RSS_TYPE_INNER_IPV4_UDP | AVF_ETH_RSS_GTPU)
544 #define AVF_RSS_TYPE_GTPU_IPV4_TCP \
545 (AVF_RSS_TYPE_INNER_IPV4_TCP | AVF_ETH_RSS_GTPU)
547 #define AVF_RSS_TYPE_GTPU_IPV6 (AVF_RSS_TYPE_INNER_IPV6 | AVF_ETH_RSS_GTPU)
548 #define AVF_RSS_TYPE_GTPU_IPV6_UDP \
549 (AVF_RSS_TYPE_INNER_IPV6_UDP | AVF_ETH_RSS_GTPU)
550 #define AVF_RSS_TYPE_GTPU_IPV6_TCP \
551 (AVF_RSS_TYPE_INNER_IPV6_TCP | AVF_ETH_RSS_GTPU)
552 /* ESP, AH, L2TPV3 and PFCP */
553 #define AVF_RSS_TYPE_IPV4_ESP (AVF_ETH_RSS_ESP | AVF_ETH_RSS_IPV4)
554 #define AVF_RSS_TYPE_IPV4_AH (AVF_ETH_RSS_AH | AVF_ETH_RSS_IPV4)
555 #define AVF_RSS_TYPE_IPV6_ESP (AVF_ETH_RSS_ESP | AVF_ETH_RSS_IPV6)
556 #define AVF_RSS_TYPE_IPV6_AH (AVF_ETH_RSS_AH | AVF_ETH_RSS_IPV6)
557 #define AVF_RSS_TYPE_IPV4_L2TPV3 (AVF_ETH_RSS_L2TPV3 | AVF_ETH_RSS_IPV4)
558 #define AVF_RSS_TYPE_IPV6_L2TPV3 (AVF_ETH_RSS_L2TPV3 | AVF_ETH_RSS_IPV6)
559 #define AVF_RSS_TYPE_IPV4_PFCP (AVF_ETH_RSS_PFCP | AVF_ETH_RSS_IPV4)
560 #define AVF_RSS_TYPE_IPV6_PFCP (AVF_ETH_RSS_PFCP | AVF_ETH_RSS_IPV6)
563 #define AVF_RSS_TYPE_ETH_L2TPV2 (AVF_ETH_RSS_ETH | AVF_ETH_RSS_L2TPV2)
565 #define VALID_RSS_IPV4_L4 \
566 (AVF_ETH_RSS_NONFRAG_IPV4_UDP | AVF_ETH_RSS_NONFRAG_IPV4_TCP | \
567 AVF_ETH_RSS_NONFRAG_IPV4_SCTP)
569 #define VALID_RSS_IPV6_L4 \
570 (AVF_ETH_RSS_NONFRAG_IPV6_UDP | AVF_ETH_RSS_NONFRAG_IPV6_TCP | \
571 AVF_ETH_RSS_NONFRAG_IPV6_SCTP)
573 #define VALID_RSS_IPV4 \
574 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_FRAG_IPV4 | VALID_RSS_IPV4_L4)
575 #define VALID_RSS_IPV6 \
576 (AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_FRAG_IPV6 | VALID_RSS_IPV6_L4)
577 #define VALID_RSS_L3 (VALID_RSS_IPV4 | VALID_RSS_IPV6)
578 #define VALID_RSS_L4 (VALID_RSS_IPV4_L4 | VALID_RSS_IPV6_L4)
580 #define VALID_RSS_ATTR \
581 (AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY | \
582 AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY | \
583 AVF_ETH_RSS_L2_SRC_ONLY | AVF_ETH_RSS_L2_DST_ONLY | AVF_ETH_RSS_L3_PRE64)
585 #define INVALID_RSS_ATTR \
586 (AVF_ETH_RSS_L3_PRE32 | AVF_ETH_RSS_L3_PRE40 | AVF_ETH_RSS_L3_PRE48 | \
587 AVF_ETH_RSS_L3_PRE56 | AVF_ETH_RSS_L3_PRE96)
589 static u64 invalid_rss_comb[] = {
590 AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_UDP,
591 AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_NONFRAG_IPV4_TCP,
592 AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_UDP,
593 AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_NONFRAG_IPV6_TCP,
594 AVF_ETH_RSS_L3_PRE32 | AVF_ETH_RSS_L3_PRE40 | AVF_ETH_RSS_L3_PRE48 |
595 AVF_ETH_RSS_L3_PRE56 | AVF_ETH_RSS_L3_PRE96
604 static struct rss_attr_type rss_attr_to_valid_type[] = {
605 { AVF_ETH_RSS_L2_SRC_ONLY | AVF_ETH_RSS_L2_DST_ONLY, AVF_ETH_RSS_ETH },
606 { AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY, VALID_RSS_L3 },
607 { AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY, VALID_RSS_L4 },
608 /* current ipv6 prefix only supports prefix 64 bits*/
609 { AVF_ETH_RSS_L3_PRE64, VALID_RSS_IPV6 },
610 { INVALID_RSS_ATTR, 0 }
614 enum avf_flow_item_type avf_pattern_raw[] = {
615 AVF_FLOW_ITEM_TYPE_RAW,
616 AVF_FLOW_ITEM_TYPE_END,
620 enum avf_flow_item_type avf_pattern_empty[] = {
621 AVF_FLOW_ITEM_TYPE_END,
625 enum avf_flow_item_type avf_pattern_ethertype[] = {
626 AVF_FLOW_ITEM_TYPE_ETH,
627 AVF_FLOW_ITEM_TYPE_END,
630 enum avf_flow_item_type avf_pattern_ethertype_vlan[] = {
631 AVF_FLOW_ITEM_TYPE_ETH,
632 AVF_FLOW_ITEM_TYPE_VLAN,
633 AVF_FLOW_ITEM_TYPE_END,
636 enum avf_flow_item_type avf_pattern_ethertype_qinq[] = {
637 AVF_FLOW_ITEM_TYPE_ETH,
638 AVF_FLOW_ITEM_TYPE_VLAN,
639 AVF_FLOW_ITEM_TYPE_VLAN,
640 AVF_FLOW_ITEM_TYPE_END,
644 enum avf_flow_item_type avf_pattern_eth_arp[] = {
645 AVF_FLOW_ITEM_TYPE_ETH,
646 AVF_FLOW_ITEM_TYPE_ARP_ETH_IPV4,
647 AVF_FLOW_ITEM_TYPE_END,
650 /* non-tunnel IPv4 */
651 enum avf_flow_item_type avf_pattern_eth_ipv4[] = {
652 AVF_FLOW_ITEM_TYPE_ETH,
653 AVF_FLOW_ITEM_TYPE_IPV4,
654 AVF_FLOW_ITEM_TYPE_END,
657 enum avf_flow_item_type avf_pattern_eth_vlan_ipv4[] = {
658 AVF_FLOW_ITEM_TYPE_ETH,
659 AVF_FLOW_ITEM_TYPE_VLAN,
660 AVF_FLOW_ITEM_TYPE_IPV4,
661 AVF_FLOW_ITEM_TYPE_END,
664 enum avf_flow_item_type avf_pattern_eth_qinq_ipv4[] = {
665 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
666 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
669 enum avf_flow_item_type avf_pattern_eth_ipv4_udp[] = {
670 AVF_FLOW_ITEM_TYPE_ETH,
671 AVF_FLOW_ITEM_TYPE_IPV4,
672 AVF_FLOW_ITEM_TYPE_UDP,
673 AVF_FLOW_ITEM_TYPE_END,
676 enum avf_flow_item_type avf_pattern_eth_vlan_ipv4_udp[] = {
677 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV4,
678 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
681 enum avf_flow_item_type avf_pattern_eth_qinq_ipv4_udp[] = {
682 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
683 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
686 enum avf_flow_item_type avf_pattern_eth_ipv4_tcp[] = {
687 AVF_FLOW_ITEM_TYPE_ETH,
688 AVF_FLOW_ITEM_TYPE_IPV4,
689 AVF_FLOW_ITEM_TYPE_TCP,
690 AVF_FLOW_ITEM_TYPE_END,
693 enum avf_flow_item_type avf_pattern_eth_vlan_ipv4_tcp[] = {
694 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV4,
695 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
698 enum avf_flow_item_type avf_pattern_eth_qinq_ipv4_tcp[] = {
699 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
700 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
703 enum avf_flow_item_type avf_pattern_eth_ipv4_sctp[] = {
704 AVF_FLOW_ITEM_TYPE_ETH,
705 AVF_FLOW_ITEM_TYPE_IPV4,
706 AVF_FLOW_ITEM_TYPE_SCTP,
707 AVF_FLOW_ITEM_TYPE_END,
710 enum avf_flow_item_type avf_pattern_eth_vlan_ipv4_sctp[] = {
711 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV4,
712 AVF_FLOW_ITEM_TYPE_SCTP, AVF_FLOW_ITEM_TYPE_END,
715 enum avf_flow_item_type avf_pattern_eth_qinq_ipv4_sctp[] = {
716 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
717 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_SCTP, AVF_FLOW_ITEM_TYPE_END,
720 enum avf_flow_item_type avf_pattern_eth_ipv4_icmp[] = {
721 AVF_FLOW_ITEM_TYPE_ETH,
722 AVF_FLOW_ITEM_TYPE_IPV4,
723 AVF_FLOW_ITEM_TYPE_ICMP,
724 AVF_FLOW_ITEM_TYPE_END,
727 enum avf_flow_item_type avf_pattern_eth_vlan_ipv4_icmp[] = {
728 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV4,
729 AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
732 enum avf_flow_item_type avf_pattern_eth_qinq_ipv4_icmp[] = {
733 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
734 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
737 /* non-tunnel IPv6 */
738 enum avf_flow_item_type avf_pattern_eth_ipv6[] = {
739 AVF_FLOW_ITEM_TYPE_ETH,
740 AVF_FLOW_ITEM_TYPE_IPV6,
741 AVF_FLOW_ITEM_TYPE_END,
744 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6[] = {
745 AVF_FLOW_ITEM_TYPE_ETH,
746 AVF_FLOW_ITEM_TYPE_VLAN,
747 AVF_FLOW_ITEM_TYPE_IPV6,
748 AVF_FLOW_ITEM_TYPE_END,
751 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6[] = {
752 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
753 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
756 enum avf_flow_item_type avf_pattern_eth_ipv6_frag_ext[] = {
757 AVF_FLOW_ITEM_TYPE_ETH,
758 AVF_FLOW_ITEM_TYPE_IPV6,
759 AVF_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
760 AVF_FLOW_ITEM_TYPE_END,
763 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6_frag_ext[] = {
764 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN,
765 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
766 AVF_FLOW_ITEM_TYPE_END,
769 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6_frag_ext[] = {
770 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN,
771 AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV6,
772 AVF_FLOW_ITEM_TYPE_IPV6_FRAG_EXT, AVF_FLOW_ITEM_TYPE_END,
775 enum avf_flow_item_type avf_pattern_eth_ipv6_udp[] = {
776 AVF_FLOW_ITEM_TYPE_ETH,
777 AVF_FLOW_ITEM_TYPE_IPV6,
778 AVF_FLOW_ITEM_TYPE_UDP,
779 AVF_FLOW_ITEM_TYPE_END,
782 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6_udp[] = {
783 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV6,
784 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
787 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6_udp[] = {
788 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
789 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
792 enum avf_flow_item_type avf_pattern_eth_ipv6_tcp[] = {
793 AVF_FLOW_ITEM_TYPE_ETH,
794 AVF_FLOW_ITEM_TYPE_IPV6,
795 AVF_FLOW_ITEM_TYPE_TCP,
796 AVF_FLOW_ITEM_TYPE_END,
799 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6_tcp[] = {
800 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV6,
801 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
804 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6_tcp[] = {
805 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
806 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
809 enum avf_flow_item_type avf_pattern_eth_ipv6_sctp[] = {
810 AVF_FLOW_ITEM_TYPE_ETH,
811 AVF_FLOW_ITEM_TYPE_IPV6,
812 AVF_FLOW_ITEM_TYPE_SCTP,
813 AVF_FLOW_ITEM_TYPE_END,
816 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6_sctp[] = {
817 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV6,
818 AVF_FLOW_ITEM_TYPE_SCTP, AVF_FLOW_ITEM_TYPE_END,
821 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6_sctp[] = {
822 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
823 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_SCTP, AVF_FLOW_ITEM_TYPE_END,
826 enum avf_flow_item_type avf_pattern_eth_ipv6_icmp6[] = {
827 AVF_FLOW_ITEM_TYPE_ETH,
828 AVF_FLOW_ITEM_TYPE_IPV6,
829 AVF_FLOW_ITEM_TYPE_ICMP6,
830 AVF_FLOW_ITEM_TYPE_END,
833 enum avf_flow_item_type avf_pattern_eth_vlan_ipv6_icmp6[] = {
834 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_IPV6,
835 AVF_FLOW_ITEM_TYPE_ICMP6, AVF_FLOW_ITEM_TYPE_END,
838 enum avf_flow_item_type avf_pattern_eth_qinq_ipv6_icmp6[] = {
839 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_VLAN, AVF_FLOW_ITEM_TYPE_VLAN,
840 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_ICMP6, AVF_FLOW_ITEM_TYPE_END,
844 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpc[] = {
845 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
846 AVF_FLOW_ITEM_TYPE_GTPC, AVF_FLOW_ITEM_TYPE_END,
850 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu[] = {
851 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
852 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_END,
855 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh[] = {
856 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
857 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
861 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpc[] = {
862 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
863 AVF_FLOW_ITEM_TYPE_GTPC, AVF_FLOW_ITEM_TYPE_END,
867 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu[] = {
868 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
869 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_END,
872 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh[] = {
873 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
874 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
878 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv4[] = {
879 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
880 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
883 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv4_udp[] = {
884 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
885 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
886 AVF_FLOW_ITEM_TYPE_END,
889 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv4_tcp[] = {
890 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
891 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
892 AVF_FLOW_ITEM_TYPE_END,
895 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv4_icmp[] = {
896 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
897 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_ICMP,
898 AVF_FLOW_ITEM_TYPE_END,
901 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu[] = {
902 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
903 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
904 AVF_FLOW_ITEM_TYPE_END,
907 /* IPV4 GRE IPv4 UDP GTPU IPv4*/
908 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4[] = {
909 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
910 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
911 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
914 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_udp[] = {
915 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
916 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
917 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
920 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_tcp[] = {
921 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
922 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
923 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
926 /* IPV4 GRE IPv4 UDP GTPU IPv6*/
927 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6[] = {
928 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
929 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
930 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
933 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_udp[] = {
934 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
935 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
936 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
939 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_tcp[] = {
940 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
941 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
942 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
945 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu[] = {
946 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
947 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
948 AVF_FLOW_ITEM_TYPE_END,
951 /* IPV4 GRE IPv6 UDP GTPU IPv4*/
952 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4[] = {
953 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
954 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
955 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
958 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_udp[] = {
959 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
960 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
961 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
964 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_tcp[] = {
965 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
966 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
967 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
970 /* IPV4 GRE IPv6 UDP GTPU IPv6*/
971 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6[] = {
972 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
973 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
974 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
977 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_udp[] = {
978 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
979 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
980 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
983 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_tcp[] = {
984 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
985 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
986 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
989 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu[] = {
990 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
991 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
992 AVF_FLOW_ITEM_TYPE_END,
995 /* IPV6 GRE IPv4 UDP GTPU IPv4*/
996 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4[] = {
997 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
998 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
999 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1002 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_udp[] = {
1003 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1004 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1005 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1008 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_tcp[] = {
1009 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1010 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1011 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1014 /* IPV4 GRE IPv4 UDP GTPU IPv6*/
1015 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6[] = {
1016 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1017 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1018 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1021 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_udp[] = {
1022 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1023 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1024 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1027 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_tcp[] = {
1028 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1029 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1030 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1033 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu[] = {
1034 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1035 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1036 AVF_FLOW_ITEM_TYPE_END,
1039 /* IPV6 GRE IPv6 UDP GTPU IPv4*/
1040 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4[] = {
1041 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1042 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1043 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1046 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_udp[] = {
1047 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1048 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1049 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1052 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_tcp[] = {
1053 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1054 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1055 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1058 /* IPV6 GRE IPv6 UDP GTPU IPv6*/
1059 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6[] = {
1060 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1061 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1062 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1065 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_udp[] = {
1066 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1067 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1068 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1071 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_tcp[] = {
1072 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1073 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1074 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1077 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh[] = {
1078 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1079 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1080 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
1083 /* IPV4 GRE IPv4 UDP GTPU EH IPv4*/
1084 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4[] = {
1085 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1086 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1087 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1090 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_udp[] = {
1091 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1092 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1093 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1094 AVF_FLOW_ITEM_TYPE_END,
1097 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp[] = {
1098 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1099 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1100 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
1101 AVF_FLOW_ITEM_TYPE_END,
1104 /* IPV4 GRE IPv4 UDP GTPU IPv6*/
1105 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6[] = {
1106 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1107 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1108 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1111 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_udp[] = {
1112 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1113 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1114 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1115 AVF_FLOW_ITEM_TYPE_END,
1118 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp[] = {
1119 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1120 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1121 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1122 AVF_FLOW_ITEM_TYPE_END,
1125 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh[] = {
1126 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1127 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1128 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
1131 /* IPV4 GRE IPv6 UDP GTPU EH IPv4*/
1132 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4[] = {
1133 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1134 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1135 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1138 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_udp[] = {
1139 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1140 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1141 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1142 AVF_FLOW_ITEM_TYPE_END,
1145 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp[] = {
1146 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1147 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1148 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
1149 AVF_FLOW_ITEM_TYPE_END,
1152 /* IPV4 GRE IPv6 UDP GTPU EH IPv6*/
1153 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6[] = {
1154 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1155 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1156 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1159 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_udp[] = {
1160 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1161 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1162 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1163 AVF_FLOW_ITEM_TYPE_END,
1166 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp[] = {
1167 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1168 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1169 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1170 AVF_FLOW_ITEM_TYPE_END,
1173 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh[] = {
1174 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1175 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1176 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
1179 /* IPV6 GRE IPv4 UDP GTPU EH IPv4*/
1180 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4[] = {
1181 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1182 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1183 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1186 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_udp[] = {
1187 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1188 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1189 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1190 AVF_FLOW_ITEM_TYPE_END,
1193 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp[] = {
1194 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1195 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1196 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
1197 AVF_FLOW_ITEM_TYPE_END,
1200 /* IPV4 GRE IPv4 UDP GTPU EH IPv6*/
1201 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6[] = {
1202 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1203 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1204 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1207 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_udp[] = {
1208 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1209 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1210 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1211 AVF_FLOW_ITEM_TYPE_END,
1214 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp[] = {
1215 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1216 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1217 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1218 AVF_FLOW_ITEM_TYPE_END,
1221 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh[] = {
1222 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1223 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1224 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_END,
1227 /* IPV6 GRE IPv6 UDP GTPU EH IPv4*/
1228 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4[] = {
1229 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1230 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1231 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1234 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_udp[] = {
1235 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1236 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1237 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1238 AVF_FLOW_ITEM_TYPE_END,
1241 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp[] = {
1242 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1243 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1244 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
1245 AVF_FLOW_ITEM_TYPE_END,
1248 /* IPV6 GRE IPv6 UDP GTPU EH IPv6*/
1249 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6[] = {
1250 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1251 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1252 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1255 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_udp[] = {
1256 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1257 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1258 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1259 AVF_FLOW_ITEM_TYPE_END,
1262 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp[] = {
1263 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1264 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_GTPU,
1265 AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1266 AVF_FLOW_ITEM_TYPE_END,
1269 /* IPV4 GTPU IPv6 */
1270 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv6[] = {
1271 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1272 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1275 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv6_udp[] = {
1276 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1277 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1278 AVF_FLOW_ITEM_TYPE_END,
1281 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv6_tcp[] = {
1282 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1283 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1284 AVF_FLOW_ITEM_TYPE_END,
1287 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_ipv6_icmp[] = {
1288 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1289 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_ICMP,
1290 AVF_FLOW_ITEM_TYPE_END,
1293 /* IPV6 GTPU IPv4 */
1294 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv4[] = {
1295 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1296 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1299 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv4_udp[] = {
1300 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1301 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1302 AVF_FLOW_ITEM_TYPE_END,
1305 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv4_tcp[] = {
1306 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1307 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP,
1308 AVF_FLOW_ITEM_TYPE_END,
1311 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv4_icmp[] = {
1312 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1313 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_ICMP,
1314 AVF_FLOW_ITEM_TYPE_END,
1317 /* IPV6 GTPU IPv6 */
1318 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv6[] = {
1319 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1320 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1323 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv6_udp[] = {
1324 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1325 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1326 AVF_FLOW_ITEM_TYPE_END,
1329 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv6_tcp[] = {
1330 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1331 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP,
1332 AVF_FLOW_ITEM_TYPE_END,
1335 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_ipv6_icmp[] = {
1336 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1337 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_ICMP,
1338 AVF_FLOW_ITEM_TYPE_END,
1341 /* IPV4 GTPU EH IPv4 */
1342 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv4[] = {
1343 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1344 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1345 AVF_FLOW_ITEM_TYPE_END,
1348 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv4_udp[] = {
1349 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1350 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1351 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1354 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp[] = {
1355 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1356 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1357 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1360 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv4_icmp[] = {
1361 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1362 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1363 AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
1366 /* IPV4 GTPU EH IPv6 */
1367 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv6[] = {
1368 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1369 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1370 AVF_FLOW_ITEM_TYPE_END,
1373 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv6_udp[] = {
1374 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1375 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1376 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1379 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp[] = {
1380 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1381 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1382 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1385 enum avf_flow_item_type avf_pattern_eth_ipv4_gtpu_eh_ipv6_icmp[] = {
1386 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1387 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1388 AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
1391 /* IPV6 GTPU EH IPv4 */
1392 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv4[] = {
1393 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1394 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1395 AVF_FLOW_ITEM_TYPE_END,
1398 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv4_udp[] = {
1399 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1400 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1401 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1404 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp[] = {
1405 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1406 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1407 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1410 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv4_icmp[] = {
1411 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1412 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV4,
1413 AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
1416 /* IPV6 GTPU EH IPv6 */
1417 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv6[] = {
1418 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1419 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1420 AVF_FLOW_ITEM_TYPE_END,
1423 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv6_udp[] = {
1424 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1425 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1426 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1429 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp[] = {
1430 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1431 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1432 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1435 enum avf_flow_item_type avf_pattern_eth_ipv6_gtpu_eh_ipv6_icmp[] = {
1436 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1437 AVF_FLOW_ITEM_TYPE_GTPU, AVF_FLOW_ITEM_TYPE_GTP_PSC, AVF_FLOW_ITEM_TYPE_IPV6,
1438 AVF_FLOW_ITEM_TYPE_ICMP, AVF_FLOW_ITEM_TYPE_END,
1442 enum avf_flow_item_type avf_pattern_eth_ipv4_esp[] = {
1443 AVF_FLOW_ITEM_TYPE_ETH,
1444 AVF_FLOW_ITEM_TYPE_IPV4,
1445 AVF_FLOW_ITEM_TYPE_ESP,
1446 AVF_FLOW_ITEM_TYPE_END,
1449 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_esp[] = {
1450 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1451 AVF_FLOW_ITEM_TYPE_ESP, AVF_FLOW_ITEM_TYPE_END,
1454 enum avf_flow_item_type avf_pattern_eth_ipv6_esp[] = {
1455 AVF_FLOW_ITEM_TYPE_ETH,
1456 AVF_FLOW_ITEM_TYPE_IPV6,
1457 AVF_FLOW_ITEM_TYPE_ESP,
1458 AVF_FLOW_ITEM_TYPE_END,
1461 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_esp[] = {
1462 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1463 AVF_FLOW_ITEM_TYPE_ESP, AVF_FLOW_ITEM_TYPE_END,
1467 enum avf_flow_item_type avf_pattern_eth_ipv4_ah[] = {
1468 AVF_FLOW_ITEM_TYPE_ETH,
1469 AVF_FLOW_ITEM_TYPE_IPV4,
1470 AVF_FLOW_ITEM_TYPE_AH,
1471 AVF_FLOW_ITEM_TYPE_END,
1474 enum avf_flow_item_type avf_pattern_eth_ipv6_ah[] = {
1475 AVF_FLOW_ITEM_TYPE_ETH,
1476 AVF_FLOW_ITEM_TYPE_IPV6,
1477 AVF_FLOW_ITEM_TYPE_AH,
1478 AVF_FLOW_ITEM_TYPE_END,
1482 enum avf_flow_item_type avf_pattern_eth_ipv4_l2tpv3[] = {
1483 AVF_FLOW_ITEM_TYPE_ETH,
1484 AVF_FLOW_ITEM_TYPE_IPV4,
1485 AVF_FLOW_ITEM_TYPE_L2TPV3OIP,
1486 AVF_FLOW_ITEM_TYPE_END,
1489 enum avf_flow_item_type avf_pattern_eth_ipv6_l2tpv3[] = {
1490 AVF_FLOW_ITEM_TYPE_ETH,
1491 AVF_FLOW_ITEM_TYPE_IPV6,
1492 AVF_FLOW_ITEM_TYPE_L2TPV3OIP,
1493 AVF_FLOW_ITEM_TYPE_END,
1497 enum avf_flow_item_type avf_pattern_eth_ipv4_pfcp[] = {
1498 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1499 AVF_FLOW_ITEM_TYPE_PFCP, AVF_FLOW_ITEM_TYPE_END,
1502 enum avf_flow_item_type avf_pattern_eth_ipv6_pfcp[] = {
1503 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1504 AVF_FLOW_ITEM_TYPE_PFCP, AVF_FLOW_ITEM_TYPE_END,
1508 enum avf_flow_item_type avf_pattern_eth_ecpri[] = {
1509 AVF_FLOW_ITEM_TYPE_ETH,
1510 AVF_FLOW_ITEM_TYPE_ECPRI,
1511 AVF_FLOW_ITEM_TYPE_END,
1514 enum avf_flow_item_type avf_pattern_eth_ipv4_ecpri[] = {
1515 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1516 AVF_FLOW_ITEM_TYPE_ECPRI, AVF_FLOW_ITEM_TYPE_END,
1520 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4[] = {
1521 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1522 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1525 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6[] = {
1526 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1527 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1530 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4[] = {
1531 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1532 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_END,
1535 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6[] = {
1536 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1537 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_END,
1540 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_tcp[] = {
1541 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1542 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1545 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv4_udp[] = {
1546 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1547 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1550 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_tcp[] = {
1551 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1552 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1555 enum avf_flow_item_type avf_pattern_eth_ipv4_gre_ipv6_udp[] = {
1556 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_GRE,
1557 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1560 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_tcp[] = {
1561 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1562 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1565 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv4_udp[] = {
1566 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1567 AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1570 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_tcp[] = {
1571 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1572 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1575 enum avf_flow_item_type avf_pattern_eth_ipv6_gre_ipv6_udp[] = {
1576 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_GRE,
1577 AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1580 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2[] = {
1581 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1582 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_END,
1585 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp[] = {
1586 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1587 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_END,
1590 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2[] = {
1591 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1592 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_END,
1595 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp[] = {
1596 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1597 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_END,
1600 /* PPPoL2TPv2oUDP */
1601 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4[] = {
1602 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1603 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1604 AVF_FLOW_ITEM_TYPE_END,
1607 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6[] = {
1608 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1609 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1610 AVF_FLOW_ITEM_TYPE_END,
1613 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_udp[] = {
1614 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1615 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1616 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1619 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_tcp[] = {
1620 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1621 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1622 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1625 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_udp[] = {
1626 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1627 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1628 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1631 enum avf_flow_item_type avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp[] = {
1632 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV4, AVF_FLOW_ITEM_TYPE_UDP,
1633 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1634 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1637 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4[] = {
1638 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1639 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1640 AVF_FLOW_ITEM_TYPE_END,
1643 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6[] = {
1644 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1645 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1646 AVF_FLOW_ITEM_TYPE_END,
1649 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp[] = {
1650 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1651 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1652 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1655 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp[] = {
1656 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1657 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV4,
1658 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1661 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp[] = {
1662 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1663 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1664 AVF_FLOW_ITEM_TYPE_UDP, AVF_FLOW_ITEM_TYPE_END,
1667 enum avf_flow_item_type avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp[] = {
1668 AVF_FLOW_ITEM_TYPE_ETH, AVF_FLOW_ITEM_TYPE_IPV6, AVF_FLOW_ITEM_TYPE_UDP,
1669 AVF_FLOW_ITEM_TYPE_L2TPV2, AVF_FLOW_ITEM_TYPE_PPP, AVF_FLOW_ITEM_TYPE_IPV6,
1670 AVF_FLOW_ITEM_TYPE_TCP, AVF_FLOW_ITEM_TYPE_END,
1673 static struct avf_pattern_match_item avf_hash_pattern_list[] = {
1675 { avf_pattern_raw, AVF_INSET_NONE, NULL },
1676 { avf_pattern_eth_ipv4, AVF_RSS_TYPE_OUTER_IPV4, &outer_ipv4_tmplt },
1677 { avf_pattern_eth_ipv4_udp, AVF_RSS_TYPE_OUTER_IPV4_UDP,
1678 &outer_ipv4_udp_tmplt },
1679 { avf_pattern_eth_ipv4_tcp, AVF_RSS_TYPE_OUTER_IPV4_TCP,
1680 &outer_ipv4_tcp_tmplt },
1681 { avf_pattern_eth_ipv4_sctp, AVF_RSS_TYPE_OUTER_IPV4_SCTP,
1682 &outer_ipv4_sctp_tmplt },
1683 { avf_pattern_eth_vlan_ipv4, AVF_RSS_TYPE_VLAN_IPV4, &outer_ipv4_tmplt },
1684 { avf_pattern_eth_vlan_ipv4_udp, AVF_RSS_TYPE_VLAN_IPV4_UDP,
1685 &outer_ipv4_udp_tmplt },
1686 { avf_pattern_eth_vlan_ipv4_tcp, AVF_RSS_TYPE_VLAN_IPV4_TCP,
1687 &outer_ipv4_tcp_tmplt },
1688 { avf_pattern_eth_vlan_ipv4_sctp, AVF_RSS_TYPE_VLAN_IPV4_SCTP,
1689 &outer_ipv4_sctp_tmplt },
1690 { avf_pattern_eth_ipv4_gtpu, AVF_ETH_RSS_IPV4, &outer_ipv4_udp_tmplt },
1691 { avf_pattern_eth_ipv4_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1692 &inner_ipv4_tmplt },
1693 { avf_pattern_eth_ipv4_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1694 &inner_ipv4_udp_tmplt },
1695 { avf_pattern_eth_ipv4_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1696 &inner_ipv4_tcp_tmplt },
1697 { avf_pattern_eth_ipv6_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1698 &inner_ipv4_tmplt },
1699 { avf_pattern_eth_ipv6_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1700 &inner_ipv4_udp_tmplt },
1701 { avf_pattern_eth_ipv6_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1702 &inner_ipv4_tcp_tmplt },
1703 { avf_pattern_eth_ipv4_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1704 &inner_ipv4_tmplt },
1705 { avf_pattern_eth_ipv4_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1706 &inner_ipv4_udp_tmplt },
1707 { avf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1708 &inner_ipv4_tcp_tmplt },
1709 { avf_pattern_eth_ipv6_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1710 &inner_ipv4_tmplt },
1711 { avf_pattern_eth_ipv6_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1712 &inner_ipv4_udp_tmplt },
1713 { avf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1714 &inner_ipv4_tcp_tmplt },
1715 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1716 &second_inner_ipv4_tmplt },
1717 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1718 &second_inner_ipv4_udp_tmplt },
1719 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1720 &second_inner_ipv4_tcp_tmplt },
1721 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1722 &second_inner_ipv4_tmplt },
1723 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1724 &second_inner_ipv4_udp_tmplt },
1725 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1726 &second_inner_ipv4_tcp_tmplt },
1727 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1728 &second_inner_ipv4_tmplt },
1729 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1730 &second_inner_ipv4_udp_tmplt },
1731 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1732 &second_inner_ipv4_tcp_tmplt },
1733 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1734 &second_inner_ipv4_tmplt },
1735 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1736 &second_inner_ipv4_udp_tmplt },
1737 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1738 &second_inner_ipv4_tcp_tmplt },
1739 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1740 &second_inner_ipv4_tmplt },
1741 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1742 &second_inner_ipv4_udp_tmplt },
1743 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1744 &second_inner_ipv4_tcp_tmplt },
1745 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1746 &second_inner_ipv4_tmplt },
1747 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1748 &second_inner_ipv4_udp_tmplt },
1749 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1750 &second_inner_ipv4_tcp_tmplt },
1751 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1752 &second_inner_ipv4_tmplt },
1753 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1754 &second_inner_ipv4_udp_tmplt },
1755 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1756 &second_inner_ipv4_tcp_tmplt },
1757 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4, AVF_RSS_TYPE_GTPU_IPV4,
1758 &second_inner_ipv4_tmplt },
1759 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_udp, AVF_RSS_TYPE_GTPU_IPV4_UDP,
1760 &second_inner_ipv4_udp_tmplt },
1761 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp, AVF_RSS_TYPE_GTPU_IPV4_TCP,
1762 &second_inner_ipv4_tcp_tmplt },
1763 { avf_pattern_eth_ipv4_esp, AVF_RSS_TYPE_IPV4_ESP, &ipv4_esp_tmplt },
1764 { avf_pattern_eth_ipv4_udp_esp, AVF_RSS_TYPE_IPV4_ESP, &ipv4_udp_esp_tmplt },
1765 { avf_pattern_eth_ipv4_ah, AVF_RSS_TYPE_IPV4_AH, &ipv4_ah_tmplt },
1766 { avf_pattern_eth_ipv4_l2tpv3, AVF_RSS_TYPE_IPV4_L2TPV3,
1767 &ipv4_l2tpv3_tmplt },
1768 { avf_pattern_eth_ipv4_pfcp, AVF_RSS_TYPE_IPV4_PFCP, &ipv4_pfcp_tmplt },
1769 { avf_pattern_eth_ipv4_gtpc, AVF_ETH_RSS_IPV4, &ipv4_udp_gtpc_tmplt },
1770 { avf_pattern_eth_ecpri, AVF_ETH_RSS_ECPRI, ð_ecpri_tmplt },
1771 { avf_pattern_eth_ipv4_ecpri, AVF_ETH_RSS_ECPRI, &ipv4_ecpri_tmplt },
1772 { avf_pattern_eth_ipv4_gre_ipv4, AVF_RSS_TYPE_INNER_IPV4,
1773 &inner_ipv4_tmplt },
1774 { avf_pattern_eth_ipv6_gre_ipv4, AVF_RSS_TYPE_INNER_IPV4,
1775 &inner_ipv4_tmplt },
1776 { avf_pattern_eth_ipv4_gre_ipv4_tcp, AVF_RSS_TYPE_INNER_IPV4_TCP,
1777 &inner_ipv4_tcp_tmplt },
1778 { avf_pattern_eth_ipv6_gre_ipv4_tcp, AVF_RSS_TYPE_INNER_IPV4_TCP,
1779 &inner_ipv4_tcp_tmplt },
1780 { avf_pattern_eth_ipv4_gre_ipv4_udp, AVF_RSS_TYPE_INNER_IPV4_UDP,
1781 &inner_ipv4_udp_tmplt },
1782 { avf_pattern_eth_ipv6_gre_ipv4_udp, AVF_RSS_TYPE_INNER_IPV4_UDP,
1783 &inner_ipv4_udp_tmplt },
1784 { avf_pattern_eth_ipv4_udp_l2tpv2, AVF_RSS_TYPE_ETH_L2TPV2,
1785 &ipv4_l2tpv2_tmplt },
1786 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp, AVF_RSS_TYPE_ETH_L2TPV2,
1787 &ipv4_l2tpv2_ppp_tmplt },
1788 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4, AVF_RSS_TYPE_INNER_IPV4,
1789 &udp_l2tpv2_ppp_ipv4_tmplt },
1790 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_udp, AVF_RSS_TYPE_INNER_IPV4_UDP,
1791 &udp_l2tpv2_ppp_ipv4_udp_tmplt },
1792 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_tcp, AVF_RSS_TYPE_INNER_IPV4_TCP,
1793 &udp_l2tpv2_ppp_ipv4_tcp_tmplt },
1794 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4, AVF_RSS_TYPE_INNER_IPV4,
1795 &udp_l2tpv2_ppp_ipv4_tmplt },
1796 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp, AVF_RSS_TYPE_INNER_IPV4_UDP,
1797 &udp_l2tpv2_ppp_ipv4_udp_tmplt },
1798 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp, AVF_RSS_TYPE_INNER_IPV4_TCP,
1799 &udp_l2tpv2_ppp_ipv4_tcp_tmplt },
1802 { avf_pattern_eth_ipv6, AVF_RSS_TYPE_OUTER_IPV6, &outer_ipv6_tmplt },
1803 { avf_pattern_eth_ipv6_frag_ext, AVF_RSS_TYPE_OUTER_IPV6_FRAG,
1804 &outer_ipv6_frag_tmplt },
1805 { avf_pattern_eth_ipv6_udp, AVF_RSS_TYPE_OUTER_IPV6_UDP,
1806 &outer_ipv6_udp_tmplt },
1807 { avf_pattern_eth_ipv6_tcp, AVF_RSS_TYPE_OUTER_IPV6_TCP,
1808 &outer_ipv6_tcp_tmplt },
1809 { avf_pattern_eth_ipv6_sctp, AVF_RSS_TYPE_OUTER_IPV6_SCTP,
1810 &outer_ipv6_sctp_tmplt },
1811 { avf_pattern_eth_vlan_ipv6, AVF_RSS_TYPE_VLAN_IPV6, &outer_ipv6_tmplt },
1812 { avf_pattern_eth_vlan_ipv6_frag_ext, AVF_RSS_TYPE_OUTER_IPV6_FRAG,
1813 &outer_ipv6_frag_tmplt },
1814 { avf_pattern_eth_vlan_ipv6_udp, AVF_RSS_TYPE_VLAN_IPV6_UDP,
1815 &outer_ipv6_udp_tmplt },
1816 { avf_pattern_eth_vlan_ipv6_tcp, AVF_RSS_TYPE_VLAN_IPV6_TCP,
1817 &outer_ipv6_tcp_tmplt },
1818 { avf_pattern_eth_vlan_ipv6_sctp, AVF_RSS_TYPE_VLAN_IPV6_SCTP,
1819 &outer_ipv6_sctp_tmplt },
1820 { avf_pattern_eth_ipv6_gtpu, AVF_ETH_RSS_IPV6, &outer_ipv6_udp_tmplt },
1821 { avf_pattern_eth_ipv4_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1822 &inner_ipv6_tmplt },
1823 { avf_pattern_eth_ipv4_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1824 &inner_ipv6_udp_tmplt },
1825 { avf_pattern_eth_ipv4_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1826 &inner_ipv6_tcp_tmplt },
1827 { avf_pattern_eth_ipv6_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1828 &inner_ipv6_tmplt },
1829 { avf_pattern_eth_ipv6_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1830 &inner_ipv6_udp_tmplt },
1831 { avf_pattern_eth_ipv6_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1832 &inner_ipv6_tcp_tmplt },
1833 { avf_pattern_eth_ipv4_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1834 &inner_ipv6_tmplt },
1835 { avf_pattern_eth_ipv4_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1836 &inner_ipv6_udp_tmplt },
1837 { avf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1838 &inner_ipv6_tcp_tmplt },
1839 { avf_pattern_eth_ipv6_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1840 &inner_ipv6_tmplt },
1841 { avf_pattern_eth_ipv6_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1842 &inner_ipv6_udp_tmplt },
1843 { avf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1844 &inner_ipv6_tcp_tmplt },
1845 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1846 &second_inner_ipv6_tmplt },
1847 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1848 &second_inner_ipv6_udp_tmplt },
1849 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1850 &second_inner_ipv6_tcp_tmplt },
1851 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1852 &second_inner_ipv6_tmplt },
1853 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1854 &second_inner_ipv6_udp_tmplt },
1855 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1856 &second_inner_ipv6_tcp_tmplt },
1857 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1858 &second_inner_ipv6_tmplt },
1859 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1860 &second_inner_ipv6_udp_tmplt },
1861 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1862 &second_inner_ipv6_tcp_tmplt },
1863 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1864 &second_inner_ipv6_tmplt },
1865 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1866 &second_inner_ipv6_udp_tmplt },
1867 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1868 &second_inner_ipv6_tcp_tmplt },
1869 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1870 &second_inner_ipv6_tmplt },
1871 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1872 &second_inner_ipv6_udp_tmplt },
1873 { avf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1874 &second_inner_ipv6_tcp_tmplt },
1875 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1876 &second_inner_ipv6_tmplt },
1877 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1878 &second_inner_ipv6_udp_tmplt },
1879 { avf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1880 &second_inner_ipv6_tcp_tmplt },
1881 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1882 &second_inner_ipv6_tmplt },
1883 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1884 &second_inner_ipv6_udp_tmplt },
1885 { avf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1886 &second_inner_ipv6_tcp_tmplt },
1887 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6, AVF_RSS_TYPE_GTPU_IPV6,
1888 &second_inner_ipv6_tmplt },
1889 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_udp, AVF_RSS_TYPE_GTPU_IPV6_UDP,
1890 &second_inner_ipv6_udp_tmplt },
1891 { avf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp, AVF_RSS_TYPE_GTPU_IPV6_TCP,
1892 &second_inner_ipv6_tcp_tmplt },
1893 { avf_pattern_eth_ipv6_esp, AVF_RSS_TYPE_IPV6_ESP, &ipv6_esp_tmplt },
1894 { avf_pattern_eth_ipv6_udp_esp, AVF_RSS_TYPE_IPV6_ESP, &ipv6_udp_esp_tmplt },
1895 { avf_pattern_eth_ipv6_ah, AVF_RSS_TYPE_IPV6_AH, &ipv6_ah_tmplt },
1896 { avf_pattern_eth_ipv6_l2tpv3, AVF_RSS_TYPE_IPV6_L2TPV3,
1897 &ipv6_l2tpv3_tmplt },
1898 { avf_pattern_eth_ipv6_pfcp, AVF_RSS_TYPE_IPV6_PFCP, &ipv6_pfcp_tmplt },
1899 { avf_pattern_eth_ipv6_gtpc, AVF_ETH_RSS_IPV6, &ipv6_udp_gtpc_tmplt },
1900 { avf_pattern_eth_ipv4_gre_ipv6, AVF_RSS_TYPE_INNER_IPV6,
1901 &inner_ipv6_tmplt },
1902 { avf_pattern_eth_ipv6_gre_ipv6, AVF_RSS_TYPE_INNER_IPV6,
1903 &inner_ipv6_tmplt },
1904 { avf_pattern_eth_ipv4_gre_ipv6_tcp, AVF_RSS_TYPE_INNER_IPV6_TCP,
1905 &inner_ipv6_tcp_tmplt },
1906 { avf_pattern_eth_ipv6_gre_ipv6_tcp, AVF_RSS_TYPE_INNER_IPV6_TCP,
1907 &inner_ipv6_tcp_tmplt },
1908 { avf_pattern_eth_ipv4_gre_ipv6_udp, AVF_RSS_TYPE_INNER_IPV6_UDP,
1909 &inner_ipv6_udp_tmplt },
1910 { avf_pattern_eth_ipv6_gre_ipv6_udp, AVF_RSS_TYPE_INNER_IPV6_UDP,
1911 &inner_ipv6_udp_tmplt },
1912 { avf_pattern_eth_ipv6_udp_l2tpv2, AVF_RSS_TYPE_ETH_L2TPV2,
1913 &ipv6_l2tpv2_tmplt },
1914 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp, AVF_RSS_TYPE_ETH_L2TPV2,
1915 &ipv6_l2tpv2_ppp_tmplt },
1916 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6, AVF_RSS_TYPE_INNER_IPV6,
1917 &udp_l2tpv2_ppp_ipv6_tmplt },
1918 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_udp, AVF_RSS_TYPE_INNER_IPV6_UDP,
1919 &udp_l2tpv2_ppp_ipv6_udp_tmplt },
1920 { avf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp, AVF_RSS_TYPE_INNER_IPV6_TCP,
1921 &udp_l2tpv2_ppp_ipv6_tcp_tmplt },
1922 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6, AVF_RSS_TYPE_INNER_IPV6,
1923 &udp_l2tpv2_ppp_ipv6_tmplt },
1924 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp, AVF_RSS_TYPE_INNER_IPV6_UDP,
1925 &udp_l2tpv2_ppp_ipv6_udp_tmplt },
1926 { avf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp, AVF_RSS_TYPE_INNER_IPV6_TCP,
1927 &udp_l2tpv2_ppp_ipv6_tcp_tmplt },
1932 avf_eth_rss_hf_refine (u64 rss_hf)
1934 if ((rss_hf & AVF_ETH_RSS_L3_SRC_ONLY) && (rss_hf & AVF_ETH_RSS_L3_DST_ONLY))
1935 rss_hf &= ~(AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY);
1937 if ((rss_hf & AVF_ETH_RSS_L4_SRC_ONLY) && (rss_hf & AVF_ETH_RSS_L4_DST_ONLY))
1938 rss_hf &= ~(AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY);
1944 avf_any_invalid_rss_type (enum avf_eth_hash_function rss_func, u64 rss_type,
1950 * Check if l3/l4 SRC/DST_ONLY is set for SYMMETRIC_TOEPLITZ
1953 if (rss_func == AVF_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ)
1955 if (rss_type & (AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY |
1956 AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY))
1960 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_IPV6 |
1961 AVF_ETH_RSS_NONFRAG_IPV4_UDP | AVF_ETH_RSS_NONFRAG_IPV6_UDP |
1962 AVF_ETH_RSS_NONFRAG_IPV4_TCP | AVF_ETH_RSS_NONFRAG_IPV6_TCP |
1963 AVF_ETH_RSS_NONFRAG_IPV4_SCTP | AVF_ETH_RSS_NONFRAG_IPV6_SCTP)))
1967 /* check invalid combination */
1968 for (i = 0; i < _vec_len (invalid_rss_comb); i++)
1970 if (__builtin_popcountll (rss_type & invalid_rss_comb[i]) > 1)
1974 /* check invalid RSS attribute */
1975 for (i = 0; i < _vec_len (rss_attr_to_valid_type); i++)
1977 struct rss_attr_type *rat = &rss_attr_to_valid_type[i];
1979 if (rat->attr & rss_type && !(rat->type & rss_type))
1983 /* check not allowed RSS type */
1984 rss_type &= ~VALID_RSS_ATTR;
1986 return ((rss_type & allow_rss_type) != rss_type);
1990 avf_rss_cfg_create (struct virtchnl_rss_cfg **rss_cfg, int tunnel_level)
1992 *rss_cfg = clib_mem_alloc (sizeof (**rss_cfg));
1994 clib_memset (*rss_cfg, 0, sizeof (**rss_cfg));
1996 (*rss_cfg)->proto_hdrs.tunnel_level = tunnel_level;
2002 avf_rss_rcfg_destroy (struct virtchnl_rss_cfg *rss_cfg)
2004 clib_mem_free (rss_cfg);
2009 /* refine proto hdrs base on gtpu rss type */
2011 avf_refine_proto_hdrs_gtpu (struct virtchnl_proto_hdrs *proto_hdrs,
2014 struct virtchnl_proto_hdr *hdr;
2017 if (!(rss_type & AVF_ETH_RSS_GTPU))
2020 for (i = 0; i < proto_hdrs->count; i++)
2022 hdr = &proto_hdrs->proto_hdr[i];
2025 case VIRTCHNL_PROTO_HDR_GTPU_IP:
2026 REFINE_PROTO_FLD (ADD, GTPU_IP_TEID);
2035 avf_hash_add_fragment_hdr (struct virtchnl_proto_hdrs *hdrs, int layer)
2037 struct virtchnl_proto_hdr *hdr1;
2038 struct virtchnl_proto_hdr *hdr2;
2041 if (layer < 0 || layer > hdrs->count)
2044 /* shift headers layer */
2045 for (i = hdrs->count; i >= layer; i--)
2047 hdr1 = &hdrs->proto_hdr[i];
2048 hdr2 = &hdrs->proto_hdr[i - 1];
2052 /* adding dummy fragment header */
2053 hdr1 = &hdrs->proto_hdr[layer];
2054 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, IPV4_FRAG);
2055 hdrs->count = ++layer;
2058 /* refine proto hdrs base on l2, l3, l4 rss type */
2060 avf_refine_proto_hdrs_l234 (struct virtchnl_proto_hdrs *proto_hdrs,
2063 struct virtchnl_proto_hdr *hdr;
2066 for (i = 0; i < proto_hdrs->count; i++)
2068 hdr = &proto_hdrs->proto_hdr[i];
2071 case VIRTCHNL_PROTO_HDR_ETH:
2072 if (!(rss_type & AVF_ETH_RSS_ETH))
2073 hdr->field_selector = 0;
2074 else if (rss_type & AVF_ETH_RSS_L2_SRC_ONLY)
2075 REFINE_PROTO_FLD (DEL, ETH_DST);
2076 else if (rss_type & AVF_ETH_RSS_L2_DST_ONLY)
2077 REFINE_PROTO_FLD (DEL, ETH_SRC);
2079 case VIRTCHNL_PROTO_HDR_IPV4:
2081 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_FRAG_IPV4 |
2082 AVF_ETH_RSS_NONFRAG_IPV4_UDP | AVF_ETH_RSS_NONFRAG_IPV4_TCP |
2083 AVF_ETH_RSS_NONFRAG_IPV4_SCTP))
2085 if (rss_type & AVF_ETH_RSS_FRAG_IPV4)
2087 avf_hash_add_fragment_hdr (proto_hdrs, i + 1);
2089 else if (rss_type & AVF_ETH_RSS_L3_SRC_ONLY)
2091 REFINE_PROTO_FLD (DEL, IPV4_DST);
2093 else if (rss_type & AVF_ETH_RSS_L3_DST_ONLY)
2095 REFINE_PROTO_FLD (DEL, IPV4_SRC);
2098 (AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY))
2100 REFINE_PROTO_FLD (DEL, IPV4_DST);
2101 REFINE_PROTO_FLD (DEL, IPV4_SRC);
2106 hdr->field_selector = 0;
2109 if (rss_type & AVF_ETH_RSS_IPV4_CHKSUM)
2110 REFINE_PROTO_FLD (ADD, IPV4_CHKSUM);
2113 case VIRTCHNL_PROTO_HDR_IPV4_FRAG:
2115 (AVF_ETH_RSS_IPV4 | AVF_ETH_RSS_FRAG_IPV4 |
2116 AVF_ETH_RSS_NONFRAG_IPV4_UDP | AVF_ETH_RSS_NONFRAG_IPV4_TCP |
2117 AVF_ETH_RSS_NONFRAG_IPV4_SCTP))
2119 if (rss_type & AVF_ETH_RSS_FRAG_IPV4)
2120 REFINE_PROTO_FLD (ADD, IPV4_FRAG_PKID);
2124 hdr->field_selector = 0;
2127 if (rss_type & AVF_ETH_RSS_IPV4_CHKSUM)
2128 REFINE_PROTO_FLD (ADD, IPV4_CHKSUM);
2131 case VIRTCHNL_PROTO_HDR_IPV6:
2133 (AVF_ETH_RSS_IPV6 | AVF_ETH_RSS_FRAG_IPV6 |
2134 AVF_ETH_RSS_NONFRAG_IPV6_UDP | AVF_ETH_RSS_NONFRAG_IPV6_TCP |
2135 AVF_ETH_RSS_NONFRAG_IPV6_SCTP))
2137 if (rss_type & AVF_ETH_RSS_L3_SRC_ONLY)
2139 REFINE_PROTO_FLD (DEL, IPV6_DST);
2141 else if (rss_type & AVF_ETH_RSS_L3_DST_ONLY)
2143 REFINE_PROTO_FLD (DEL, IPV6_SRC);
2146 (AVF_ETH_RSS_L4_SRC_ONLY | AVF_ETH_RSS_L4_DST_ONLY))
2148 REFINE_PROTO_FLD (DEL, IPV6_DST);
2149 REFINE_PROTO_FLD (DEL, IPV6_SRC);
2154 hdr->field_selector = 0;
2156 if (rss_type & AVF_ETH_RSS_L3_PRE64)
2158 if (REFINE_PROTO_FLD (TEST, IPV6_SRC))
2159 REPALCE_PROTO_FLD (IPV6_SRC, IPV6_PREFIX64_SRC);
2160 if (REFINE_PROTO_FLD (TEST, IPV6_DST))
2161 REPALCE_PROTO_FLD (IPV6_DST, IPV6_PREFIX64_DST);
2164 case VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG:
2165 if (rss_type & AVF_ETH_RSS_FRAG_IPV6)
2166 REFINE_PROTO_FLD (ADD, IPV6_EH_FRAG_PKID);
2168 hdr->field_selector = 0;
2171 case VIRTCHNL_PROTO_HDR_UDP:
2173 (AVF_ETH_RSS_NONFRAG_IPV4_UDP | AVF_ETH_RSS_NONFRAG_IPV6_UDP))
2175 if (rss_type & AVF_ETH_RSS_L4_SRC_ONLY)
2176 REFINE_PROTO_FLD (DEL, UDP_DST_PORT);
2177 else if (rss_type & AVF_ETH_RSS_L4_DST_ONLY)
2178 REFINE_PROTO_FLD (DEL, UDP_SRC_PORT);
2180 (AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY))
2181 hdr->field_selector = 0;
2185 hdr->field_selector = 0;
2188 if (rss_type & AVF_ETH_RSS_L4_CHKSUM)
2189 REFINE_PROTO_FLD (ADD, UDP_CHKSUM);
2191 case VIRTCHNL_PROTO_HDR_TCP:
2193 (AVF_ETH_RSS_NONFRAG_IPV4_TCP | AVF_ETH_RSS_NONFRAG_IPV6_TCP))
2195 if (rss_type & AVF_ETH_RSS_L4_SRC_ONLY)
2196 REFINE_PROTO_FLD (DEL, TCP_DST_PORT);
2197 else if (rss_type & AVF_ETH_RSS_L4_DST_ONLY)
2198 REFINE_PROTO_FLD (DEL, TCP_SRC_PORT);
2200 (AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY))
2201 hdr->field_selector = 0;
2205 hdr->field_selector = 0;
2208 if (rss_type & AVF_ETH_RSS_L4_CHKSUM)
2209 REFINE_PROTO_FLD (ADD, TCP_CHKSUM);
2211 case VIRTCHNL_PROTO_HDR_SCTP:
2213 (AVF_ETH_RSS_NONFRAG_IPV4_SCTP | AVF_ETH_RSS_NONFRAG_IPV6_SCTP))
2215 if (rss_type & AVF_ETH_RSS_L4_SRC_ONLY)
2216 REFINE_PROTO_FLD (DEL, SCTP_DST_PORT);
2217 else if (rss_type & AVF_ETH_RSS_L4_DST_ONLY)
2218 REFINE_PROTO_FLD (DEL, SCTP_SRC_PORT);
2220 (AVF_ETH_RSS_L3_SRC_ONLY | AVF_ETH_RSS_L3_DST_ONLY))
2221 hdr->field_selector = 0;
2225 hdr->field_selector = 0;
2228 if (rss_type & AVF_ETH_RSS_L4_CHKSUM)
2229 REFINE_PROTO_FLD (ADD, SCTP_CHKSUM);
2231 case VIRTCHNL_PROTO_HDR_S_VLAN:
2232 if (!(rss_type & AVF_ETH_RSS_S_VLAN))
2233 hdr->field_selector = 0;
2235 case VIRTCHNL_PROTO_HDR_C_VLAN:
2236 if (!(rss_type & AVF_ETH_RSS_C_VLAN))
2237 hdr->field_selector = 0;
2239 case VIRTCHNL_PROTO_HDR_L2TPV3:
2240 if (!(rss_type & AVF_ETH_RSS_L2TPV3))
2241 hdr->field_selector = 0;
2243 case VIRTCHNL_PROTO_HDR_ESP:
2244 if (!(rss_type & AVF_ETH_RSS_ESP))
2245 hdr->field_selector = 0;
2247 case VIRTCHNL_PROTO_HDR_AH:
2248 if (!(rss_type & AVF_ETH_RSS_AH))
2249 hdr->field_selector = 0;
2251 case VIRTCHNL_PROTO_HDR_PFCP:
2252 if (!(rss_type & AVF_ETH_RSS_PFCP))
2253 hdr->field_selector = 0;
2255 case VIRTCHNL_PROTO_HDR_ECPRI:
2256 if (!(rss_type & AVF_ETH_RSS_ECPRI))
2257 hdr->field_selector = 0;
2259 case VIRTCHNL_PROTO_HDR_L2TPV2:
2260 if (!(rss_type & AVF_ETH_RSS_L2TPV2))
2261 hdr->field_selector = 0;
2270 avf_refine_proto_hdrs_by_pattern (struct virtchnl_proto_hdrs *proto_hdrs,
2273 struct virtchnl_proto_hdr *hdr1;
2274 struct virtchnl_proto_hdr *hdr2;
2275 int i, shift_count = 1;
2276 int tun_lvl = proto_hdrs->tunnel_level;
2278 if (!(phint & AVF_PHINT_GTPU_MSK) && !(phint & AVF_PHINT_GRE))
2283 if (phint & AVF_PHINT_LAYERS_MSK)
2286 /* shift headers layer */
2287 for (i = proto_hdrs->count - 1 + shift_count; i > shift_count - 1; i--)
2289 hdr1 = &proto_hdrs->proto_hdr[i];
2290 hdr2 = &proto_hdrs->proto_hdr[i - shift_count];
2294 if (shift_count == 1)
2296 /* adding tunnel header at layer 0 */
2297 hdr1 = &proto_hdrs->proto_hdr[0];
2301 /* adding tunnel header and outer ip header */
2302 hdr1 = &proto_hdrs->proto_hdr[1];
2303 hdr2 = &proto_hdrs->proto_hdr[0];
2304 hdr2->field_selector = 0;
2305 proto_hdrs->count++;
2308 if (tun_lvl == TUNNEL_LEVEL_OUTER)
2310 if (phint & AVF_PHINT_OUTER_IPV4)
2311 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr2, IPV4);
2312 else if (phint & AVF_PHINT_OUTER_IPV6)
2313 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr2, IPV6);
2315 else if (tun_lvl == TUNNEL_LEVEL_INNER)
2317 if (phint & AVF_PHINT_MID_IPV4)
2318 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr2, IPV4);
2319 else if (phint & AVF_PHINT_MID_IPV6)
2320 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr2, IPV6);
2324 hdr1->field_selector = 0;
2325 proto_hdrs->count++;
2327 if (phint & AVF_PHINT_GTPU_EH_DWN)
2328 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GTPU_EH_PDU_DWN);
2329 else if (phint & AVF_PHINT_GTPU_EH_UP)
2330 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GTPU_EH_PDU_UP);
2331 else if (phint & AVF_PHINT_GTPU_EH)
2332 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GTPU_EH);
2333 else if (phint & AVF_PHINT_GTPU)
2334 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GTPU_IP);
2336 if (phint & AVF_PHINT_GRE)
2338 if (phint & AVF_PHINT_GTPU)
2340 /* if GTPoGRE, add GRE header at the outer tunnel */
2341 if (tun_lvl == TUNNEL_LEVEL_OUTER)
2342 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GRE);
2346 VIRTCHNL_SET_PROTO_HDR_TYPE (hdr1, GRE);
2350 proto_hdrs->tunnel_level = tun_lvl;
2354 avf_refine_proto_hdrs (struct virtchnl_proto_hdrs *proto_hdrs, u64 rss_type,
2357 avf_refine_proto_hdrs_l234 (proto_hdrs, rss_type);
2358 avf_refine_proto_hdrs_by_pattern (proto_hdrs, phint);
2359 avf_refine_proto_hdrs_gtpu (proto_hdrs, rss_type);
2363 avf_rss_parse_action (const struct avf_flow_action actions[],
2364 struct virtchnl_rss_cfg *rss_cfg,
2365 struct avf_pattern_match_item *match_item, u64 phint,
2366 struct avf_flow_error *error)
2368 const struct avf_flow_action_rss *rss;
2369 const struct avf_flow_action *action;
2373 for (action = actions; action->type != AVF_FLOW_ACTION_TYPE_END; action++)
2375 switch (action->type)
2377 case AVF_FLOW_ACTION_TYPE_RSS:
2380 if (rss->func == AVF_ETH_HASH_FUNCTION_SIMPLE_XOR)
2382 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC;
2383 ret = avf_flow_error_set (error, AVF_FAILURE,
2384 AVF_FLOW_ERROR_TYPE_ACTION, actions,
2385 "simple xor is not supported.");
2388 else if (rss->func == AVF_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ)
2390 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC;
2394 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
2398 return avf_flow_error_set (
2399 error, AVF_FAILURE, AVF_FLOW_ERROR_TYPE_ACTION, actions,
2400 "a nonzero RSS encapsulation level is not supported");
2403 return avf_flow_error_set (
2404 error, AVF_FAILURE, AVF_FLOW_ERROR_TYPE_ACTION, actions,
2405 "a nonzero RSS key_len is not supported");
2408 return avf_flow_error_set (
2409 error, AVF_FAILURE, AVF_FLOW_ERROR_TYPE_ACTION, actions,
2410 "a non-NULL RSS queue is not supported");
2412 if (phint == AVF_PHINT_RAW)
2415 rss_type = avf_eth_rss_hf_refine (rss->types);
2417 if (avf_any_invalid_rss_type (rss->func, rss_type,
2418 match_item->input_set_mask))
2419 return avf_flow_error_set (error, AVF_FAILURE,
2420 AVF_FLOW_ERROR_TYPE_ACTION, actions,
2421 "RSS type not supported");
2423 memcpy (&rss_cfg->proto_hdrs, match_item->meta,
2424 sizeof (struct virtchnl_proto_hdrs));
2426 avf_refine_proto_hdrs (&rss_cfg->proto_hdrs, rss_type, phint);
2431 return avf_flow_error_set (error, AVF_FAILURE,
2432 AVF_FLOW_ERROR_TYPE_ACTION, actions,
2441 avf_rss_parse_generic_pattern (struct virtchnl_rss_cfg *rss_cfg,
2442 struct avf_flow_item avf_items[],
2443 struct avf_flow_error *error)
2445 struct avf_flow_item *item = avf_items;
2446 u8 *pkt_buf, *msk_buf;
2447 u16 spec_len, pkt_len;
2449 spec_len = clib_strnlen (item->spec, VIRTCHNL_MAX_SIZE_GEN_PACKET);
2450 pkt_len = spec_len / 2;
2452 pkt_buf = clib_mem_alloc (pkt_len);
2453 msk_buf = clib_mem_alloc (pkt_len);
2455 avf_parse_generic_pattern (item, pkt_buf, msk_buf, spec_len);
2457 clib_memcpy (rss_cfg->proto_hdrs.raw.spec, pkt_buf, pkt_len);
2458 clib_memcpy (rss_cfg->proto_hdrs.raw.mask, msk_buf, pkt_len);
2460 rss_cfg->proto_hdrs.count = 0;
2461 rss_cfg->proto_hdrs.tunnel_level = 0;
2462 rss_cfg->proto_hdrs.raw.pkt_len = pkt_len;
2464 clib_mem_free (pkt_buf);
2465 clib_mem_free (msk_buf);
2470 /* Find the first VOID or non-VOID item pointer */
2471 static const struct avf_flow_item *
2472 avf_find_first_item (const struct avf_flow_item *item, int is_void)
2476 while (item->type != AVF_FLOW_ITEM_TYPE_END)
2479 is_find = item->type == AVF_FLOW_ITEM_TYPE_VOID;
2481 is_find = item->type != AVF_FLOW_ITEM_TYPE_VOID;
2489 /* Skip all VOID items of the pattern */
2491 avf_pattern_skip_void_item (struct avf_flow_item *items,
2492 const struct avf_flow_item *pattern)
2495 const struct avf_flow_item *pb = pattern, *pe = pattern;
2499 /* Find a non-void item first */
2500 pb = avf_find_first_item (pb, 0);
2501 if (pb->type == AVF_FLOW_ITEM_TYPE_END)
2507 /* Find a void item */
2508 pe = avf_find_first_item (pb + 1, 1);
2510 cpy_count = pe - pb;
2511 clib_memcpy (items, pb, sizeof (struct avf_flow_item) * cpy_count);
2515 if (pe->type == AVF_FLOW_ITEM_TYPE_END)
2520 /* Copy the END item. */
2521 clib_memcpy (items, pe, sizeof (struct avf_flow_item));
2524 /* Check if the pattern matches a supported item type array */
2526 avf_match_pattern (enum avf_flow_item_type *item_array,
2527 const struct avf_flow_item *pattern)
2529 const struct avf_flow_item *item = pattern;
2531 while ((*item_array == item->type) &&
2532 (*item_array != AVF_FLOW_ITEM_TYPE_END))
2538 return (*item_array == AVF_FLOW_ITEM_TYPE_END &&
2539 item->type == AVF_FLOW_ITEM_TYPE_END);
2543 avf_rss_search_pattern_match_item (const struct avf_flow_item pattern[],
2544 struct avf_pattern_match_item **match_item,
2545 struct avf_flow_error *error)
2548 struct avf_pattern_match_item *array = avf_hash_pattern_list;
2550 sizeof (avf_hash_pattern_list) / sizeof (avf_hash_pattern_list[0]);
2551 /* need free by each filter */
2552 struct avf_flow_item *items; /* used for pattern without VOID items */
2553 u32 item_num = 0; /* non-void item number */
2555 /* Get the non-void item number of pattern */
2556 while ((pattern + i)->type != AVF_FLOW_ITEM_TYPE_END)
2558 if ((pattern + i)->type != AVF_FLOW_ITEM_TYPE_VOID)
2564 items = clib_mem_alloc (item_num * sizeof (struct avf_flow_item));
2565 avf_pattern_skip_void_item (items, pattern);
2567 for (i = 0; i < array_len; i++)
2568 if (avf_match_pattern (array[i].pattern_list, items))
2570 *match_item = &array[i];
2571 clib_mem_free (items);
2574 avf_flow_error_set (error, AVF_FAILURE, AVF_FLOW_ERROR_TYPE_ITEM, pattern,
2575 "Unsupported pattern");
2578 clib_mem_free (items);
2583 avf_rss_parse_pattern (const struct avf_flow_item pattern[], u64 *phint)
2585 const struct avf_flow_item *item = pattern;
2586 const struct avf_gtp_psc_hdr *psc;
2588 for (item = pattern; item->type != AVF_FLOW_ITEM_TYPE_END; item++)
2593 case AVF_FLOW_ITEM_TYPE_RAW:
2594 *phint |= AVF_PHINT_RAW;
2596 case AVF_FLOW_ITEM_TYPE_IPV4:
2597 if (!(*phint & AVF_PHINT_GTPU_MSK) && !(*phint & AVF_PHINT_GRE) &&
2598 !(*phint & AVF_PHINT_L2TPV2))
2599 *phint |= AVF_PHINT_OUTER_IPV4;
2600 if ((*phint & AVF_PHINT_GRE) && !(*phint & AVF_PHINT_GTPU_MSK))
2601 *phint |= AVF_PHINT_MID_IPV4;
2603 case AVF_FLOW_ITEM_TYPE_IPV6:
2604 if (!(*phint & AVF_PHINT_GTPU_MSK) && !(*phint & AVF_PHINT_GRE) &&
2605 !(*phint & AVF_PHINT_L2TPV2))
2606 *phint |= AVF_PHINT_OUTER_IPV6;
2607 if ((*phint & AVF_PHINT_GRE) && !(*phint & AVF_PHINT_GTPU_MSK))
2608 *phint |= AVF_PHINT_MID_IPV6;
2610 case AVF_FLOW_ITEM_TYPE_GTPU:
2611 *phint |= AVF_PHINT_GTPU;
2613 case AVF_FLOW_ITEM_TYPE_GTP_PSC:
2614 *phint |= AVF_PHINT_GTPU_EH;
2618 else if (psc->pdu_type == AVF_GTPU_EH_UPLINK)
2619 *phint |= AVF_PHINT_GTPU_EH_UP;
2620 else if (psc->pdu_type == AVF_GTPU_EH_DWNLINK)
2621 *phint |= AVF_PHINT_GTPU_EH_DWN;
2623 case AVF_FLOW_ITEM_TYPE_GRE:
2624 *phint |= AVF_PHINT_GRE;
2633 avf_rss_parse_pattern_action (struct avf_flow_item avf_items[],
2634 struct avf_flow_action avf_actions[],
2635 struct virtchnl_rss_cfg *rss_cfg,
2636 struct avf_flow_error *error)
2638 struct avf_pattern_match_item *match_item = NULL;
2639 u64 pattern_hint = 0;
2642 ret = avf_rss_search_pattern_match_item (avf_items, &match_item, error);
2646 avf_rss_parse_pattern (avf_items, &pattern_hint);
2648 if (pattern_hint == AVF_PHINT_RAW)
2650 ret = avf_rss_parse_generic_pattern (rss_cfg, avf_items, error);
2655 ret = avf_rss_parse_action (avf_actions, rss_cfg, match_item, pattern_hint,
2661 avf_rss_rule_create (struct avf_flow_vc_ctx *ctx,
2662 struct virtchnl_rss_cfg *rss_cfg)
2666 ret = ctx->vc_op (ctx->vc_hdl, VIRTCHNL_ADV_OP_ADD_RSS_CFG, rss_cfg,
2667 sizeof (*rss_cfg), 0, 0);
2673 avf_rss_rule_destroy (struct avf_flow_vc_ctx *ctx,
2674 struct virtchnl_rss_cfg *rss_cfg)
2678 ret = ctx->vc_op (ctx->vc_hdl, VIRTCHNL_ADV_OP_DEL_RSS_CFG, rss_cfg,
2679 sizeof (*rss_cfg), 0, 0);
2685 * fd.io coding-style-patch-verification: ON
2688 * eval: (c-set-style "gnu")