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 77D48A04B1; Wed, 9 Sep 2020 10:22:20 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D21271BF8E; Wed, 9 Sep 2020 10:22:19 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 492E91BF8D for ; Wed, 9 Sep 2020 10:22:17 +0200 (CEST) IronPort-SDR: oegjQlU4Zfwk7VojYFWUSm+HhiJ0Xfx7nsfiP+PcUSY32rruO+vSmtE0Tth1qLRqdOPcTAnYnY 8w2uPZxLaDDg== X-IronPort-AV: E=McAfee;i="6000,8403,9738"; a="146006078" X-IronPort-AV: E=Sophos;i="5.76,409,1592895600"; d="scan'208";a="146006078" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 01:22:15 -0700 IronPort-SDR: Vwa1fpiNppAfintrQwerWN5ZVi0RVrj/YbVEQ6U0GlohZFBacW4n8forJK+mnyelKDoD+HsMcE rEJBQgKIRNTA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,409,1592895600"; d="scan'208";a="449116334" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by orsmga004.jf.intel.com with ESMTP; 09 Sep 2020 01:22:13 -0700 From: Jeff Guo To: jingjing.wu@intel.com, qi.z.zhang@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, jia.guo@intel.com Date: Wed, 9 Sep 2020 16:20:31 +0800 Message-Id: <20200909082031.28299-1-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v1] net/iavf: support gtpu outer and inner co-exist 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" Although currently only the gtpu inner hash be enabled while not the gtpu outer hash, but the outer protocol still needed to co-exist with inner protocol when configure the gtpu inner hash rule, that would allow the gtpu innner hash support for the different outer protocols. Signed-off-by: Jeff Guo --- drivers/net/iavf/iavf_hash.c | 183 +++++++++++++++++++++++++++-------- 1 file changed, 143 insertions(+), 40 deletions(-) diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index ff77d7135..ba0411dff 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -134,6 +134,7 @@ iavf_hash_parse_pattern_action(struct iavf_adapter *ad, #define TUNNEL_LEVEL_OUTER 0 #define TUNNEL_LEVEL_INNER 1 +#define TUNNEL_LEVEL_OUTER_AND_INNER 2 /* proto_hdrs template */ struct virtchnl_proto_hdrs outer_ipv4_tmplt = { @@ -256,6 +257,54 @@ struct virtchnl_proto_hdrs ipv6_pfcp_tmplt = { TUNNEL_LEVEL_OUTER, 2, {proto_hdr_ipv6, proto_hdr_pfcp} }; +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv4_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 3, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv4} +}; + +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv4_udp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv4, proto_hdr_udp} +}; + +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv4_tcp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv4, proto_hdr_tcp} +}; + +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv6_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 3, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv6} +}; + +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv6_udp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv6, proto_hdr_udp} +}; + +struct virtchnl_proto_hdrs outer_ipv4_udp_inner_ipv6_tcp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ipv6, proto_hdr_tcp} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv4_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 3, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv4} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv4_udp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv4, proto_hdr_udp} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv4_tcp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv4, proto_hdr_tcp} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv6_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 3, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv6} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv6_udp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv6, proto_hdr_udp} +}; + +struct virtchnl_proto_hdrs outer_ipv6_udp_inner_ipv6_tcp_tmplt = { + TUNNEL_LEVEL_OUTER_AND_INNER, 4, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_ipv6, proto_hdr_tcp} +}; + /* rss type super set */ /* IPv4 outer */ @@ -308,20 +357,50 @@ struct virtchnl_proto_hdrs ipv6_pfcp_tmplt = { ETH_RSS_NONFRAG_IPV6_TCP) #define IAVF_RSS_TYPE_INNER_IPV6_SCTP (ETH_RSS_IPV6 | \ ETH_RSS_NONFRAG_IPV6_SCTP) -/* GTPU IPv4 */ -#define IAVF_RSS_TYPE_GTPU_IPV4 (IAVF_RSS_TYPE_INNER_IPV4 | \ - ETH_RSS_GTPU) -#define IAVF_RSS_TYPE_GTPU_IPV4_UDP (IAVF_RSS_TYPE_INNER_IPV4_UDP | \ - ETH_RSS_GTPU) -#define IAVF_RSS_TYPE_GTPU_IPV4_TCP (IAVF_RSS_TYPE_INNER_IPV4_TCP | \ +/* GTPU outer IPv4 inner IPv4 */ +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV4 (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV4 | \ ETH_RSS_GTPU) -/* GTPU IPv6 */ -#define IAVF_RSS_TYPE_GTPU_IPV6 (IAVF_RSS_TYPE_INNER_IPV6 | \ +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV4_UDP (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV4_UDP | \ + ETH_RSS_GTPU) +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV4_TCP (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV4_TCP | \ + ETH_RSS_GTPU) + +/* GTPU outer IPv4 inner IPv6 */ +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV6 (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV6 | \ ETH_RSS_GTPU) -#define IAVF_RSS_TYPE_GTPU_IPV6_UDP (IAVF_RSS_TYPE_INNER_IPV6_UDP | \ +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV6_UDP (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV6_UDP | \ + ETH_RSS_GTPU) +#define IAVF_RSS_TYPE_IPV4_GTPU_IPV6_TCP (IAVF_RSS_TYPE_OUTER_IPV4 | \ + IAVF_RSS_TYPE_INNER_IPV6_TCP | \ + ETH_RSS_GTPU) + +/* GTPU outer IPv6 inner IPv4 */ +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV4 (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV4 | \ ETH_RSS_GTPU) -#define IAVF_RSS_TYPE_GTPU_IPV6_TCP (IAVF_RSS_TYPE_INNER_IPV6_TCP | \ +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV4_UDP (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV4_UDP | \ + ETH_RSS_GTPU) +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV4_TCP (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV4_TCP | \ + ETH_RSS_GTPU) + +/* GTPU outer IPv6 inner IPv6 */ +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV6 (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV6 | \ ETH_RSS_GTPU) +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV6_UDP (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV6_UDP | \ + ETH_RSS_GTPU) +#define IAVF_RSS_TYPE_IPV6_GTPU_IPV6_TCP (IAVF_RSS_TYPE_OUTER_IPV6 | \ + IAVF_RSS_TYPE_INNER_IPV6_TCP | \ + ETH_RSS_GTPU) + /* ESP, AH, L2TPV3 and PFCP */ #define IAVF_RSS_TYPE_IPV4_ESP (ETH_RSS_ESP | ETH_RSS_IPV4) #define IAVF_RSS_TYPE_IPV4_AH (ETH_RSS_AH | ETH_RSS_IPV4) @@ -348,18 +427,18 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = { {iavf_pattern_eth_vlan_ipv4_udp, IAVF_RSS_TYPE_VLAN_IPV4_UDP, &outer_ipv4_udp_tmplt}, {iavf_pattern_eth_vlan_ipv4_tcp, IAVF_RSS_TYPE_VLAN_IPV4_TCP, &outer_ipv4_tcp_tmplt}, {iavf_pattern_eth_vlan_ipv4_sctp, IAVF_RSS_TYPE_VLAN_IPV4_SCTP, &outer_ipv4_sctp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv4, IAVF_RSS_TYPE_GTPU_IPV4, &inner_ipv4_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv4_udp, IAVF_RSS_TYPE_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv4_tcp, IAVF_RSS_TYPE_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv4, IAVF_RSS_TYPE_GTPU_IPV4, &inner_ipv4_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv4_udp, IAVF_RSS_TYPE_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv4_tcp, IAVF_RSS_TYPE_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv4, IAVF_RSS_TYPE_GTPU_IPV4, &inner_ipv4_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_udp, IAVF_RSS_TYPE_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp, IAVF_RSS_TYPE_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv4, IAVF_RSS_TYPE_GTPU_IPV4, &inner_ipv4_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_udp, IAVF_RSS_TYPE_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp, IAVF_RSS_TYPE_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv4, IAVF_RSS_TYPE_IPV4_GTPU_IPV4, &outer_ipv4_udp_inner_ipv4_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv4_udp, IAVF_RSS_TYPE_IPV4_GTPU_IPV4_UDP, &outer_ipv4_udp_inner_ipv4_udp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv4_tcp, IAVF_RSS_TYPE_IPV4_GTPU_IPV4_TCP, &outer_ipv4_udp_inner_ipv4_tcp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv4, IAVF_RSS_TYPE_IPV6_GTPU_IPV4, &outer_ipv6_udp_inner_ipv4_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv4_udp, IAVF_RSS_TYPE_IPV6_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv4_tcp, IAVF_RSS_TYPE_IPV6_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv4, IAVF_RSS_TYPE_IPV4_GTPU_IPV4, &outer_ipv4_udp_inner_ipv4_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_udp, IAVF_RSS_TYPE_IPV4_GTPU_IPV4_UDP, &outer_ipv4_udp_inner_ipv4_udp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp, IAVF_RSS_TYPE_IPV4_GTPU_IPV4_TCP, &outer_ipv4_udp_inner_ipv4_tcp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv4, IAVF_RSS_TYPE_IPV6_GTPU_IPV4, &inner_ipv4_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_udp, IAVF_RSS_TYPE_IPV6_GTPU_IPV4_UDP, &inner_ipv4_udp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp, IAVF_RSS_TYPE_IPV6_GTPU_IPV4_TCP, &inner_ipv4_tcp_tmplt}, {iavf_pattern_eth_ipv4_esp, IAVF_RSS_TYPE_IPV4_ESP, &ipv4_esp_tmplt}, {iavf_pattern_eth_ipv4_udp_esp, IAVF_RSS_TYPE_IPV4_ESP, &ipv4_udp_esp_tmplt}, {iavf_pattern_eth_ipv4_ah, IAVF_RSS_TYPE_IPV4_AH, &ipv4_ah_tmplt}, @@ -374,18 +453,18 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = { {iavf_pattern_eth_vlan_ipv6_udp, IAVF_RSS_TYPE_VLAN_IPV6_UDP, &outer_ipv6_udp_tmplt}, {iavf_pattern_eth_vlan_ipv6_tcp, IAVF_RSS_TYPE_VLAN_IPV6_TCP, &outer_ipv6_tcp_tmplt}, {iavf_pattern_eth_vlan_ipv6_sctp, IAVF_RSS_TYPE_VLAN_IPV6_SCTP, &outer_ipv6_sctp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv6, IAVF_RSS_TYPE_GTPU_IPV6, &inner_ipv6_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv6_udp, IAVF_RSS_TYPE_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_ipv6_tcp, IAVF_RSS_TYPE_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv6, IAVF_RSS_TYPE_GTPU_IPV6, &inner_ipv6_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv6_udp, IAVF_RSS_TYPE_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_ipv6_tcp, IAVF_RSS_TYPE_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv6, IAVF_RSS_TYPE_GTPU_IPV6, &inner_ipv6_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_udp, IAVF_RSS_TYPE_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, - {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp, IAVF_RSS_TYPE_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv6, IAVF_RSS_TYPE_GTPU_IPV6, &inner_ipv6_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_udp, IAVF_RSS_TYPE_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, - {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp, IAVF_RSS_TYPE_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv6, IAVF_RSS_TYPE_IPV4_GTPU_IPV6, &outer_ipv4_udp_inner_ipv6_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv6_udp, IAVF_RSS_TYPE_IPV4_GTPU_IPV6_UDP, &outer_ipv4_udp_inner_ipv6_udp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_ipv6_tcp, IAVF_RSS_TYPE_IPV4_GTPU_IPV6_TCP, &outer_ipv4_udp_inner_ipv6_tcp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv6, IAVF_RSS_TYPE_IPV6_GTPU_IPV6, &inner_ipv6_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv6_udp, IAVF_RSS_TYPE_IPV6_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_ipv6_tcp, IAVF_RSS_TYPE_IPV6_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv6, IAVF_RSS_TYPE_IPV4_GTPU_IPV6, &outer_ipv4_udp_inner_ipv6_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_udp, IAVF_RSS_TYPE_IPV4_GTPU_IPV6_UDP, &outer_ipv4_udp_inner_ipv6_udp_tmplt}, + {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp, IAVF_RSS_TYPE_IPV4_GTPU_IPV6_TCP, &outer_ipv4_udp_inner_ipv6_tcp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv6, IAVF_RSS_TYPE_IPV6_GTPU_IPV6, &inner_ipv6_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_udp, IAVF_RSS_TYPE_IPV6_GTPU_IPV6_UDP, &inner_ipv6_udp_tmplt}, + {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp, IAVF_RSS_TYPE_IPV6_GTPU_IPV6_TCP, &inner_ipv6_tcp_tmplt}, {iavf_pattern_eth_ipv6_esp, IAVF_RSS_TYPE_IPV6_ESP, &ipv6_esp_tmplt}, {iavf_pattern_eth_ipv6_udp_esp, IAVF_RSS_TYPE_IPV6_ESP, &ipv6_udp_esp_tmplt}, {iavf_pattern_eth_ipv6_ah, IAVF_RSS_TYPE_IPV6_AH, &ipv6_ah_tmplt}, @@ -668,18 +747,42 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs, /* refine proto hdrs base on gtpu rss type */ static void -iavf_refine_proto_hdrs_gtpu(struct virtchnl_proto_hdrs *proto_hdrs, - uint64_t rss_type) +iavf_refine_proto_hdrs_gtpu(struct virtchnl_proto_hdrs *proto_hdrs) { struct virtchnl_proto_hdr *hdr; + bool is_inner_ipv4 = false; + bool is_inner_ipv6 = false; + bool is_inner_udp = false; + bool is_inner_tcp = false; int i; - if (!(rss_type & ETH_RSS_GTPU)) - return; - for (i = 0; i < proto_hdrs->count; i++) { hdr = &proto_hdrs->proto_hdr[i]; switch (hdr->type) { + case VIRTCHNL_PROTO_HDR_IPV4: + if (!is_inner_ipv4) { + hdr->field_selector = 0; + is_inner_ipv4 = true; + } + break; + case VIRTCHNL_PROTO_HDR_IPV6: + if (!is_inner_ipv6) { + hdr->field_selector = 0; + is_inner_ipv6 = true; + } + break; + case VIRTCHNL_PROTO_HDR_UDP: + if (!is_inner_udp) { + hdr->field_selector = 0; + is_inner_udp = true; + } + break; + case VIRTCHNL_PROTO_HDR_TCP: + if (!is_inner_tcp) { + hdr->field_selector = 0; + is_inner_tcp = true; + } + break; case VIRTCHNL_PROTO_HDR_GTPU_IP: VIRTCHNL_ADD_PROTO_HDR_FIELD(hdr, VIRTCHNL_PROTO_HDR_GTPU_IP_TEID); @@ -730,7 +833,7 @@ static void iavf_refine_proto_hdrs(struct virtchnl_proto_hdrs *proto_hdrs, { iavf_refine_proto_hdrs_l234(proto_hdrs, rss_type); iavf_refine_proto_hdrs_by_pattern(proto_hdrs, phint); - iavf_refine_proto_hdrs_gtpu(proto_hdrs, rss_type); + iavf_refine_proto_hdrs_gtpu(proto_hdrs); } static uint64_t invalid_rss_comb[] = { -- 2.20.1