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 E7DC2A0562; Fri, 3 Apr 2020 05:18:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D3E701C033; Fri, 3 Apr 2020 05:18:07 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 20D171C033 for ; Fri, 3 Apr 2020 05:18:05 +0200 (CEST) IronPort-SDR: QI5fpkzNDT21SMTy3QJL16ip/jUL1QVa35KQc6mLkMmj6BYRipLxLPQpoURcK9Y9TQZqnZfDhx vQEODVlIQiSg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Apr 2020 20:18:05 -0700 IronPort-SDR: U9X4LIgY4RF3qH5qYGMRpERQXmMYSSlUjDcRbIVgnHuqkFsZNLvMUXq5i/QpmwO0aKGe2k/boG d91X94mg+Fmg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,338,1580803200"; d="scan'208";a="250036944" Received: from pgsmsx111.gar.corp.intel.com ([10.108.55.200]) by orsmga003.jf.intel.com with ESMTP; 02 Apr 2020 20:18:04 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.161]) by PGSMSX111.gar.corp.intel.com ([169.254.2.69]) with mapi id 14.03.0439.000; Fri, 3 Apr 2020 11:18:03 +0800 From: "Zhao1, Wei" To: "Zhang, Qi Z" , "dev@dpdk.org" CC: "Lu, Nannan" , "Fu, Qi" , "Peng, Yuan" Thread-Topic: [PATCH v3 08/13] net/ice: add support for PFCP Thread-Index: AQHWCWTHGOmGU0pPaE2fNjR6Xo0HeqhmM8IAgACGYWA= Date: Fri, 3 Apr 2020 03:18:02 +0000 Message-ID: References: <20200402064620.47668-1-wei.zhao1@intel.com> <20200403024353.24681-1-wei.zhao1@intel.com> <20200403024353.24681-9-wei.zhao1@intel.com> <039ED4275CED7440929022BC67E70611547F273D@SHSMSX103.ccr.corp.intel.com> In-Reply-To: <039ED4275CED7440929022BC67E70611547F273D@SHSMSX103.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzhlYTcwZWEtMjU4My00ZGE3LTllYzQtZTNmZWU1ZjJmMzI3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidGZNWGZqTkdObTFCXC96b0plaFpQdXVNTkxyc2ZaNWdqR21FcklJM1BqTlVocEgyVXlzM0NOMlpza0hOS0tYZUoifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.205] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 08/13] net/ice: add support for PFCP 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" Ok=20 > -----Original Message----- > From: Zhang, Qi Z > Sent: Friday, April 3, 2020 11:17 AM > To: Zhao1, Wei ; dev@dpdk.org > Cc: Lu, Nannan ; Fu, Qi ; Peng, Yua= n > > Subject: RE: [PATCH v3 08/13] net/ice: add support for PFCP >=20 >=20 >=20 > > -----Original Message----- > > From: Zhao1, Wei > > Sent: Friday, April 3, 2020 10:44 AM > > To: dev@dpdk.org > > Cc: Zhang, Qi Z ; Lu, Nannan > > ; Fu, Qi ; Peng, Yuan > > ; Zhao1, Wei > > Subject: [PATCH v3 08/13] net/ice: add support for PFCP > > > > This patch add switch filter support for PFCP packets, it enable > > swicth filter to direct ipv4/ipv6 packets with PFCP session or node > > payload to specific action. > > > > Signed-off-by: Wei Zhao > > --- > > drivers/net/ice/ice_generic_flow.c | 15 +++++++ > > drivers/net/ice/ice_generic_flow.h | 6 +++ > > drivers/net/ice/ice_switch_filter.c | 62 +++++++++++++++++++++++++++++ > > 3 files changed, 83 insertions(+) > > > > diff --git a/drivers/net/ice/ice_generic_flow.c > > b/drivers/net/ice/ice_generic_flow.c > > index 189ef6c4a..04dcaba08 100644 > > --- a/drivers/net/ice/ice_generic_flow.c > > +++ b/drivers/net/ice/ice_generic_flow.c > > @@ -1400,6 +1400,21 @@ enum rte_flow_item_type > pattern_eth_ipv6_l2tp[] > > =3D { > > RTE_FLOW_ITEM_TYPE_L2TPV3OIP, > > RTE_FLOW_ITEM_TYPE_END, > > }; > > +enum rte_flow_item_type pattern_eth_ipv4_pfcp[] =3D { > > + RTE_FLOW_ITEM_TYPE_ETH, > > + RTE_FLOW_ITEM_TYPE_IPV4, > > + RTE_FLOW_ITEM_TYPE_UDP, > > + RTE_FLOW_ITEM_TYPE_PFCP, > > + RTE_FLOW_ITEM_TYPE_END, > > +}; > > +enum rte_flow_item_type pattern_eth_ipv6_pfcp[] =3D { > > + RTE_FLOW_ITEM_TYPE_ETH, > > + RTE_FLOW_ITEM_TYPE_IPV6, > > + RTE_FLOW_ITEM_TYPE_UDP, > > + RTE_FLOW_ITEM_TYPE_PFCP, > > + RTE_FLOW_ITEM_TYPE_END, > > +}; > > + > > > > > > typedef struct ice_flow_engine * (*parse_engine_t)(struct ice_adapter > > *ad, diff --git a/drivers/net/ice/ice_generic_flow.h > > b/drivers/net/ice/ice_generic_flow.h > > index 006fd00b3..65cd64c7f 100644 > > --- a/drivers/net/ice/ice_generic_flow.h > > +++ b/drivers/net/ice/ice_generic_flow.h > > @@ -400,6 +400,12 @@ extern enum rte_flow_item_type > > pattern_eth_ipv6_ah[]; > > /* L2TP */ > > extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[]; > > > > +/* PFCP */ > > +extern enum rte_flow_item_type pattern_eth_ipv4_pfcp[]; extern enum > > +rte_flow_item_type pattern_eth_ipv6_pfcp[]; > > + > > + > > + >=20 > Remove dummy empty lines >=20 > > struct ice_adapter; > > > > extern const struct rte_flow_ops ice_flow_ops; diff --git > > a/drivers/net/ice/ice_switch_filter.c > > b/drivers/net/ice/ice_switch_filter.c > > index 9c87a16dd..9b4b9346c 100644 > > --- a/drivers/net/ice/ice_switch_filter.c > > +++ b/drivers/net/ice/ice_switch_filter.c > > @@ -154,6 +154,10 @@ ice_pattern_match_item > > ice_switch_pattern_dist_comms[] =3D { > > ICE_INSET_NONE, ICE_INSET_NONE}, > > {pattern_eth_ipv6_l2tp, > > ICE_INSET_NONE, ICE_INSET_NONE}, > > + {pattern_eth_ipv4_pfcp, > > + ICE_INSET_NONE, ICE_INSET_NONE}, > > + {pattern_eth_ipv6_pfcp, > > + ICE_INSET_NONE, ICE_INSET_NONE}, > > }; > > > > static struct > > @@ -224,6 +228,10 @@ ice_pattern_match_item > ice_switch_pattern_perm[] > > =3D { > > ICE_INSET_NONE, ICE_INSET_NONE}, > > {pattern_eth_ipv6_l2tp, > > ICE_INSET_NONE, ICE_INSET_NONE}, > > + {pattern_eth_ipv4_pfcp, > > + ICE_INSET_NONE, ICE_INSET_NONE}, > > + {pattern_eth_ipv6_pfcp, > > + ICE_INSET_NONE, ICE_INSET_NONE}, > > }; > > > > static int > > @@ -350,6 +358,7 @@ ice_switch_inset_get(const struct rte_flow_item > > pattern[], > > const struct rte_flow_item_esp *esp_spec, *esp_mask; > > const struct rte_flow_item_ah *ah_spec, *ah_mask; > > const struct rte_flow_item_l2tpv3oip *l2tp_spec, *l2tp_mask; > > + const struct rte_flow_item_pfcp *pfcp_spec, *pfcp_mask; > > uint64_t input_set =3D ICE_INSET_NONE; > > uint16_t j, t =3D 0; > > uint16_t tunnel_valid =3D 0; > > @@ -996,6 +1005,55 @@ ice_switch_inset_get(const struct rte_flow_item > > pattern[], > > if (ipv6_valiad) > > *tun_type =3D ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3; > > break; > > + case RTE_FLOW_ITEM_TYPE_PFCP: > > + pfcp_spec =3D item->spec; > > + pfcp_mask =3D item->mask; > > + /* Check if PFCP item is used to describe protocol. > > + * If yes, both spec and mask should be NULL. > > + * If no, both spec and mask shouldn't be NULL. > > + */ > > + if ((!pfcp_spec && pfcp_mask) || > > + (pfcp_spec && !pfcp_mask)) { > > + rte_flow_error_set(error, EINVAL, > > + RTE_FLOW_ERROR_TYPE_ITEM, > > + item, > > + "Invalid PFCP item"); > > + return -ENOTSUP; > > + } > > + if (pfcp_spec && pfcp_mask) { > > + /* Check pfcp mask and update input set */ > > + if (pfcp_mask->msg_type || > > + pfcp_mask->msg_len || > > + pfcp_mask->seid) { > > + rte_flow_error_set(error, EINVAL, > > + RTE_FLOW_ERROR_TYPE_ITEM, > > + item, > > + "Invalid pfcp mask"); > > + return -ENOTSUP; > > + } > > + if (pfcp_mask->s_field && > > + pfcp_spec->s_field =3D=3D 0x01 && > > + ipv6_valiad) > > + *tun_type =3D > > + ICE_SW_TUN_PROFID_IPV6_PFCP_SESSION; > > + else if (pfcp_mask->s_field && > > + pfcp_spec->s_field =3D=3D 0x01) > > + *tun_type =3D > > + ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION; > > + else if (pfcp_mask->s_field && > > + !pfcp_spec->s_field && > > + ipv6_valiad) > > + *tun_type =3D > > + ICE_SW_TUN_PROFID_IPV6_PFCP_NODE; > > + else if (pfcp_mask->s_field && > > + !pfcp_spec->s_field) > > + *tun_type =3D > > + ICE_SW_TUN_PROFID_IPV4_PFCP_NODE; > > + else > > + return -ENOTSUP; > > + } > > + break; > > + > > > > case RTE_FLOW_ITEM_TYPE_VOID: > > break; > > @@ -1179,6 +1237,10 @@ ice_is_profile_rule(enum ice_sw_tunnel_type > > tun_type) > > case ICE_SW_TUN_PROFID_IPV6_ESP: > > case ICE_SW_TUN_PROFID_IPV6_AH: > > case ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3: > > + case ICE_SW_TUN_PROFID_IPV4_PFCP_NODE: > > + case ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION: > > + case ICE_SW_TUN_PROFID_IPV6_PFCP_NODE: > > + case ICE_SW_TUN_PROFID_IPV6_PFCP_SESSION: > > return true; > > default: > > break; > > -- > > 2.19.1