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 61A6EA04C9; Mon, 14 Sep 2020 12:33:08 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A956FFFA; Mon, 14 Sep 2020 12:33:07 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id B6B25E07 for ; Mon, 14 Sep 2020 12:33:06 +0200 (CEST) IronPort-SDR: W4n6t58WxkYjQby1DKM635QHVYvJzulGZfffM6E3TFiDdRp9YNHYyGrxPBhPMBk3d6iNmXTHOh miC/vWQHat6g== X-IronPort-AV: E=McAfee;i="6000,8403,9743"; a="146795561" X-IronPort-AV: E=Sophos;i="5.76,425,1592895600"; d="scan'208";a="146795561" 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; 14 Sep 2020 03:33:05 -0700 IronPort-SDR: w+qqMY1hqtSGLkWVZ4T1wbqUu0RTUHF6IoxDHMqJuDObR6KCEZGTBbpAEpmCFVJO0zg4la5HXK iLMACBuhRF+g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,425,1592895600"; d="scan'208";a="450823579" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga004.jf.intel.com with ESMTP; 14 Sep 2020 03:33:05 -0700 Received: from shsmsx604.ccr.corp.intel.com (10.109.6.214) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 14 Sep 2020 03:33:04 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX604.ccr.corp.intel.com (10.109.6.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 14 Sep 2020 18:33:02 +0800 Received: from shsmsx601.ccr.corp.intel.com ([10.109.6.141]) by SHSMSX601.ccr.corp.intel.com ([10.109.6.141]) with mapi id 15.01.1713.004; Mon, 14 Sep 2020 18:33:02 +0800 From: "Zhang, Qi Z" To: "Zhang, AlvinX" , "Guo, Jia" CC: "dev@dpdk.org" Thread-Topic: [PATCH v5] net/iavf: support outer IP hash for no inner GTPU Thread-Index: AQHWinZvp6Fjv9KZfEOxR8ta1OdG9Kln71Mg Date: Mon, 14 Sep 2020 10:33:02 +0000 Message-ID: <66caca1e210445e38955d8cc5cdb3319@intel.com> References: <20200910032623.38168-1-alvinx.zhang@intel.com> <20200914090316.49740-1-alvinx.zhang@intel.com> In-Reply-To: <20200914090316.49740-1-alvinx.zhang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [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" > -----Original Message----- > From: Zhang, AlvinX > Sent: Monday, September 14, 2020 5:03 PM > To: Guo, Jia ; Zhang, Qi Z > Cc: dev@dpdk.org; Zhang, AlvinX > Subject: [PATCH v5] net/iavf: support outer IP hash for no inner GTPU >=20 > From: Alvin Zhang >=20 > Outer IP hash can be configured as input sets for no inner GTPU packets. >=20 > Signed-off-by: Alvin Zhang > --- >=20 > V2: Modify codes according to comments. > V3: Refact all codes. > V4: Fix compatibility issues. > V5: Modify codes according to comments. >=20 > drivers/net/iavf/iavf_hash.c | 48 ++++++++++++++++++++++++++------------= ------ > 1 file changed, 28 insertions(+), 20 deletions(-) >=20 > 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 =3D { > {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 =3D { > {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[] =3D { > struct virtchnl_proto_hdr *hdr2; > int i; >=20 > - if (!(phint & IAVF_PHINT_GTPU_MSK) || > - proto_hdrs->tunnel_level =3D=3D 0) > + if (!(phint & IAVF_PHINT_GTPU_MSK)) > return; >=20 > - /* shift headers 1 layer */ > - for (i =3D proto_hdrs->count; i > 0; i--) { > - hdr1 =3D &proto_hdrs->proto_hdr[i]; > - hdr2 =3D &proto_hdrs->proto_hdr[i - 1]; > + if (proto_hdrs->tunnel_level =3D=3D TUNNEL_LEVEL_INNER) { > + /* shift headers 1 layer */ > + for (i =3D proto_hdrs->count; i > 0; i--) { > + hdr1 =3D &proto_hdrs->proto_hdr[i]; > + hdr2 =3D &proto_hdrs->proto_hdr[i - 1]; >=20 > - *hdr1 =3D *hdr2; > - } > + *hdr1 =3D *hdr2; > + } >=20 > - /* adding gtpu header at layer 0 */ > - proto_hdrs->count++; > - hdr1 =3D &proto_hdrs->proto_hdr[0]; > - hdr1->field_selector =3D 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 =3D &proto_hdrs->proto_hdr[0]; > + hdr1->field_selector =3D 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 =3D &proto_hdrs->proto_hdr[proto_hdrs->count]; > + hdr1->field_selector =3D 0; > + proto_hdrs->count++; > VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_IP); Its better to also check phint for outer case, could be implemented as belo= w If (inner) { Shift=20 Hdr =3D hdrs[0] } else { Hdr =3D hdrs[count] } hdr-count++ 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) =09 VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_EH); else if (phint & IAVF_PHINT_GTPU) VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, GTPU_IP); > + } > } >=20 > static void iavf_refine_proto_hdrs(struct virtchnl_proto_hdrs *proto_hdr= s, > -- > 1.8.3.1