From patchwork Mon Sep 14 09:03:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alvin Zhang X-Patchwork-Id: 77595 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 302C4A04C9; Mon, 14 Sep 2020 11:07:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 154E01C0C2; Mon, 14 Sep 2020 11:07:14 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 9F0ADDE0 for ; Mon, 14 Sep 2020 11:07:12 +0200 (CEST) IronPort-SDR: PqedCjkxa0t5cR8qiHVVtAsetkzDwfMBU+EB9YaaxJBBhB/VzfDnoZsu9rRSEgZI3DLi66diat SAfRcE+grsJg== X-IronPort-AV: E=McAfee;i="6000,8403,9743"; a="177107055" X-IronPort-AV: E=Sophos;i="5.76,425,1592895600"; d="scan'208";a="177107055" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2020 02:07:11 -0700 IronPort-SDR: O1dEx+6MdXB8UW2s9JveEVWW1XJzCJH2XGehgvwX7pDMgFOS8FZ6+GGiM6iT879IwWadvt8WXi UJwNTObAnIqg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,425,1592895600"; d="scan'208";a="319001040" Received: from shwdenpg235.ccr.corp.intel.com ([10.240.182.60]) by orsmga002.jf.intel.com with ESMTP; 14 Sep 2020 02:07:09 -0700 From: alvinx.zhang@intel.com To: jia.guo@intel.com, qi.z.zhang@intel.com Cc: dev@dpdk.org, Alvin Zhang Date: Mon, 14 Sep 2020 17:03:15 +0800 Message-Id: <20200914090316.49740-1-alvinx.zhang@intel.com> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20200910032623.38168-1-alvinx.zhang@intel.com> References: <20200910032623.38168-1-alvinx.zhang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v5] net/iavf: support outer IP hash for no inner 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" From: Alvin Zhang Outer IP hash can be configured as input sets for no inner GTPU packets. Signed-off-by: Alvin Zhang --- V2: Modify codes according to comments. V3: Refact all codes. V4: Fix compatibility issues. V5: Modify codes according to comments. drivers/net/iavf/iavf_hash.c | 48 ++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index ff77d71..d0a6396 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -348,6 +348,7 @@ struct virtchnl_proto_hdrs ipv6_pfcp_tmplt = { {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, ETH_RSS_IPV4, &outer_ipv4_udp_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}, @@ -374,6 +375,7 @@ struct virtchnl_proto_hdrs ipv6_pfcp_tmplt = { {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_ipv6_gtpu, ETH_RSS_IPV6, &outer_ipv6_udp_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}, @@ -698,31 +700,37 @@ struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = { struct virtchnl_proto_hdr *hdr2; int i; - if (!(phint & IAVF_PHINT_GTPU_MSK) || - proto_hdrs->tunnel_level == 0) + if (!(phint & IAVF_PHINT_GTPU_MSK)) return; - /* shift headers 1 layer */ - for (i = proto_hdrs->count; i > 0; i--) { - hdr1 = &proto_hdrs->proto_hdr[i]; - hdr2 = &proto_hdrs->proto_hdr[i - 1]; + if (proto_hdrs->tunnel_level == TUNNEL_LEVEL_INNER) { + /* shift headers 1 layer */ + for (i = proto_hdrs->count; i > 0; i--) { + hdr1 = &proto_hdrs->proto_hdr[i]; + hdr2 = &proto_hdrs->proto_hdr[i - 1]; - *hdr1 = *hdr2; - } + *hdr1 = *hdr2; + } - /* adding gtpu header at layer 0 */ - proto_hdrs->count++; - hdr1 = &proto_hdrs->proto_hdr[0]; - hdr1->field_selector = 0; - - if (phint & IAVF_PHINT_GTPU_EH_DWN) - VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH_PDU_DWN); - else if (phint & IAVF_PHINT_GTPU_EH_UP) - VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH_PDU_UP); - else if (phint & IAVF_PHINT_GTPU_EH) - VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH); - else if (phint & IAVF_PHINT_GTPU) + /* adding gtpu header at layer 0 */ + proto_hdrs->count++; + hdr1 = &proto_hdrs->proto_hdr[0]; + hdr1->field_selector = 0; + + if (phint & IAVF_PHINT_GTPU_EH_DWN) + VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH_PDU_DWN); + else if (phint & IAVF_PHINT_GTPU_EH_UP) + VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH_PDU_UP); + else if (phint & IAVF_PHINT_GTPU_EH) + VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH); + else if (phint & IAVF_PHINT_GTPU) + VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_IP); + } else { + hdr1 = &proto_hdrs->proto_hdr[proto_hdrs->count]; + hdr1->field_selector = 0; + proto_hdrs->count++; VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_IP); + } } static void iavf_refine_proto_hdrs(struct virtchnl_proto_hdrs *proto_hdrs,