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 BD77EA052B; Thu, 30 Jul 2020 11:26:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A2AED1BFE7; Thu, 30 Jul 2020 11:26:46 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id B3DB337B7 for ; Thu, 30 Jul 2020 11:26:44 +0200 (CEST) IronPort-SDR: ETakm0Mt3ZartMat250vLQAWpBjapfuOLDHQqsRo4bgNy4MuwArtjXiOfuYfjT4GU9bmQ9/CiW zktmQBSHW6Yg== X-IronPort-AV: E=McAfee;i="6000,8403,9697"; a="150738598" X-IronPort-AV: E=Sophos;i="5.75,413,1589266800"; d="scan'208";a="150738598" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jul 2020 02:26:43 -0700 IronPort-SDR: smYmTt1HULAeYKuNsRuMWj1Ho3RNLIMTX5ygq+NhBPz6l6KuODEN6C26ojmFMotbaXlUSAWgFI Xdg8Bx2d8Mng== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,413,1589266800"; d="scan'208";a="365117421" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga001.jf.intel.com with ESMTP; 30 Jul 2020 02:26:43 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Jul 2020 02:26:42 -0700 Received: from cdsmsx103.ccr.corp.intel.com (172.17.3.37) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Jul 2020 02:26:42 -0700 Received: from cdsmsx102.ccr.corp.intel.com ([169.254.2.201]) by CDSMSX103.ccr.corp.intel.com ([169.254.5.225]) with mapi id 14.03.0439.000; Thu, 30 Jul 2020 17:26:38 +0800 From: "Huang, ZhiminX" To: "Zhao1, Wei" , "dev@dpdk.org" CC: "Zhang, Qi Z" , "Zhao1, Wei" Thread-Topic: [dpdk-dev] [PATCH] net/ice: fix FDIR GTPU rule create fail Thread-Index: AQHWZk9xi3SkFdABsEWjNUBg3/L7H6kf196g Date: Thu, 30 Jul 2020 09:26:37 +0000 Message-ID: <1DCDE90B92229844B9E6C0E67C1C8D6B046EAB3C@CDSMSX102.ccr.corp.intel.com> References: <20200730083034.21616-1-wei.zhao1@intel.com> In-Reply-To: <20200730083034.21616-1-wei.zhao1@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.17.6.105] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] 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: Thursday, July 30, 2020 4:31 PM To: dev@dpdk.org Cc: Zhang, Qi Z ; Zhao1, Wei Subject: [dpdk-dev] [PATCH] net/ice: fix FDIR GTPU rule create fail For GTPU rule with extend header of DOWN and UP link PDU type, it should us= e different trainning packet, also for GTPU rule without extend header the = trainning packet for FDIR is also different. This patch enable these case. Fixes: 934fd00c9389 ("net/ice/base: fix GTPU IP hash") Signed-off-by: Wei Zhao --- drivers/net/ice/base/ice_fdir.c | 161 +++++++++++++++++++++++++++++- drivers/net/ice/base/ice_type.h | 6 ++ drivers/net/ice/ice_ethdev.h | 4 + drivers/net/ice/ice_fdir_filter.c | 146 +++++++++++++++++---------- drivers/net/ice/ice_hash.c | 3 - 5 files changed, 265 insertions(+), 55 deletions(-) diff --git a/drivers/net/ice/base/ice_fdir.c b/drivers/net/ice/base/ice_fdi= r.c index 2c47fb57b..724109637 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,73 @@ stat= ic 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_ipv4_gtpu4_down_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, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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_ipv4_gtpu4_up_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, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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_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, + 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, 0x34, 0xff, + 0x00, 0x34, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, + 0x00, 0x85, 0x02, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 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_ipv6_gtpu6_down_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, 0x34, 0xff, + 0x00, 0x34, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, + 0x00, 0x85, 0x02, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 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_ipv6_gtpu6_up_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 +589,48 @@ 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_IPV4_GTPU_DOWN_IPV4_OTHER, + sizeof(ice_fdir_ipv4_gtpu4_down_pkt), + ice_fdir_ipv4_gtpu4_down_pkt, + sizeof(ice_fdir_ipv4_gtpu4_down_pkt), + ice_fdir_ipv4_gtpu4_eh_pkt, + }, + { + ICE_FLTR_PTYPE_NONF_IPV4_GTPU_UP_IPV4_OTHER, + sizeof(ice_fdir_ipv4_gtpu4_up_pkt), + ice_fdir_ipv4_gtpu4_up_pkt, + sizeof(ice_fdir_ipv4_gtpu4_up_pkt), + ice_fdir_ipv4_gtpu4_up_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_IPV6_GTPU_DOWN_IPV6_OTHER, + sizeof(ice_fdir_ipv6_gtpu6_down_pkt), + ice_fdir_ipv6_gtpu6_down_pkt, + sizeof(ice_fdir_ipv6_gtpu6_down_pkt), + ice_fdir_ipv6_gtpu6_down_pkt, + }, + { + ICE_FLTR_PTYPE_NONF_IPV6_GTPU_UP_IPV6_OTHER, + sizeof(ice_fdir_ipv6_gtpu6_up_pkt), + ice_fdir_ipv6_gtpu6_up_pkt, + sizeof(ice_fdir_ipv6_gtpu6_up_pkt), + ice_fdir_ipv6_gtpu6_up_pkt, + }, { ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3, sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt, @@ -1053,6 += 1192,16 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_flt= r *input, 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: + 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_EH_IPV4_OTHER: + case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_DOWN_IPV4_OTHER: + case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_UP_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 +1212,16 @@= 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: + case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_DOWN_IPV6_OTHER: + case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_UP_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..5d119b2a3 100644 --- a/drivers/net/ice/base/ice_type.h +++ b/drivers/net/ice/base/ice_type.h @@ -297,6 +297,12 @@ 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_GTPU_UP_IPV4_OTHER, + ICE_FLTR_PTYPE_NONF_IPV4_GTPU_DOWN_IPV4_OTHER, + ICE_FLTR_PTYPE_NONF_IPV6_GTPU_UP_IPV6_OTHER, + ICE_FLTR_PTYPE_NONF_IPV6_GTPU_DOWN_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_ethdev.h b/drivers/net/ice/ice_ethdev.h in= dex 2bff735ca..95a1dae92 100644 --- a/drivers/net/ice/ice_ethdev.h +++ b/drivers/net/ice/ice_ethdev.h @@ -41,6 +41,8 @@ #define ICE_RX_VEC_ID RTE_INTR_VEC_RXTX_OFFSET =20 #define ICE_MAX_PKT_TYPE 1024 +#define ICE_GTPU_EH_DWNLINK 0 +#define ICE_GTPU_EH_UPLINK 1 =20 /* DDP package search path */ #define ICE_PKG_FILE_DEFAULT "/lib/firmware/intel/ice/ddp/ice.pkg" @@ -264,6 +266,8 @@ enum ice_fdir_tunnel_type { ICE_FDIR_TUNNEL_TYPE_VXLAN, ICE_FDIR_TUNNEL_TYPE_GTPU, ICE_FDIR_TUNNEL_TYPE_GTPU_EH, + ICE_FDIR_TUNNEL_TYPE_GTPU_UP, + ICE_FDIR_TUNNEL_TYPE_GTPU_DOWN, }; =20 struct rte_flow; diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_f= ilter.c index 745d7291a..86bcdddd1 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,50 @@ 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_IPV4_GTPU_DOWN_IPV4_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_DWN | + 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_UP_IPV4_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_UP | + 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_NONF_IPV6_GTPU_DOWN_IPV6_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_DWN | + 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_UP_IPV6_OTHER: + ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_UP | + 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); @@ -1990,13 +1995,3= 5 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad, gtp_psc_mask =3D item->mask; =20 if (gtp_psc_spec && gtp_psc_mask) { - if (gtp_psc_mask->qfi =3D=3D UINT8_MAX) + if (gtp_psc_mask->qfi =3D=3D UINT8_MAX) { input_set |=3D ICE_INSET_GTPU_QFI; + filter->input.gtpu_data.qfi =3D + gtp_psc_spec->qfi; + } =20 - filter->input.gtpu_data.qfi =3D - gtp_psc_spec->qfi; + if (gtp_psc_mask->pdu_type =3D=3D UINT8_MAX) { + if (gtp_psc_spec->pdu_type =3D=3D + ICE_GTPU_EH_DWNLINK) { + tunnel_type =3D + ICE_FDIR_TUNNEL_TYPE_GTPU_DOWN; + } else if (gtp_psc_spec->pdu_type =3D=3D + ICE_GTPU_EH_UPLINK) { + tunnel_type =3D + ICE_FDIR_TUNNEL_TYPE_GTPU_UP; + } else { + rte_flow_error_set(error, + EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "Invalid pdu_type"); + return -rte_errno; + } + } } - tunnel_type =3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH; + + if (tunnel_type !=3D ICE_FDIR_TUNNEL_TYPE_GTPU_DOWN && + tunnel_type !=3D ICE_FDIR_TUNNEL_TYPE_GTPU_UP) + tunnel_type =3D ICE_FDIR_TUNNEL_TYPE_GTPU_EH; break; default: rte_flow_error_set(error, EINVAL, @@ -2007,13 +2034,30 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adap= ter *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_IPV4_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_DOWN && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV4_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_DOWN_IPV4_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_UP && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV4_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV4_GTPU_UP_IPV4_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_DOWN && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV6_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_DOWN_IPV6_OTHER; + else if (tunnel_type =3D=3D ICE_FDIR_TUNNEL_TYPE_GTPU_UP && + flow_type =3D=3D ICE_FLTR_PTYPE_NONF_IPV6_UDP) + flow_type =3D ICE_FLTR_PTYPE_NONF_IPV6_GTPU_UP_IPV6_OTHER; =20 filter->tunnel_type =3D tunnel_type; filter->input.flow_type =3D flow_type; diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index = e535e4b95..14ce2ff4f 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -25,9 +25,6 @@ #include "ice_ethdev.h" #include "ice_generic_flow.h" =20 -#define ICE_GTPU_EH_DWNLINK 0 -#define ICE_GTPU_EH_UPLINK 1 - struct rss_type_match_hdr { uint32_t hdr_mask; uint64_t eth_rss_hint; -- 2.19.1