From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B8426A0350; Wed, 1 Jul 2020 14:56:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EC6A61D170; Wed, 1 Jul 2020 14:56:49 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id F05E11D163 for ; Wed, 1 Jul 2020 14:56:47 +0200 (CEST) IronPort-SDR: SrcXztZYXjOSzFa3EAWLq8l4MAcyzxF2iXvk1yUbZ0WyeRLG3xsdazi8rfEgY58fefMrP0gtZo +YimT1gjQVlg== X-IronPort-AV: E=McAfee;i="6000,8403,9668"; a="134022436" X-IronPort-AV: E=Sophos;i="5.75,300,1589266800"; d="scan'208";a="134022436" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2020 05:56:46 -0700 IronPort-SDR: qfj1vlJI7L29/SPaAgKary9BU+vFbHjW8Ht+OJdpGRl8sD8vgJr5pDZLfF3lOrf9pn6ALRI8ld g3mUmpS3JMDw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,300,1589266800"; d="scan'208";a="321750722" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga007.jf.intel.com with ESMTP; 01 Jul 2020 05:56:46 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 1 Jul 2020 05:56:46 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 1 Jul 2020 05:56:45 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 1 Jul 2020 05:56:45 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.89]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.174]) with mapi id 14.03.0439.000; Wed, 1 Jul 2020 20:56:42 +0800 From: "Zhang, Qi Z" To: "Guo, Jia" , "Xing, Beilei" , "Wu, Jingjing" CC: "Ye, Xiaolong" , "dev@dpdk.org" , "Guo, Junfeng" Thread-Topic: [dpdk-dev v3] net/iavf: add inner 5 tuple hash for GTPU Thread-Index: AQHWR9S7Q3EhrB9mc0uhoGtUvqfnfKjyuKYg Date: Wed, 1 Jul 2020 12:56:42 +0000 Message-ID: <039ED4275CED7440929022BC67E7061154849D9D@SHSMSX103.ccr.corp.intel.com> References: <20200614150921.111148-1-jia.guo@intel.com> <20200621140235.20488-1-jia.guo@intel.com> In-Reply-To: <20200621140235.20488-1-jia.guo@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [dpdk-dev v3] net/iavf: add inner 5 tuple hash for GTPU X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > -----Original Message----- > From: Guo, Jia > Sent: Sunday, June 21, 2020 10:03 PM > To: Xing, Beilei ; Zhang, Qi Z ; > Wu, Jingjing > Cc: Ye, Xiaolong ; dev@dpdk.org; Guo, Junfeng > ; Guo, Jia > Subject: [dpdk-dev v3] net/iavf: add inner 5 tuple hash for GTPU >=20 > Previous iavf only support inner ipv4 hash for GTPU, this patch aims to > enable inner 5 tuple hash for GTPU, that involves inner ipv4 src/dst, > tcp sport/dport, udp sport/dport and protocol id. Overall the patch include too many code refactor which is not related with = the feature be described in the commit log Please separate into patches with specific purpose, otherwise it's really h= ard to review. Also some comment in line. >=20 > Signed-off-by: Jeff Guo > --- > v3->v2: > correct some typo and refine code > --- > drivers/net/iavf/iavf_hash.c | 1816 ++++++++++++++++++++++++---------- > 1 file changed, 1299 insertions(+), 517 deletions(-) >=20 > diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c > index a7691ef0c..16db38dcd 100644 > --- a/drivers/net/iavf/iavf_hash.c > +++ b/drivers/net/iavf/iavf_hash.c > @@ -24,32 +24,34 @@ > #include "iavf_generic_flow.h" >=20 > enum iavf_pattern_hint_type { > - IAVF_PATTERN_HINT_NONE, > - IAVF_PATTERN_HINT_IPV4, > - IAVF_PATTERN_HINT_IPV4_UDP, > - IAVF_PATTERN_HINT_IPV4_TCP, > - IAVF_PATTERN_HINT_IPV4_SCTP, > - IAVF_PATTERN_HINT_IPV6, > - IAVF_PATTERN_HINT_IPV6_UDP, > - IAVF_PATTERN_HINT_IPV6_TCP, > - IAVF_PATTERN_HINT_IPV6_SCTP, > -}; > - > -enum iavf_gtpu_hint { > - IAVF_GTPU_HINT_DOWNLINK, > - IAVF_GTPU_HINT_UPLINK, > - IAVF_GTPU_HINT_NONE, > -}; > + IAVF_PHINT_NONE =3D 0x00000000, > + IAVF_PHINT_IPV4 =3D 0x00000001, > + IAVF_PHINT_IPV4_UDP =3D 0x00000002, > + IAVF_PHINT_IPV4_TCP =3D 0x00000004, > + IAVF_PHINT_IPV4_SCTP =3D 0x00000008, > + IAVF_PHINT_IPV6 =3D 0x00000010, > + IAVF_PHINT_IPV6_UDP =3D 0x00000020, > + IAVF_PHINT_IPV6_TCP =3D 0x00000040, > + IAVF_PHINT_IPV6_SCTP =3D 0x00000080, > + IAVF_PHINT_C_VLAN =3D 0x00000100, > + IAVF_PHINT_S_VLAN =3D 0x00000200, > + IAVF_PHINT_IPV4_GTPU_IP =3D 0x00000400, > + IAVF_PHINT_IPV4_GTPU_EH =3D 0x00000800, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK =3D 0x00001000, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK =3D 0x00002000, > +}; > + > +#define IAVF_GTPU_EH_DWNLINK 0 > +#define IAVF_GTPU_EH_UPLINK 1 >=20 > struct iavf_pattern_match_type { > - enum iavf_pattern_hint_type phint_type; > + uint64_t pattern_hint; > }; >=20 > struct iavf_hash_match_type { > - enum iavf_pattern_hint_type phint_type; > uint64_t hash_type; > struct virtchnl_proto_hdrs *proto_hdrs; > - enum iavf_gtpu_hint gtpu_hint; > + uint64_t pattern_hint; > }; >=20 > struct iavf_rss_meta { > @@ -83,42 +85,56 @@ iavf_hash_parse_pattern_action(struct iavf_adapter > *ad, > void **meta, > struct rte_flow_error *error); >=20 > -struct iavf_pattern_match_type phint_empty =3D { > - IAVF_PATTERN_HINT_NONE}; > -struct iavf_pattern_match_type phint_eth_ipv4 =3D { > - IAVF_PATTERN_HINT_IPV4}; > -struct iavf_pattern_match_type phint_eth_ipv4_udp =3D { > - IAVF_PATTERN_HINT_IPV4_UDP}; > -struct iavf_pattern_match_type phint_eth_ipv4_tcp =3D { > - IAVF_PATTERN_HINT_IPV4_TCP}; > -struct iavf_pattern_match_type phint_eth_ipv4_sctp =3D { > - IAVF_PATTERN_HINT_IPV4_SCTP}; > -struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh =3D { > - IAVF_PATTERN_HINT_IPV4_UDP}; > -struct iavf_pattern_match_type phint_eth_ipv4_esp =3D { > - IAVF_PATTERN_HINT_IPV4}; > -struct iavf_pattern_match_type phint_eth_ipv4_ah =3D { > - IAVF_PATTERN_HINT_IPV4}; > -struct iavf_pattern_match_type phint_eth_ipv4_l2tpv3 =3D { > - IAVF_PATTERN_HINT_IPV4}; > -struct iavf_pattern_match_type phint_eth_ipv4_pfcp =3D { > - IAVF_PATTERN_HINT_IPV4_UDP}; > -struct iavf_pattern_match_type phint_eth_ipv6 =3D { > - IAVF_PATTERN_HINT_IPV6}; > -struct iavf_pattern_match_type phint_eth_ipv6_udp =3D { > - IAVF_PATTERN_HINT_IPV6_UDP}; > -struct iavf_pattern_match_type phint_eth_ipv6_tcp =3D { > - IAVF_PATTERN_HINT_IPV6_TCP}; > -struct iavf_pattern_match_type phint_eth_ipv6_sctp =3D { > - IAVF_PATTERN_HINT_IPV6_SCTP}; > -struct iavf_pattern_match_type phint_eth_ipv6_esp =3D { > - IAVF_PATTERN_HINT_IPV6}; > -struct iavf_pattern_match_type phint_eth_ipv6_ah =3D { > - IAVF_PATTERN_HINT_IPV6}; > -struct iavf_pattern_match_type phint_eth_ipv6_l2tpv3 =3D { > - IAVF_PATTERN_HINT_IPV6}; > -struct iavf_pattern_match_type phint_eth_ipv6_pfcp =3D { > - IAVF_PATTERN_HINT_IPV6_UDP}; > +static struct iavf_pattern_match_type phint_empty =3D { > + IAVF_PHINT_NONE}; > +static struct iavf_pattern_match_type phint_eth_ipv4 =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_udp =3D { > + IAVF_PHINT_IPV4_UDP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_tcp =3D { > + IAVF_PHINT_IPV4_TCP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_sctp =3D { > + IAVF_PHINT_IPV4_SCTP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv4 =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4 =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_udp > =3D { > + IAVF_PHINT_IPV4_UDP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_tcp = =3D > { > + IAVF_PHINT_IPV4_TCP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_esp =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_udp_esp =3D { > + IAVF_PHINT_IPV4_UDP}; > +static struct iavf_pattern_match_type phint_eth_ipv4_ah =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_l2tpv3 =3D { > + IAVF_PHINT_IPV4}; > +static struct iavf_pattern_match_type phint_eth_ipv4_pfcp =3D { > + IAVF_PHINT_IPV4_UDP}; > +static struct iavf_pattern_match_type phint_eth_vlan_ipv4 =3D { > + IAVF_PHINT_C_VLAN}; > +static struct iavf_pattern_match_type phint_eth_ipv6 =3D { > + IAVF_PHINT_IPV6}; > +static struct iavf_pattern_match_type phint_eth_ipv6_udp =3D { > + IAVF_PHINT_IPV6_UDP}; > +static struct iavf_pattern_match_type phint_eth_ipv6_tcp =3D { > + IAVF_PHINT_IPV6_TCP}; > +static struct iavf_pattern_match_type phint_eth_ipv6_sctp =3D { > + IAVF_PHINT_IPV6_SCTP}; > +static struct iavf_pattern_match_type phint_eth_ipv6_esp =3D { > + IAVF_PHINT_IPV6}; > +static struct iavf_pattern_match_type phint_eth_ipv6_udp_esp =3D { > + IAVF_PHINT_IPV6_UDP}; > +static struct iavf_pattern_match_type phint_eth_ipv6_ah =3D { > + IAVF_PHINT_IPV6}; > +static struct iavf_pattern_match_type phint_eth_ipv6_l2tpv3 =3D { > + IAVF_PHINT_IPV6}; > +static struct iavf_pattern_match_type phint_eth_ipv6_pfcp =3D { > + IAVF_PHINT_IPV6_UDP}; > +static struct iavf_pattern_match_type phint_eth_vlan_ipv6 =3D { > + IAVF_PHINT_C_VLAN}; Add static can be in a separate patch. >=20 > /** > * Supported pattern for hash. > @@ -131,26 +147,34 @@ static struct iavf_pattern_match_item > iavf_hash_pattern_list[] =3D { > {iavf_pattern_eth_ipv4_udp, IAVF_INSET_NONE, > &phint_eth_ipv4_udp}, > {iavf_pattern_eth_ipv4_tcp, IAVF_INSET_NONE, &phint_eth_ipv4_tcp}, > {iavf_pattern_eth_ipv4_sctp, IAVF_INSET_NONE, > &phint_eth_ipv4_sctp}, > - {iavf_pattern_eth_ipv6, IAVF_INSET_NONE, &phint_eth_ipv6}, > + {iavf_pattern_eth_ipv4_gtpu_ipv4, IAVF_INSET_NONE, > + &phint_eth_ipv4_gtpu_ipv4}, > {iavf_pattern_eth_ipv4_gtpu_eh_ipv4, IAVF_INSET_NONE, > - &phint_eth_ipv4_gtpu_eh}, > + &phint_eth_ipv4_gtpu_eh_ipv4}, > {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_udp, IAVF_INSET_NONE, > - &phint_eth_ipv4_gtpu_eh}, > + &phint_eth_ipv4_gtpu_eh_ipv4_udp}, > {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp, IAVF_INSET_NONE, > - &phint_eth_ipv4_gtpu_eh}, > + &phint_eth_ipv4_gtpu_eh_ipv4_tcp}, > {iavf_pattern_eth_ipv4_esp, IAVF_INSET_NONE, &phint_eth_ipv4_esp}, > + {iavf_pattern_eth_ipv4_udp_esp, IAVF_INSET_NONE, > + &phint_eth_ipv4_udp_esp}, > {iavf_pattern_eth_ipv4_ah, IAVF_INSET_NONE, &phint_eth_ipv4_ah}, > {iavf_pattern_eth_ipv4_l2tpv3, IAVF_INSET_NONE, > - &phint_eth_ipv4_l2tpv3}, > + &phint_eth_ipv4_l2tpv3}, > {iavf_pattern_eth_ipv4_pfcp, IAVF_INSET_NONE, > &phint_eth_ipv4_pfcp}, > + {iavf_pattern_eth_vlan_ipv4, IAVF_INSET_NONE, Looks like the new vlan pattern is not related with the 5 tuple, please mov= e this feature into a separate patch. > &phint_eth_vlan_ipv4}, > + {iavf_pattern_eth_ipv6, IAVF_INSET_NONE, &phint_eth_ipv6}, > {iavf_pattern_eth_ipv6_udp, IAVF_INSET_NONE, > &phint_eth_ipv6_udp}, > {iavf_pattern_eth_ipv6_tcp, IAVF_INSET_NONE, &phint_eth_ipv6_tcp}, > {iavf_pattern_eth_ipv6_sctp, IAVF_INSET_NONE, > &phint_eth_ipv6_sctp}, > {iavf_pattern_eth_ipv6_esp, IAVF_INSET_NONE, &phint_eth_ipv6_esp}, > + {iavf_pattern_eth_ipv6_udp_esp, IAVF_INSET_NONE, > + &phint_eth_ipv6_udp_esp}, This is not related with GTPU, please either move this to a separate path o= r modify the commit log to describe more correctly what you want to do. > {iavf_pattern_eth_ipv6_ah, IAVF_INSET_NONE, &phint_eth_ipv6_ah}, > {iavf_pattern_eth_ipv6_l2tpv3, IAVF_INSET_NONE, > - &phint_eth_ipv6_l2tpv3}, > + &phint_eth_ipv6_l2tpv3}, This looks redundant change, if it's a code clean move this to separate pat= ch. > {iavf_pattern_eth_ipv6_pfcp, IAVF_INSET_NONE, > &phint_eth_ipv6_pfcp}, > + {iavf_pattern_eth_vlan_ipv6, IAVF_INSET_NONE, > &phint_eth_vlan_ipv6}, > {iavf_pattern_empty, IAVF_INSET_NONE, &phint_empty}, > }; >=20 > @@ -207,6 +231,28 @@ static struct iavf_pattern_match_item > iavf_hash_pattern_list[] =3D { > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \ > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), {BUFF_NOUSED } } >=20 > +#define proto_hint_ipv4_src_prot { \ > + VIRTCHNL_PROTO_HDR_IPV4, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), \ > + {BUFF_NOUSED } } > + > +#define proto_hint_ipv4_dst_prot { \ > + VIRTCHNL_PROTO_HDR_IPV4, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), \ > + {BUFF_NOUSED } } > + > +#define proto_hint_ipv4_only_prot { \ > + VIRTCHNL_PROTO_HDR_IPV4, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), > {BUFF_NOUSED } } > + > +#define proto_hint_ipv4_prot { \ > + VIRTCHNL_PROTO_HDR_IPV4, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), > {BUFF_NOUSED } } > + > #define proto_hint_udp_src_port { \ > VIRTCHNL_PROTO_HDR_UDP, \ > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT), > {BUFF_NOUSED } } > @@ -271,6 +317,40 @@ static struct iavf_pattern_match_item > iavf_hash_pattern_list[] =3D { > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \ > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), {BUFF_NOUSED } } >=20 > +#define proto_hint_ipv6_src_prot { \ > + VIRTCHNL_PROTO_HDR_IPV6, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), \ > + {BUFF_NOUSED } } > + > +#define proto_hint_ipv6_dst_prot { \ > + VIRTCHNL_PROTO_HDR_IPV6, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), \ > + {BUFF_NOUSED } } > + > +#define proto_hint_ipv6_only_prot { \ > + VIRTCHNL_PROTO_HDR_IPV6, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), > {BUFF_NOUSED } } > + > +#define proto_hint_ipv6_prot { \ > + VIRTCHNL_PROTO_HDR_IPV6, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), > {BUFF_NOUSED } } > + > +#define proto_hint_gtpu_ip_teid { \ > + VIRTCHNL_PROTO_HDR_GTPU_IP, \ > + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPU_IP_TEID), > {BUFF_NOUSED } } > + > +#define proto_hint_gtpu_eh_only { \ > + VIRTCHNL_PROTO_HDR_GTPU_EH, \ > + FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } } > + > +#define proto_hint_gtpu_ip_only { \ > + VIRTCHNL_PROTO_HDR_GTPU_IP, \ > + FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } } > + > #define proto_hint_gtpu_up_only { \ > VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP, \ > FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } } > @@ -295,6 +375,8 @@ static struct iavf_pattern_match_item > iavf_hash_pattern_list[] =3D { > VIRTCHNL_PROTO_HDR_PFCP, \ > FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID), > {BUFF_NOUSED } } >=20 > +/* ETH */ > + > struct virtchnl_proto_hdrs hdrs_hint_eth_src =3D { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_eth_src } > }; > @@ -315,6 +397,8 @@ struct virtchnl_proto_hdrs hdrs_hint_cvlan =3D { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_cvlan } > }; >=20 > +/* IPV4 */ > + > struct virtchnl_proto_hdrs hdrs_hint_ipv4_src =3D { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_src } > }; > @@ -323,117 +407,77 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst =3D > { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_dst } > }; >=20 > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up =3D { > - TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_up_only, > - proto_hint_ipv4_src } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_dwn =3D { > - TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_dwn_only, > - proto_hint_ipv4_src } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_up =3D { > - TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_up_only, > - proto_hint_ipv4_dst } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_dwn =3D { > - TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_dwn_only, > - proto_hint_ipv4_dst } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > - proto_hint_esp } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > - proto_hint_ah } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > - proto_hint_l2tpv3 } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > - proto_hint_pfcp } > -}; > - > struct virtchnl_proto_hdrs hdrs_hint_ipv4 =3D { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4 } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_src_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_src_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_dst_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_dst_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_only_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_only_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot, > proto_hint_udp } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_src_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_src_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_dst_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_dst_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_only_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv4_only_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot, > proto_hint_tcp } > }; >=20 > @@ -472,105 +516,393 @@ struct virtchnl_proto_hdrs > hdrs_hint_ipv4_sctp =3D { > proto_hint_sctp } > }; >=20 > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_src =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst } > -}; > - > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > proto_hint_esp } > }; >=20 > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > proto_hint_ah } > }; >=20 > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > proto_hint_l2tpv3 } > }; >=20 > -struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, > proto_hint_pfcp } > }; >=20 > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_esp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv4_only, > + proto_hint_udp_only, proto_hint_esp } > +}; > + > +/* GTPU IP */ > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_ip =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_ip_only, > + proto_hint_ipv4_src } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_ip =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_ip_only, > + proto_hint_ipv4_dst } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_ip =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_ip_only, > + proto_hint_ipv4 } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_teid_gtpu_ip =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_ip_teid} > +}; > + > +/* GTPU EH */ > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_src } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_dst } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4 } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4, proto_hint_udp} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_eh =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_eh_only, > + proto_hint_ipv4, proto_hint_tcp} > +}; > + > +/* GTPU UP */ > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_src } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_dst } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4 } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4, proto_hint_udp} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_up =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_up_only, > + proto_hint_ipv4, proto_hint_tcp} > +}; > + > +/* GTPU DWN */ > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_only_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_src } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_src_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_dst } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4 } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4, proto_hint_udp} > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_dwn =3D { > + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, > {proto_hint_gtpu_dwn_only, > + proto_hint_ipv4, proto_hint_tcp} > +}; > + > +/* IPV6 */ > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_src =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst } > +}; > + > struct virtchnl_proto_hdrs hdrs_hint_ipv6 =3D { > TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6 } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_src_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_src_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_dst_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_dst_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_only_prot, > proto_hint_udp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_only_prot, > proto_hint_udp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot, > proto_hint_udp } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_src_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_src_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_dst_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_dst_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_only_prot, > proto_hint_tcp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, > {proto_hint_ipv6_only_prot, > proto_hint_tcp_dst_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot, > proto_hint_tcp } > }; >=20 > @@ -595,12 +927,12 @@ struct virtchnl_proto_hdrs > hdrs_hint_ipv6_dst_sctp_dst_port =3D { > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_src_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > proto_hint_sctp_src_port } > }; >=20 > struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_dst_port =3D { > - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_udp_only, > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > proto_hint_sctp_dst_port } > }; >=20 > @@ -609,337 +941,804 @@ struct virtchnl_proto_hdrs > hdrs_hint_ipv6_sctp =3D { > proto_hint_sctp } > }; >=20 > -/** > - * The first member is pattern hint type, > - * the second member is hash type, > - * the third member is virtchnl protocol hdrs. > - * the forth member is downlink/uplink type. > - */ > -struct iavf_hash_match_type iavf_hash_type_list[] =3D { > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > + proto_hint_esp } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > + proto_hint_ah } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > + proto_hint_l2tpv3 } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, > + proto_hint_pfcp } > +}; > + > +struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp =3D { > + TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv6_only, > + proto_hint_udp_only, proto_hint_esp } > +}; > + > +struct iavf_hash_match_type iavf_hash_map_list[] =3D { > /* IPV4 */ > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_SRC_ONLY, > &hdrs_hint_eth_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_DST_ONLY, > &hdrs_hint_eth_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH | ETH_RSS_L2_SRC_ONLY, > - &hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH | ETH_RSS_L2_DST_ONLY, > - &hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH, &hdrs_hint_eth, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_S_VLAN, &hdrs_hint_svlan, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN, &hdrs_hint_cvlan, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_SRC_ONLY, > &hdrs_hint_ipv4_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_DST_ONLY, > &hdrs_hint_ipv4_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_ESP, &hdrs_hint_ipv4_esp, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_AH, &hdrs_hint_ipv4_ah, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2TPV3, > &hdrs_hint_ipv4_l2tpv3, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4, &hdrs_hint_ipv4, > - IAVF_GTPU_HINT_NONE}, > + {ETH_RSS_L2_SRC_ONLY, > + &hdrs_hint_eth_src, IAVF_PHINT_IPV4}, > + {ETH_RSS_L2_DST_ONLY, > + &hdrs_hint_eth_dst, IAVF_PHINT_IPV4}, > + {ETH_RSS_ETH, > + &hdrs_hint_eth, IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4, > + &hdrs_hint_ipv4, IAVF_PHINT_IPV4}, > + {ETH_RSS_ESP, > + &hdrs_hint_ipv4_esp, IAVF_PHINT_IPV4}, > + {ETH_RSS_AH, > + &hdrs_hint_ipv4_ah, IAVF_PHINT_IPV4}, > + {ETH_RSS_L2TPV3, > + &hdrs_hint_ipv4_l2tpv3, IAVF_PHINT_IPV4}, > /* IPV4 UDP */ > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_src_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_src_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_GTPU, > - &hdrs_hint_ipv4_src_gtpu_up, IAVF_GTPU_HINT_UPLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_GTPU, > - &hdrs_hint_ipv4_src_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_dst_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_GTPU, > - &hdrs_hint_ipv4_dst_gtpu_up, IAVF_GTPU_HINT_UPLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_GTPU, > - &hdrs_hint_ipv4_dst_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_src_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_src_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > - ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU, > - &hdrs_hint_ipv4_src_gtpu_up, IAVF_GTPU_HINT_UPLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > - ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU, > - &hdrs_hint_ipv4_src_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_dst_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > - ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU, > - &hdrs_hint_ipv4_dst_gtpu_up, IAVF_GTPU_HINT_UPLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > - ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU, > - &hdrs_hint_ipv4_dst_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP | > + &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_PFCP, > - &hdrs_hint_ipv4_pfcp, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP, > - &hdrs_hint_ipv4_udp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_PFCP, > + &hdrs_hint_ipv4_pfcp, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_ESP, > + &hdrs_hint_ipv4_udp_esp, IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP, > + &hdrs_hint_ipv4_udp, IAVF_PHINT_IPV4_UDP}, > /* IPV4 TCP */ > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_src_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY | > ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY | > ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_src_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP | > + &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP, > - &hdrs_hint_ipv4_tcp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP, > + &hdrs_hint_ipv4_tcp, IAVF_PHINT_IPV4_TCP}, > /* IPV4 SCTP */ > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv4_src_sctp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv4_src_sctp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv4_dst_sctp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv4_dst_sctp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_src_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP | > + &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv4_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv4_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP, > - &hdrs_hint_ipv4_sctp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP}, > + {ETH_RSS_NONFRAG_IPV4_SCTP, > + &hdrs_hint_ipv4_sctp, IAVF_PHINT_IPV4_SCTP}, > /* IPV6 */ > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_SRC_ONLY, > - &hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_DST_ONLY, > - &hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L2_SRC_ONLY, > - &hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L2_DST_ONLY, > - &hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_ETH, > - &hdrs_hint_eth, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_S_VLAN, > - &hdrs_hint_svlan, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN, > - &hdrs_hint_cvlan, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_ESP, > - &hdrs_hint_ipv6_esp, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_AH, > - &hdrs_hint_ipv6_ah, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2TPV3, > - &hdrs_hint_ipv6_l2tpv3, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6, > - &hdrs_hint_ipv6, IAVF_GTPU_HINT_NONE}, > + {ETH_RSS_L2_SRC_ONLY, > + &hdrs_hint_eth_src, IAVF_PHINT_IPV6}, > + {ETH_RSS_L2_DST_ONLY, > + &hdrs_hint_eth_dst, IAVF_PHINT_IPV6}, > + {ETH_RSS_ETH, > + &hdrs_hint_eth, IAVF_PHINT_IPV6}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6}, > + {ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6}, > + {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6}, > + {ETH_RSS_IPV6, > + &hdrs_hint_ipv6, IAVF_PHINT_IPV6}, > + {ETH_RSS_ESP, > + &hdrs_hint_ipv6_esp, IAVF_PHINT_IPV6}, > + {ETH_RSS_AH, > + &hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6}, > + {ETH_RSS_L2TPV3, > + &hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6}, > /* IPV6 UDP */ > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_udp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_udp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_udp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_udp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_src_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_src_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_dst_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP | > + &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_udp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_udp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_PFCP, > - &hdrs_hint_ipv6_pfcp, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP, > - &hdrs_hint_ipv6_udp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_PFCP, > + &hdrs_hint_ipv6_pfcp, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_ESP, > + &hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP}, > + {ETH_RSS_NONFRAG_IPV6_UDP, > + &hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP}, > /* IPV6 TCP */ > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_tcp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_tcp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_tcp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_tcp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_src_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP | > + &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_tcp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_tcp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP, > - &hdrs_hint_ipv6_tcp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP}, > + {ETH_RSS_NONFRAG_IPV6_TCP, > + &hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP}, > /* IPV6 SCTP */ > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_sctp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_sctp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY, > - &hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_sctp_src_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY | > - ETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_sctp_dst_port, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY, > - &hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_src_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP | > + &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | > ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst, > - IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L4_SRC_ONLY, > - &hdrs_hint_ipv6_sctp_src_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L4_DST_ONLY, > - &hdrs_hint_ipv6_sctp_dst_port, IAVF_GTPU_HINT_NONE}, > - {IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP, > - &hdrs_hint_ipv6_sctp, IAVF_GTPU_HINT_NONE}, > + IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP}, > + {ETH_RSS_NONFRAG_IPV6_SCTP, > + &hdrs_hint_ipv6_sctp, IAVF_PHINT_IPV6_SCTP}, > + /* VLAN */ > + {ETH_RSS_S_VLAN, > + &hdrs_hint_svlan, IAVF_PHINT_S_VLAN}, > + {ETH_RSS_C_VLAN, > + &hdrs_hint_cvlan, IAVF_PHINT_C_VLAN}, > +}; > + > +struct iavf_hash_match_type iavf_gtpu_hash_map_list[] =3D { > + /* GTPU */ > + /* GTPU IP */ > + /* GTPU IPV4*/ > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4, > + &hdrs_hint_ipv4_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + {ETH_RSS_GTPU, > + &hdrs_hint_teid_gtpu_ip, > + IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4}, > + /* GTPU EH */ > + /* Inner IPV4 */ > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4, > + &hdrs_hint_ipv4_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4}, > + /* Inner IPV4->UDP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP, > + &hdrs_hint_ipv4_udp_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP}, > + /* Inner IPV4->TCP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP, > + &hdrs_hint_ipv4_tcp_gtpu_eh, > + IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP}, > + /* GTPU EH UP */ > + /* Inner IPV4 */ > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4, > + &hdrs_hint_ipv4_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4}, > + /* Inner IPV4->UDP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP, > + &hdrs_hint_ipv4_udp_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP}, > + /* Inner IPV4->TCP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP, > + &hdrs_hint_ipv4_tcp_gtpu_up, > + IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP}, > + /* GTPU EH DWN */ > + /* Inner IPV4 */ > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4 | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4}, > + {ETH_RSS_IPV4, > + &hdrs_hint_ipv4_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4}, > + /* Inner IPV4->UDP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_udp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + {ETH_RSS_NONFRAG_IPV4_UDP, > + &hdrs_hint_ipv4_udp_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP}, > + /* Inner IPV4->TCP */ > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_SRC_ONLY, > + &hdrs_hint_ipv4_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY, > + &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L3_DST_ONLY, > + &hdrs_hint_ipv4_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP | > + ETH_RSS_L4_DST_ONLY, > + &hdrs_hint_ipv4_tcp_dst_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > + {ETH_RSS_NONFRAG_IPV4_TCP, > + &hdrs_hint_ipv4_udp_gtpu_dwn, > + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP}, > }; >=20 > struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] =3D { > @@ -1037,10 +1836,12 @@ iavf_hash_init(struct iavf_adapter *ad) > } >=20 > static int > -iavf_hash_check_inset(const struct rte_flow_item pattern[], > - struct rte_flow_error *error) > +iavf_hash_parse_pattern(struct iavf_pattern_match_item > *pattern_match_item, > + const struct rte_flow_item pattern[], uint64_t *phint, > + struct rte_flow_error *error) > { > const struct rte_flow_item *item =3D pattern; > + const struct rte_flow_item_gtp_psc *psc; >=20 > for (item =3D pattern; item->type !=3D RTE_FLOW_ITEM_TYPE_END; item++) > { > if (item->last) { > @@ -1049,45 +1850,44 @@ iavf_hash_check_inset(const struct > rte_flow_item pattern[], > "Not support range"); > return -rte_errno; > } > - } >=20 > - return 0; > -} > - > -static void > -iavf_hash_refine_type(uint64_t *rss_type, const struct rte_flow_item > pattern[], > - enum iavf_gtpu_hint *gtpu_hint) > -{ > - const struct rte_flow_item *item; > - > - for (item =3D pattern; item->type !=3D RTE_FLOW_ITEM_TYPE_END; item++) > { > - if (item->type =3D=3D RTE_FLOW_ITEM_TYPE_GTP_PSC) { > - const struct rte_flow_item_gtp_psc *psc =3D item->spec; > - > - if (psc && (psc->pdu_type =3D=3D IAVF_GTPU_HINT_UPLINK || > - psc->pdu_type =3D=3D IAVF_GTPU_HINT_DOWNLINK)) { > - *rss_type |=3D ETH_RSS_GTPU; > - *gtpu_hint =3D psc->pdu_type; > - } > + switch (item->type) { > + case RTE_FLOW_ITEM_TYPE_GTPU: > + *phint |=3D IAVF_PHINT_IPV4_GTPU_IP; > + break; > + case RTE_FLOW_ITEM_TYPE_GTP_PSC: > + psc =3D item->spec; > + *phint &=3D ~IAVF_PHINT_IPV4_GTPU_IP; > + if (!psc) > + *phint |=3D IAVF_PHINT_IPV4_GTPU_EH; > + else if (psc->pdu_type =3D=3D IAVF_GTPU_EH_UPLINK) > + *phint |=3D IAVF_PHINT_IPV4_GTPU_EH_UPLINK; > + else if (psc->pdu_type =3D=3D IAVF_GTPU_EH_DWNLINK) > + *phint |=3D IAVF_PHINT_IPV4_GTPU_EH_DWNLINK; > + break; > + default: > + break; > } > } > + > + /* update and restore pattern hint */ > + *phint |=3D ((struct iavf_pattern_match_type *) > + (pattern_match_item->meta))->pattern_hint; > + > + return 0; > } >=20 > static int > -iavf_hash_parse_action(struct iavf_pattern_match_item > *pattern_match_item, > - const struct rte_flow_item pattern[], > - const struct rte_flow_action actions[], > - void **meta, struct rte_flow_error *error) > +iavf_hash_parse_action(const struct rte_flow_action actions[], > + uint64_t pattern_hint, void **meta, > + struct rte_flow_error *error) > { > - struct iavf_pattern_match_type *mt =3D (struct iavf_pattern_match_type > *) > - (pattern_match_item->meta); > struct iavf_rss_meta *rss_meta =3D (struct iavf_rss_meta *)*meta; > - uint32_t type_list_len =3D RTE_DIM(iavf_hash_type_list); > - struct iavf_hash_match_type *type_match_item; > - enum iavf_gtpu_hint gtpu_hint =3D IAVF_GTPU_HINT_NONE; > + struct iavf_hash_match_type *hash_map_list; > enum rte_flow_action_type action_type; > const struct rte_flow_action_rss *rss; > const struct rte_flow_action *action; > + uint32_t mlist_len; > bool item_found =3D false; > uint64_t rss_type; > uint16_t i; > @@ -1101,25 +1901,18 @@ iavf_hash_parse_action(struct > iavf_pattern_match_item *pattern_match_item, > rss =3D action->conf; > rss_type =3D rss->types; >=20 > - /** > - * Check simultaneous use of SRC_ONLY and DST_ONLY > - * of the same level. > - */ > - rss_type =3D rte_eth_rss_hf_refine(rss_type); > - > - /** > - * Refine the hash type base on some specific item of > - * the pattern, such as identify the gtpu hash. > - */ > - iavf_hash_refine_type(&rss_type, pattern, >pu_hint); > - > - /* Check if pattern is empty. */ > - if (pattern_match_item->pattern_list !=3D > - iavf_pattern_empty && rss->func =3D=3D > - RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) > - return rte_flow_error_set(error, ENOTSUP, > - RTE_FLOW_ERROR_TYPE_ACTION, action, > - "Not supported flow"); > + if (rss->func =3D=3D > + RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){ > + rss_meta->rss_algorithm =3D > + VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC; > + } else if (rss->func =3D=3D > + RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { > + rss_meta->rss_algorithm =3D > + VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC; > + } else { > + rss_meta->rss_algorithm =3D > + VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC; > + } >=20 > if (rss->level) > return rte_flow_error_set(error, ENOTSUP, > @@ -1136,48 +1929,36 @@ iavf_hash_parse_action(struct > iavf_pattern_match_item *pattern_match_item, > RTE_FLOW_ERROR_TYPE_ACTION, action, > "a non-NULL RSS queue is not supported"); >=20 > - /* Check hash function and save it to rss_meta. */ > - if (rss->func =3D=3D RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) > - rss_meta->rss_algorithm =3D > - VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC; > - else if (rss->func =3D=3D > - RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) > - rss_meta->rss_algorithm =3D > - VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC; > - else > - rss_meta->rss_algorithm =3D > - VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC; > + /** > + * Check simultaneous use of SRC_ONLY and DST_ONLY > + * of the same level. > + */ > + rss_type =3D rte_eth_rss_hf_refine(rss_type); >=20 > - type_match_item =3D > - rte_zmalloc("iavf_type_match_item", > - sizeof(struct iavf_hash_match_type), 0); > - if (!type_match_item) { > - rte_flow_error_set(error, EINVAL, > - RTE_FLOW_ERROR_TYPE_HANDLE, > - NULL, > - "No memory for type_match_item"); > - return -ENOMEM; > + if ((pattern_hint & IAVF_PHINT_IPV4_GTPU_IP) || > + (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH) || > + (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_UPLINK) || > + (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_DWNLINK)) > { > + hash_map_list =3D iavf_gtpu_hash_map_list; > + mlist_len =3D RTE_DIM(iavf_gtpu_hash_map_list); > + } else { > + hash_map_list =3D iavf_hash_map_list; > + mlist_len =3D RTE_DIM(iavf_hash_map_list); > } >=20 > /* Find matched proto hdrs according to hash type. */ > - for (i =3D 0; i < type_list_len; i++) { > + for (i =3D 0; i < mlist_len; i++) { > struct iavf_hash_match_type *ht_map =3D > - &iavf_hash_type_list[i]; > + &hash_map_list[i]; > if (rss_type =3D=3D ht_map->hash_type && > - mt->phint_type =3D=3D ht_map->phint_type && > - gtpu_hint =3D=3D ht_map->gtpu_hint) { > - type_match_item->hash_type =3D > - ht_map->hash_type; > - type_match_item->proto_hdrs =3D > - ht_map->proto_hdrs; > + pattern_hint =3D=3D ht_map->pattern_hint) { > rss_meta->proto_hdrs =3D > - type_match_item->proto_hdrs; > + ht_map->proto_hdrs; > item_found =3D true; > + break; > } > } >=20 > - rte_free(type_match_item); > - > if (!item_found) > return rte_flow_error_set(error, ENOTSUP, > RTE_FLOW_ERROR_TYPE_ACTION, action, > @@ -1209,6 +1990,7 @@ iavf_hash_parse_pattern_action(__rte_unused > struct iavf_adapter *ad, > { > struct iavf_pattern_match_item *pattern_match_item; > struct iavf_rss_meta *rss_meta_ptr; > + uint64_t phint =3D IAVF_PHINT_NONE; > int ret =3D 0; >=20 > rss_meta_ptr =3D rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0); > @@ -1228,12 +2010,12 @@ iavf_hash_parse_pattern_action(__rte_unused > struct iavf_adapter *ad, > goto error; > } >=20 > - ret =3D iavf_hash_check_inset(pattern, error); > + ret =3D iavf_hash_parse_pattern(pattern_match_item, pattern, &phint, > + error); > if (ret) > goto error; >=20 > - /* Check rss action. */ > - ret =3D iavf_hash_parse_action(pattern_match_item, pattern, actions, > + ret =3D iavf_hash_parse_action(actions, phint, > (void **)&rss_meta_ptr, error); >=20 > error: > -- > 2.20.1