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 063C7A04AB; Mon, 31 Aug 2020 10:32:45 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 997CA137D; Mon, 31 Aug 2020 10:32:44 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id E7F58A3; Mon, 31 Aug 2020 10:32:42 +0200 (CEST) IronPort-SDR: i465ZkCdQkcjp2GS4o1QvGQXp9Idnx0NqCoNkswVRn7wnm1mEdtFJ/UJvYQ+7Zf1ZnqaLKdlxG su+hI3DXhQTQ== X-IronPort-AV: E=McAfee;i="6000,8403,9729"; a="136983804" X-IronPort-AV: E=Sophos;i="5.76,375,1592895600"; d="scan'208";a="136983804" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2020 01:32:41 -0700 IronPort-SDR: wiSVpgLwGjtLXVALAN532un4g3nl68S60B37fPT7SHx71YNPjlVOtOyG2I60zVBdHF8hT6El/u RFsmMbMEM1Tg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,375,1592895600"; d="scan'208";a="374745699" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga001.jf.intel.com with ESMTP; 31 Aug 2020 01:32:41 -0700 Received: from shsmsx605.ccr.corp.intel.com (10.109.6.215) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 31 Aug 2020 01:32:40 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX605.ccr.corp.intel.com (10.109.6.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 31 Aug 2020 16:32:38 +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, 31 Aug 2020 16:32:38 +0800 From: "Huang, ZhiminX" To: "Zhao1, Wei" , "dev@dpdk.org" CC: "stable@dpdk.org" , "Zhang, Qi Z" , "Zhao1, Wei" Thread-Topic: [dpdk-dev] [PATCH v4] net/ice: fix FDIR GTPU rule create fail Thread-Index: AQHWf2f/PBZ2s1Mpf0qrwOABTrPLj6lR4ZMg Date: Mon, 31 Aug 2020 08:32:38 +0000 Message-ID: <11b6bd92a15741628e963dae9d20a7a2@intel.com> References: <20200828011113.47466-1-wei.zhao1@intel.com> <20200831065817.30923-1-wei.zhao1@intel.com> In-Reply-To: <20200831065817.30923-1-wei.zhao1@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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 v4] net/ice: fix FDIR GTPU rule create fail 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" Tested-by: Huang, ZhiminX Regards, HuangZhiMin -----Original Message----- From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Zhao Sent: Monday, August 31, 2020 2:58 PM To: dev@dpdk.org Cc: stable@dpdk.org; Zhang, Qi Z ; Zhao1, Wei Subject: [dpdk-dev] [PATCH v4] net/ice: fix FDIR GTPU rule create fail For GTPU rule without extend header the trainning packet for FDIR is differ= ent. This patch enable these case. Fixes: 934fd00c9389 ("net/ice/base: fix GTPU IP hash") Cc: stable@dpdk.org Signed-off-by: Wei Zhao Tested-by: Huang ZhiminX --- v3: fix typo v4: fix bug --- drivers/net/ice/base/ice_fdir.c | 65 ++++++++++++++++++++++++- drivers/net/ice/base/ice_type.h | 2 + drivers/net/ice/ice_fdir_filter.c | 80 +++++++++++++------------------ 3 files changed, 98 insertions(+), 49 deletions(-) diff --git a/drivers/net/ice/base/ice_fdir.c b/drivers/net/ice/base/ice_fdi= r.c index 2c47fb57b..aea388f2a 100644 --- a/drivers/net/ice/base/ice_fdir.c +++ b/drivers/net/ice/base/ice_fdir.c @@ -89,6 +89,37 @@ static const u8 ice_fdir_icmp4_gtpu4_pkt[] =3D { }; =20 static const u8 ice_fdir_ipv4_gtpu4_pkt[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, + 0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xff, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x45, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, +}; + +static const u8 ice_fdir_ipv6_gtpu6_pkt[] =3D { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x68, + 0x08, 0x68, 0x00, 0x44, 0x7f, 0xed, 0x33, 0xff, + 0x00, 0x34, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, + 0x00, 0x85, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, +}; + +static const u8 ice_fdir_ipv4_gtpu4_eh_pkt[] =3D { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, @@ -102,7 +133,7 @@ stati= c const u8 ice_fdir_ipv4_gtpu4_pkt[] =3D { 0x00, 0x00, }; =20 -static const u8 ice_fdir_ipv6_gtpu6_pkt[] =3D { +static const u8 ice_fdir_ipv6_gtpu6_eh_pkt[] =3D { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00, @@ -492,6 +523,20 @@ stat= ic const struct ice_fdir_base_pkt ice_fdir_pkt[] =3D { sizeof(ice_fdir_ipv6_gtpu6_pkt), ice_fdir_ipv6_gtpu6_pkt, }, + { + ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER, + sizeof(ice_fdir_ipv4_gtpu4_eh_pkt), + ice_fdir_ipv4_gtpu4_eh_pkt, + sizeof(ice_fdir_ipv4_gtpu4_eh_pkt), + ice_fdir_ipv4_gtpu4_eh_pkt, + }, + { + ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER, + sizeof(ice_fdir_ipv6_gtpu6_eh_pkt), + ice_fdir_ipv6_gtpu6_eh_pkt, + sizeof(ice_fdir_ipv6_gtpu6_eh_pkt), + ice_fdir_ipv6_gtpu6_eh_pkt, + }, { ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3, sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt, @@ -1049,10 = +1094,18 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fl= tr *input, input->ip.v4.proto); ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac); break; + case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER: + ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET, + input->ip.v4.src_ip); + ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET, + input->ip.v4.dst_ip); + ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET, + input->gtpu_data.teid); + break; case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP: case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP: case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP: - case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER: + case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER: ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET, input->ip.v4.src_ip); ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET, @@ -1063,6 +1116,14 @@= ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input, input->gtpu_data.qfi); break; case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER: + ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET, + input->ip.v6.src_ip); + ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET, + input->ip.v6.dst_ip); + ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET, + input->gtpu_data.teid); + break; + case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER: ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET, input->ip.v6.src_ip); ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET, diff --git a/dri= vers/net/ice/base/ice_type.h b/drivers/net/ice/base/ice_type.h index c13cd7= b00..3775689a9 100644 --- a/drivers/net/ice/base/ice_type.h +++ b/drivers/net/ice/base/ice_type.h @@ -297,6 +297,8 @@ enum ice_fltr_ptype { ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP, ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER, ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER, + ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER, + ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER, ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3, ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3, ICE_FLTR_PTYPE_NONF_IPV4_ESP, diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_f= ilter.c index 745d7291a..c4b7265ce 100644 --- a/drivers/net/ice/ice_fdir_filter.c +++ b/drivers/net/ice/ice_fdir_filter.c @@ -778,30 +778,15 @@ ice_fdir_cross_prof_conflict(struct ice_pf *pf, goto err; break; case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER: - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER; + cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP; if (!ice_fdir_prof_resolve_conflict (pf, cflct_ptype, is_tunnel)) goto err; - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER; + cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP; if (!ice_fdir_prof_resolve_conflict (pf, cflct_ptype, is_tunnel)) goto err; - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER; - if (!ice_fdir_prof_resolve_conflict - (pf, cflct_ptype, is_tunnel)) - goto err; - break; - /* IPv6 GTPU */ - case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER: - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER; - if (!ice_fdir_prof_resolve_conflict - (pf, cflct_ptype, is_tunnel)) - goto err; - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER; - if (!ice_fdir_prof_resolve_conflict - (pf, cflct_ptype, is_tunnel)) - goto err; - cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER; + cflct_ptype =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP; if (!ice_fdir_prof_resolve_conflict (pf, cflct_ptype, is_tunnel)) goto err; @@ -1025,30 +1010,26 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice= _fltr_ptype flow, case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP: case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP: case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER: - if (ttype =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU) - ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_IP | - ICE_FLOW_SEG_HDR_IPV4 | - ICE_FLOW_SEG_HDR_IPV_OTHER); - else if (ttype =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH) - ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH | - ICE_FLOW_SEG_HDR_GTPU_IP | - ICE_FLOW_SEG_HDR_IPV4 | - ICE_FLOW_SEG_HDR_IPV_OTHER); - else - PMD_DRV_LOG(ERR, "not supported tunnel type."); + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER); + break; + case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER); break; case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER: - if (ttype =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU) - ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_IP | - ICE_FLOW_SEG_HDR_IPV6 | - ICE_FLOW_SEG_HDR_IPV_OTHER); - else if (ttype =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH) - ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH | - ICE_FLOW_SEG_HDR_GTPU_IP | - ICE_FLOW_SEG_HDR_IPV6 | - ICE_FLOW_SEG_HDR_IPV_OTHER); - else - PMD_DRV_LOG(ERR, "not supported tunnel type."); + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER); + break; + case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER); break; case ICE_FLTR_PTYPE_NON_IP_L2: ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_ETH_NON_IP); @@ -2007,13 +1988,1= 8 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad, } } =20 - if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU || - tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH) { - if (flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV4_UDP) - flow_type =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER; - else - flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER; - } + if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV4_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV4_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV6_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV6_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER; =20 filter->tunnel_type =3D tunnel_type; filter->input.flow_type =3D flow_type; -- 2.19.1