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 4342FA0519; Fri, 3 Jul 2020 05:52:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 13D231D8CE; Fri, 3 Jul 2020 05:52:22 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 5A3FB1D735 for ; Fri, 3 Jul 2020 05:52:19 +0200 (CEST) IronPort-SDR: SpiCNkGZcgDHgGPLNpPc5l9Utp5KgjAeDWSJJ4hK4VDD/Fvc6J7hzl82a5OSnCAe/9WjEw9h4S 7Xtv++2gQuRQ== X-IronPort-AV: E=McAfee;i="6000,8403,9670"; a="127174873" X-IronPort-AV: E=Sophos;i="5.75,306,1589266800"; d="scan'208";a="127174873" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2020 20:52:18 -0700 IronPort-SDR: 5SOp3dv/o3/UNSXqp+ARDS/t4/cacSIxplPzVv8FNjnJgxYSNqnxFHwXhee0NIlmBOAzu2yqLe oRix4ibvUfhw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,306,1589266800"; d="scan'208";a="278309101" Received: from jguo15x-mobl.ccr.corp.intel.com (HELO [10.67.68.176]) ([10.67.68.176]) by orsmga003.jf.intel.com with ESMTP; 02 Jul 2020 20:52:15 -0700 To: "Zhang, Qi Z" , "Xing, Beilei" , "Wu, Jingjing" Cc: "Ye, Xiaolong" , "dev@dpdk.org" , "Guo, Junfeng" References: <20200614150921.111148-1-jia.guo@intel.com> <20200621140235.20488-1-jia.guo@intel.com> <039ED4275CED7440929022BC67E7061154849D9D@SHSMSX103.ccr.corp.intel.com> From: Jeff Guo Message-ID: Date: Fri, 3 Jul 2020 11:52:15 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <039ED4275CED7440929022BC67E7061154849D9D@SHSMSX103.ccr.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US 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" hi, qi Let me separate the patch and thanks your advise. On 7/1/2020 8:56 PM, Zhang, Qi Z wrote: > >> -----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 >> >> 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 hard to review. > Also some comment in line. >> 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(-) >> >> 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" >> >> 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 = 0x00000000, >> + IAVF_PHINT_IPV4 = 0x00000001, >> + IAVF_PHINT_IPV4_UDP = 0x00000002, >> + IAVF_PHINT_IPV4_TCP = 0x00000004, >> + IAVF_PHINT_IPV4_SCTP = 0x00000008, >> + IAVF_PHINT_IPV6 = 0x00000010, >> + IAVF_PHINT_IPV6_UDP = 0x00000020, >> + IAVF_PHINT_IPV6_TCP = 0x00000040, >> + IAVF_PHINT_IPV6_SCTP = 0x00000080, >> + IAVF_PHINT_C_VLAN = 0x00000100, >> + IAVF_PHINT_S_VLAN = 0x00000200, >> + IAVF_PHINT_IPV4_GTPU_IP = 0x00000400, >> + IAVF_PHINT_IPV4_GTPU_EH = 0x00000800, >> + IAVF_PHINT_IPV4_GTPU_EH_DWNLINK = 0x00001000, >> + IAVF_PHINT_IPV4_GTPU_EH_UPLINK = 0x00002000, >> +}; >> + >> +#define IAVF_GTPU_EH_DWNLINK 0 >> +#define IAVF_GTPU_EH_UPLINK 1 >> >> struct iavf_pattern_match_type { >> - enum iavf_pattern_hint_type phint_type; >> + uint64_t pattern_hint; >> }; >> >> 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; >> }; >> >> struct iavf_rss_meta { >> @@ -83,42 +85,56 @@ iavf_hash_parse_pattern_action(struct iavf_adapter >> *ad, >> void **meta, >> struct rte_flow_error *error); >> >> -struct iavf_pattern_match_type phint_empty = { >> - IAVF_PATTERN_HINT_NONE}; >> -struct iavf_pattern_match_type phint_eth_ipv4 = { >> - IAVF_PATTERN_HINT_IPV4}; >> -struct iavf_pattern_match_type phint_eth_ipv4_udp = { >> - IAVF_PATTERN_HINT_IPV4_UDP}; >> -struct iavf_pattern_match_type phint_eth_ipv4_tcp = { >> - IAVF_PATTERN_HINT_IPV4_TCP}; >> -struct iavf_pattern_match_type phint_eth_ipv4_sctp = { >> - IAVF_PATTERN_HINT_IPV4_SCTP}; >> -struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh = { >> - IAVF_PATTERN_HINT_IPV4_UDP}; >> -struct iavf_pattern_match_type phint_eth_ipv4_esp = { >> - IAVF_PATTERN_HINT_IPV4}; >> -struct iavf_pattern_match_type phint_eth_ipv4_ah = { >> - IAVF_PATTERN_HINT_IPV4}; >> -struct iavf_pattern_match_type phint_eth_ipv4_l2tpv3 = { >> - IAVF_PATTERN_HINT_IPV4}; >> -struct iavf_pattern_match_type phint_eth_ipv4_pfcp = { >> - IAVF_PATTERN_HINT_IPV4_UDP}; >> -struct iavf_pattern_match_type phint_eth_ipv6 = { >> - IAVF_PATTERN_HINT_IPV6}; >> -struct iavf_pattern_match_type phint_eth_ipv6_udp = { >> - IAVF_PATTERN_HINT_IPV6_UDP}; >> -struct iavf_pattern_match_type phint_eth_ipv6_tcp = { >> - IAVF_PATTERN_HINT_IPV6_TCP}; >> -struct iavf_pattern_match_type phint_eth_ipv6_sctp = { >> - IAVF_PATTERN_HINT_IPV6_SCTP}; >> -struct iavf_pattern_match_type phint_eth_ipv6_esp = { >> - IAVF_PATTERN_HINT_IPV6}; >> -struct iavf_pattern_match_type phint_eth_ipv6_ah = { >> - IAVF_PATTERN_HINT_IPV6}; >> -struct iavf_pattern_match_type phint_eth_ipv6_l2tpv3 = { >> - IAVF_PATTERN_HINT_IPV6}; >> -struct iavf_pattern_match_type phint_eth_ipv6_pfcp = { >> - IAVF_PATTERN_HINT_IPV6_UDP}; >> +static struct iavf_pattern_match_type phint_empty = { >> + IAVF_PHINT_NONE}; >> +static struct iavf_pattern_match_type phint_eth_ipv4 = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_udp = { >> + IAVF_PHINT_IPV4_UDP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_tcp = { >> + IAVF_PHINT_IPV4_TCP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_sctp = { >> + IAVF_PHINT_IPV4_SCTP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv4 = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4 = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_udp >> = { >> + IAVF_PHINT_IPV4_UDP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_tcp = >> { >> + IAVF_PHINT_IPV4_TCP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_esp = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_udp_esp = { >> + IAVF_PHINT_IPV4_UDP}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_ah = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_l2tpv3 = { >> + IAVF_PHINT_IPV4}; >> +static struct iavf_pattern_match_type phint_eth_ipv4_pfcp = { >> + IAVF_PHINT_IPV4_UDP}; >> +static struct iavf_pattern_match_type phint_eth_vlan_ipv4 = { >> + IAVF_PHINT_C_VLAN}; >> +static struct iavf_pattern_match_type phint_eth_ipv6 = { >> + IAVF_PHINT_IPV6}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_udp = { >> + IAVF_PHINT_IPV6_UDP}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_tcp = { >> + IAVF_PHINT_IPV6_TCP}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_sctp = { >> + IAVF_PHINT_IPV6_SCTP}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_esp = { >> + IAVF_PHINT_IPV6}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_udp_esp = { >> + IAVF_PHINT_IPV6_UDP}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_ah = { >> + IAVF_PHINT_IPV6}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_l2tpv3 = { >> + IAVF_PHINT_IPV6}; >> +static struct iavf_pattern_match_type phint_eth_ipv6_pfcp = { >> + IAVF_PHINT_IPV6_UDP}; >> +static struct iavf_pattern_match_type phint_eth_vlan_ipv6 = { >> + IAVF_PHINT_C_VLAN}; > Add static can be in a separate patch. >> /** >> * Supported pattern for hash. >> @@ -131,26 +147,34 @@ static struct iavf_pattern_match_item >> iavf_hash_pattern_list[] = { >> {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 move 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 or 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 patch. > >> {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}, >> }; >> >> @@ -207,6 +231,28 @@ static struct iavf_pattern_match_item >> iavf_hash_pattern_list[] = { >> FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \ >> FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), {BUFF_NOUSED } } >> >> +#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[] = { >> FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \ >> FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), {BUFF_NOUSED } } >> >> +#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[] = { >> VIRTCHNL_PROTO_HDR_PFCP, \ >> FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID), >> {BUFF_NOUSED } } >> >> +/* ETH */ >> + >> struct virtchnl_proto_hdrs hdrs_hint_eth_src = { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_eth_src } >> }; >> @@ -315,6 +397,8 @@ struct virtchnl_proto_hdrs hdrs_hint_cvlan = { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_cvlan } >> }; >> >> +/* IPV4 */ >> + >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_src = { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_src } >> }; >> @@ -323,117 +407,77 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst = >> { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_dst } >> }; >> >> -struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up = { >> - 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 = { >> - 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 = { >> - 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 = { >> - TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, >> {proto_hint_gtpu_dwn_only, >> - proto_hint_ipv4_dst } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> - proto_hint_esp } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> - proto_hint_ah } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> - proto_hint_l2tpv3 } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> - proto_hint_pfcp } >> -}; >> - >> struct virtchnl_proto_hdrs hdrs_hint_ipv4 = { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4, >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot, >> proto_hint_udp } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4, >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot, >> proto_hint_tcp } >> }; >> >> @@ -472,105 +516,393 @@ struct virtchnl_proto_hdrs >> hdrs_hint_ipv4_sctp = { >> proto_hint_sctp } >> }; >> >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_src = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst } >> -}; >> - >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> +struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> proto_hint_esp } >> }; >> >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> +struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> proto_hint_ah } >> }; >> >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> +struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> proto_hint_l2tpv3 } >> }; >> >> -struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> +struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only, >> proto_hint_pfcp } >> }; >> >> +struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_esp = { >> + 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 = { >> + 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 = { >> + 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 = { >> + TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, >> {proto_hint_gtpu_ip_only, >> + proto_hint_ipv4 } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_teid_gtpu_ip = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + 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 = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst } >> +}; >> + >> struct virtchnl_proto_hdrs hdrs_hint_ipv6 = { >> TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6, >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot, >> proto_hint_udp } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp = { >> - TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6, >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot, >> proto_hint_tcp } >> }; >> >> @@ -595,12 +927,12 @@ struct virtchnl_proto_hdrs >> hdrs_hint_ipv6_dst_sctp_dst_port = { >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_src_port = { >> - 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 } >> }; >> >> struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_dst_port = { >> - 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 } >> }; >> >> @@ -609,337 +941,804 @@ struct virtchnl_proto_hdrs >> hdrs_hint_ipv6_sctp = { >> proto_hint_sctp } >> }; >> >> -/** >> - * 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[] = { >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> + proto_hint_esp } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> + proto_hint_ah } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> + proto_hint_l2tpv3 } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp = { >> + TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only, >> + proto_hint_pfcp } >> +}; >> + >> +struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp = { >> + 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[] = { >> /* 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[] = { >> + /* 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}, >> }; >> >> struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = { >> @@ -1037,10 +1836,12 @@ iavf_hash_init(struct iavf_adapter *ad) >> } >> >> 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 = pattern; >> + const struct rte_flow_item_gtp_psc *psc; >> >> for (item = pattern; item->type != 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; >> } >> - } >> >> - 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 = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) >> { >> - if (item->type == RTE_FLOW_ITEM_TYPE_GTP_PSC) { >> - const struct rte_flow_item_gtp_psc *psc = item->spec; >> - >> - if (psc && (psc->pdu_type == IAVF_GTPU_HINT_UPLINK || >> - psc->pdu_type == IAVF_GTPU_HINT_DOWNLINK)) { >> - *rss_type |= ETH_RSS_GTPU; >> - *gtpu_hint = psc->pdu_type; >> - } >> + switch (item->type) { >> + case RTE_FLOW_ITEM_TYPE_GTPU: >> + *phint |= IAVF_PHINT_IPV4_GTPU_IP; >> + break; >> + case RTE_FLOW_ITEM_TYPE_GTP_PSC: >> + psc = item->spec; >> + *phint &= ~IAVF_PHINT_IPV4_GTPU_IP; >> + if (!psc) >> + *phint |= IAVF_PHINT_IPV4_GTPU_EH; >> + else if (psc->pdu_type == IAVF_GTPU_EH_UPLINK) >> + *phint |= IAVF_PHINT_IPV4_GTPU_EH_UPLINK; >> + else if (psc->pdu_type == IAVF_GTPU_EH_DWNLINK) >> + *phint |= IAVF_PHINT_IPV4_GTPU_EH_DWNLINK; >> + break; >> + default: >> + break; >> } >> } >> + >> + /* update and restore pattern hint */ >> + *phint |= ((struct iavf_pattern_match_type *) >> + (pattern_match_item->meta))->pattern_hint; >> + >> + return 0; >> } >> >> 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 = (struct iavf_pattern_match_type >> *) >> - (pattern_match_item->meta); >> struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)*meta; >> - uint32_t type_list_len = RTE_DIM(iavf_hash_type_list); >> - struct iavf_hash_match_type *type_match_item; >> - enum iavf_gtpu_hint gtpu_hint = 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 = 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 = action->conf; >> rss_type = rss->types; >> >> - /** >> - * Check simultaneous use of SRC_ONLY and DST_ONLY >> - * of the same level. >> - */ >> - rss_type = 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 != >> - iavf_pattern_empty && rss->func == >> - 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 == >> + RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){ >> + rss_meta->rss_algorithm = >> + VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC; >> + } else if (rss->func == >> + RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { >> + rss_meta->rss_algorithm = >> + VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC; >> + } else { >> + rss_meta->rss_algorithm = >> + VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC; >> + } >> >> 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"); >> >> - /* Check hash function and save it to rss_meta. */ >> - if (rss->func == RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) >> - rss_meta->rss_algorithm = >> - VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC; >> - else if (rss->func == >> - RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) >> - rss_meta->rss_algorithm = >> - VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC; >> - else >> - rss_meta->rss_algorithm = >> - VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC; >> + /** >> + * Check simultaneous use of SRC_ONLY and DST_ONLY >> + * of the same level. >> + */ >> + rss_type = rte_eth_rss_hf_refine(rss_type); >> >> - type_match_item = >> - 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 = iavf_gtpu_hash_map_list; >> + mlist_len = RTE_DIM(iavf_gtpu_hash_map_list); >> + } else { >> + hash_map_list = iavf_hash_map_list; >> + mlist_len = RTE_DIM(iavf_hash_map_list); >> } >> >> /* Find matched proto hdrs according to hash type. */ >> - for (i = 0; i < type_list_len; i++) { >> + for (i = 0; i < mlist_len; i++) { >> struct iavf_hash_match_type *ht_map = >> - &iavf_hash_type_list[i]; >> + &hash_map_list[i]; >> if (rss_type == ht_map->hash_type && >> - mt->phint_type == ht_map->phint_type && >> - gtpu_hint == ht_map->gtpu_hint) { >> - type_match_item->hash_type = >> - ht_map->hash_type; >> - type_match_item->proto_hdrs = >> - ht_map->proto_hdrs; >> + pattern_hint == ht_map->pattern_hint) { >> rss_meta->proto_hdrs = >> - type_match_item->proto_hdrs; >> + ht_map->proto_hdrs; >> item_found = true; >> + break; >> } >> } >> >> - 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 = IAVF_PHINT_NONE; >> int ret = 0; >> >> rss_meta_ptr = 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; >> } >> >> - ret = iavf_hash_check_inset(pattern, error); >> + ret = iavf_hash_parse_pattern(pattern_match_item, pattern, &phint, >> + error); >> if (ret) >> goto error; >> >> - /* Check rss action. */ >> - ret = iavf_hash_parse_action(pattern_match_item, pattern, actions, >> + ret = iavf_hash_parse_action(actions, phint, >> (void **)&rss_meta_ptr, error); >> >> error: >> -- >> 2.20.1