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 70D2EA052A; Wed, 23 Dec 2020 10:38:18 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4CB8ECB83; Wed, 23 Dec 2020 10:38:17 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 30A5CCB76 for ; Wed, 23 Dec 2020 10:38:16 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0BN9UX5j023534 for ; Wed, 23 Dec 2020 01:38:14 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0220; bh=j7IodqKJnSuXHeFXywGY8VxpPqlw1rIVJBPOIANSCqU=; b=KiPtWnpp6B4v1KAy47z+RfeJ43Hp7h/3369kud9UXahJn9tde/dnYSbcBMZQ3kKpWpYe WM2EZn9Oa2q6GKLYPq+jhT6X38hPsTre9hJAb/gjYxakrdcB/6fW7w0Cn+qgHEKsVEOF ToTs/Ryl3wZjkeZIf1iCjepOa2jXRySDzPWH5XE/q8hjs8LXsvNyv29ahS5BDNW06XPV jozkhezZSn3iphFVhu9r3ntcrtXwBqYhuF/dHPZRsJLGBeHTE8svvaGNoLLi3l05y3Lg dEZ5awIK6C86w0JS8mq1xb6gM8VgdEpthqHx+MCXyfkLuozlWgPQ5LmKcZD3QPQ4U60C eA== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 35k0ebds17-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 23 Dec 2020 01:38:14 -0800 Received: from SC-EXCH04.marvell.com (10.93.176.84) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 23 Dec 2020 01:38:13 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 23 Dec 2020 01:38:13 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 23 Dec 2020 01:38:13 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lX0nRrUFoqgj6Z0CaThVnlLDAlvcVQV8Fuku7HdBeEpEdCsFIB3U4Y2DzLwF6zb0KOqzeA/6s5HQiaViknWidAhn1Z3neyCB4Pi1yjZyDwfIpQmKSXUmhueuv1daoKe4kV8PLpqsNLLN9wQpAFoK9YPVVRG8GAy60gFYymtGDPbBhaxvT00iO0bke4JNDjrfMAdDT1NIqEXUiqEkjkxm23IxwSLJBbsVZgcVa64qH97bVCbs2TEFKL6M83/ZbaobCWnbWBa56e1gKDwieHVP1VGELeS4DRXCej0GBOTtQjyWUyXjA5lr8tEdrsYdIhth5IcbKoqnwcXXS66dNbEFIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j7IodqKJnSuXHeFXywGY8VxpPqlw1rIVJBPOIANSCqU=; b=dnhEkY1FY9sgf6/zGYO6cZWedg9OrRBwxVcFJ3yTgjQL01FPBjlesw/vMO7876UzLofoEu52NAx+o4z+BBWydZjcM7KDxlxAudIYUcztyxDObK+DbniQl5DXfw0js5hQTWSBWZVgdfbJOF0W49TfVYL7XHfAB5aA/am4fZ4b2+UicWRp/KZI55BPeKkkjhIIOO4pAPb4lA2+NGcAZhS6JeJ6TCb0t2JgtmseQa2iBjKRoWUX0S2B9HRtvHX256XLwCxLUXbqb2hCCwnfFRRxGjA/VL4XvU6ubU5QO020C8ZVyzdZX//TFol/0mygrcV3zTrgLN8QFdbAKSD3hXrmCA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j7IodqKJnSuXHeFXywGY8VxpPqlw1rIVJBPOIANSCqU=; b=HNBwgia9sIWBTStves+63riTit8/dlm6xAafeqMIbQ3yhHrM25sw+ldcth+Op5k+OjUYdYFE3i80pywSyDeKbp90wgizt+eUmuKvUbvEp4rZOkP1+YVO4iXOtPU4vHfovQIQ9I5kxmCMERMWqMAkJCyYTsujaUFTVALy7LUqFoc= Received: from DM5PR1801MB2058.namprd18.prod.outlook.com (2603:10b6:4:67::31) by DM6PR18MB3603.namprd18.prod.outlook.com (2603:10b6:5:2a5::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3700.27; Wed, 23 Dec 2020 09:38:11 +0000 Received: from DM5PR1801MB2058.namprd18.prod.outlook.com ([fe80::303b:5c79:93c7:b432]) by DM5PR1801MB2058.namprd18.prod.outlook.com ([fe80::303b:5c79:93c7:b432%7]) with mapi id 15.20.3676.033; Wed, 23 Dec 2020 09:38:11 +0000 From: Michael Shamis To: Liron Himi , Jerin Jacob Kollanukkaran CC: "dev@dpdk.org" , Liron Himi Thread-Topic: [dpdk-dev] [PATCH v1 21/38] net/mvpp2: flow: build table key along with rule Thread-Index: AQHWyJSj3meeVEfZIEiw6GdpVt+J7aoEjWpA Date: Wed, 23 Dec 2020 09:38:11 +0000 Message-ID: References: <20201202101212.4717-1-lironh@marvell.com> <20201202101212.4717-22-lironh@marvell.com> In-Reply-To: <20201202101212.4717-22-lironh@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [83.130.154.133] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e74c8251-5c55-49bd-1517-08d8a72676f7 x-ms-traffictypediagnostic: DM6PR18MB3603: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:304; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +odj1GWrskbqbFdf8Xt7RS8hM+g8RtvPRh0cM5H9fTP6GP6Xe9/DnDKY/SHZvxIrbhN84d/WUG/6FU5ah/MKNo3qcDr2JmjScGMhAiZXcPd7DQAHoIe2Ui7ztboNB3SMZb+0pe7CpJSSVfJhWWs0Sld+xpp/BDLAJEBwwRAUczj8dNlH93WA7DOSAqY7vfWhgVjMoJgx1H1Aoq1gSpt2dFNe3pNTCLqtQpbPjYCxayhHRx0U++RmW0fL26GxqAufef/cAxchHgmMe8mjeuyJ1BXdHt107nOK4fT24ezfemTBPomXrhlY4evYipMtPCnRa1LwO0eNfk/hgwPskwoMf3ck/1/BnuwO5hIgUsWR5eWRtAMjihx0BcBCyA4gwAD0qllfvC3H9rBEdl5g2ks1ew== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR1801MB2058.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(39860400002)(346002)(366004)(376002)(396003)(66446008)(53546011)(54906003)(66556008)(52536014)(66476007)(66946007)(4326008)(5660300002)(64756008)(107886003)(33656002)(9686003)(6506007)(30864003)(76116006)(55016002)(6636002)(86362001)(71200400001)(478600001)(7696005)(186003)(2906002)(110136005)(316002)(83380400001)(26005)(8936002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?zwUrCCXdGXrmzP6LLYZkmuTJhPNlRtkUb1c6JzdrERxFzGOQ1M8HyMxjDm1k?= =?us-ascii?Q?Xo7uvqvaSpxmu3qJns2bgOU86+O/mCDBTOw5XWAbbE1CfIXn5sqMUSmbe31/?= =?us-ascii?Q?OdCr7D4dQbHL3jKc+MI2rL4VJS110Qpw43XNKcddH694nSQv1hFAHDJt1POH?= =?us-ascii?Q?qabMY/e7DrdfVYjszo4xh4yPbBGLI9U8sYV60Xad18tXQ0wUhYoghhoc6kMo?= =?us-ascii?Q?bwHqKKmDnGuLKiWpvliEHTx/H86Wg24dxE8pzkslCImh7Tsv6saV+lX4FIne?= =?us-ascii?Q?Fn2stFjhn/EiqdFlMKp/rfEwSARAma9Jdf4b6r4sDe/T0JCp/Pydhe8cNTYC?= =?us-ascii?Q?olPu8sG/KJqIQ+SkVRTimw9ms0dPhKwiICNlgHnVkeo+fEuQPxe3x550igmT?= =?us-ascii?Q?dpKvJqluA3Pliij/sPX1HnaT3z5ihMzySkAyjSZKLkIIjLO1iDlU/mLS0c/h?= =?us-ascii?Q?YN5Ju5XiooFIDFzP3Jtp/g/2j+hbVNsJL6rxYFVOMlWwF0/CBWBnC3RMxJp4?= =?us-ascii?Q?lHDb6e8bQcj55mP5bdRWMl8drpv3Oto5vJu8Nc+VSI3MSBChI/l/XZ+jo8jo?= =?us-ascii?Q?SDIFnqh/xn7glelQM2KRUjg/vMw/6tqsZiwbsJOiZPOhsw2BSug94jrJ1yqo?= =?us-ascii?Q?AQ6YSmnpFfj/dAE401k3XKAc1Ad6KFY6R8Cm06s47gLikvTBeRHhVKIhswKg?= =?us-ascii?Q?0VAwB3zQL09kYWkOwk3yRBgLbTzd9fgFnL0JHtieEyqnIYuXAUWqSSzc9kMg?= =?us-ascii?Q?iQ0TIa4ksZ+BhcyLGFD8aU2JjiTDJ37u8mGvOxLXvDrw3FF4OVZNTKryJTJr?= =?us-ascii?Q?FSzunO+2IpQdjhR8EWpWjnI437EEuZkETeLfEN810L3mYgcnKbxiOUiGa+hx?= =?us-ascii?Q?Dm5DmnHvs5NuIuyKwyrlTAXg/yR+5OFHnU+0vKeffEugbAYBbiL9YVURdvuw?= =?us-ascii?Q?4CT32nfOdW2SbZXBDnXDyhKsuZJ3KtTK1ifDdAr3wqU=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR1801MB2058.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e74c8251-5c55-49bd-1517-08d8a72676f7 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Dec 2020 09:38:11.7676 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: LAbjCrsRWiNc1Z8ip3ZHw6Wur3ZRth+JZDRQ83w2pwMmIp5lGNrdRcfSeQG9UiCiaZfuYYcBk+Qwp7IerrXg0A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR18MB3603 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343, 18.0.737 definitions=2020-12-23_04:2020-12-21, 2020-12-23 signatures=0 Subject: Re: [dpdk-dev] [PATCH v1 21/38] net/mvpp2: flow: build table key along with rule 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" Reviewed-by: Michael Shamis -----Original Message----- From: dev On Behalf Of lironh@marvell.com Sent: Wednesday, December 2, 2020 12:12 PM To: Jerin Jacob Kollanukkaran Cc: dev@dpdk.org; Liron Himi Subject: [dpdk-dev] [PATCH v1 21/38] net/mvpp2: flow: build table key along= with rule From: Liron Himi build table key along with rule Signed-off-by: Liron Himi Reviewed-by: Liron Himi --- drivers/net/mvpp2/mrvl_ethdev.h | 33 +--- drivers/net/mvpp2/mrvl_flow.c | 257 +++++++++++++------------------- 2 files changed, 106 insertions(+), 184 deletions(-) diff --git a/drivers/net/mvpp2/mrvl_ethdev.h b/drivers/net/mvpp2/mrvl_ethde= v.h index db6632f5b..e7f75067f 100644 --- a/drivers/net/mvpp2/mrvl_ethdev.h +++ b/drivers/net/mvpp2/mrvl_ethdev.h @@ -82,43 +82,13 @@ /** Maximum length of a match string */ #define MRVL_MATCH_LEN 16 =20 -/** Parsed fields in processed rte_flow_item. */ -enum mrvl_parsed_fields = { - /* eth flags */ - F_DMAC =3D BIT(0), - F_SMAC =3D BIT(1), - F_TYPE =3D BIT(2), - /* vlan flags */ - F_VLAN_PRI =3D BIT(3), - F_VLAN_ID =3D BIT(4), - F_VLAN_TCI =3D BIT(5), /* not supported by MUSDK yet */ - /* ip4 flags */ - F_IP4_TOS =3D BIT(6), - F_IP4_SIP =3D BIT(7), - F_IP4_DIP =3D BIT(8), - F_IP4_PROTO =3D BIT(9), - /* ip6 flags */ - F_IP6_TC =3D BIT(10), /* not supported by MUSDK yet */ - F_IP6_SIP =3D BIT(11), - F_IP6_DIP =3D BIT(12), - F_IP6_FLOW =3D BIT(13), - F_IP6_NEXT_HDR =3D BIT(14), - /* tcp flags */ - F_TCP_SPORT =3D BIT(15), - F_TCP_DPORT =3D BIT(16), - /* udp flags */ - F_UDP_SPORT =3D BIT(17), - F_UDP_DPORT =3D BIT(18), -}; - /** PMD-specific definition of a flow rule handle. */ struct mrvl_mtr; s= truct rte_flow { LIST_ENTRY(rte_flow) next; struct mrvl_mtr *mtr; =20 - enum mrvl_parsed_fields pattern; - + struct pp2_cls_tbl_key table_key; struct pp2_cls_tbl_rule rule; struct pp2_cls_cos_desc cos; struct pp2_cls_tbl_action action; @@ -197,7 +167,6 @@ struct mrvl_priv { =20 struct pp2_cls_tbl_params cls_tbl_params; struct pp2_cls_tbl *cls_tbl; - uint32_t cls_tbl_pattern; LIST_HEAD(mrvl_flows, rte_flow) flows; =20 struct pp2_cls_plcr *default_policer; diff --git a/drivers/net/mvpp2/mrvl_flow.c b/drivers/net/mvpp2/mrvl_flow.c = index a1a748529..ffa47a12e 100644 --- a/drivers/net/mvpp2/mrvl_flow.c +++ b/drivers/net/mvpp2/mrvl_flow.c @@ -192,12 +192,14 @@ mrvl_parse_mac(const struct rte_flow_item_eth *spec, k =3D spec->dst.addr_bytes; m =3D mask->dst.addr_bytes; =20 - flow->pattern |=3D F_DMAC; + flow->table_key.proto_field[flow->rule.num_fields].field.eth =3D + MV_NET_ETH_F_DA; } else { k =3D spec->src.addr_bytes; m =3D mask->src.addr_bytes; =20 - flow->pattern |=3D F_SMAC; + flow->table_key.proto_field[flow->rule.num_fields].field.eth =3D + MV_NET_ETH_F_SA; } =20 key_field =3D &flow->rule.fields[flow->rule.num_fields]; @@ -212,6 +214,10 @@ mrvl_parse_mac(const struct rte_flow_item_eth *spec, "%02x:%02x:%02x:%02x:%02x:%02x", m[0], m[1], m[2], m[3], m[4], m[5]); =20 + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_ETH; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -272,7 +278,12 @@ mrvl_parse_type(const struct rte_flow_item_eth *spec, k =3D rte_be_to_cpu_16(spec->type); snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 - flow->pattern |=3D F_TYPE; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_ETH; + flow->table_key.proto_field[flow->rule.num_fields].field.eth =3D + MV_NET_ETH_F_TYPE; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -303,7 +314,12 @@ mrvl_parse_vlan_id(const struct rte_flow_item_vlan *sp= ec, k =3D rte_be_to_cpu_16(spec->tci) & MRVL_VLAN_ID_MASK; snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 - flow->pattern |=3D F_VLAN_ID; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_VLAN; + flow->table_key.proto_field[flow->rule.num_fields].field.vlan =3D + MV_NET_VLAN_F_ID; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -334,7 +350,12 @@ mrvl_parse_vlan_pri(const struct rte_flow_item_vlan *s= pec, k =3D (rte_be_to_cpu_16(spec->tci) & MRVL_VLAN_PRI_MASK) >> 13; snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 - flow->pattern |=3D F_VLAN_PRI; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_VLAN; + flow->table_key.proto_field[flow->rule.num_fields].field.vlan =3D + MV_NET_VLAN_F_PRI; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -367,7 +388,12 @@ mrvl_parse_ip4_dscp(const struct rte_flow_item_ipv4 *s= pec, snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); snprintf((char *)key_field->mask, MRVL_CLS_STR_SIZE_MAX, "%u", m); =20 - flow->pattern |=3D F_IP4_TOS; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP4; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv4 =3D + MV_NET_IP4_F_DSCP; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -399,12 +425,14 @@ mrvl_parse_ip4_addr(const struct rte_flow_item_ipv4 *= spec, k.s_addr =3D spec->hdr.dst_addr; m =3D rte_be_to_cpu_32(mask->hdr.dst_addr); =20 - flow->pattern |=3D F_IP4_DIP; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv4 =3D + MV_NET_IP4_F_DA; } else { k.s_addr =3D spec->hdr.src_addr; m =3D rte_be_to_cpu_32(mask->hdr.src_addr); =20 - flow->pattern |=3D F_IP4_SIP; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv4 =3D + MV_NET_IP4_F_SA; } =20 key_field =3D &flow->rule.fields[flow->rule.num_fields]; @@ -414,6 +442,10 @@ mrvl_parse_ip4_addr(const struct rte_flow_item_ipv4 *s= pec, inet_ntop(AF_INET, &k, (char *)key_field->key, MRVL_CLS_STR_SIZE_MAX); snprintf((char *)key_field->mask, MRVL_CLS_STR_SIZE_MAX, "0x%x", m); =20 + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP4; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -475,7 +507,12 @@ mrvl_parse_ip4_proto(const struct rte_flow_item_ipv4 *= spec, =20 snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 - flow->pattern |=3D F_IP4_PROTO; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP4; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv4 =3D + MV_NET_IP4_F_PROTO; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -507,12 +544,14 @@ mrvl_parse_ip6_addr(const struct rte_flow_item_ipv6 *= spec, memcpy(k.s6_addr, spec->hdr.dst_addr, size); memcpy(m.s6_addr, mask->hdr.dst_addr, size); =20 - flow->pattern |=3D F_IP6_DIP; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv6 =3D + MV_NET_IP6_F_DA; } else { memcpy(k.s6_addr, spec->hdr.src_addr, size); memcpy(m.s6_addr, mask->hdr.src_addr, size); =20 - flow->pattern |=3D F_IP6_SIP; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv6 =3D + MV_NET_IP6_F_SA; } =20 key_field =3D &flow->rule.fields[flow->rule.num_fields]; @@ -522,6 +561,10 @@ mrvl_parse_ip6_addr(const struct rte_flow_item_ipv6 *s= pec, inet_ntop(AF_INET6, &k, (char *)key_field->key, MRVL_CLS_STR_SIZE_MAX); inet_ntop(AF_INET6, &m, (char *)key_field->mask, MRVL_CLS_STR_SIZE_MAX); =20 + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP6; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -585,7 +628,12 @@ mrvl_parse_ip6_flow(const struct rte_flow_item_ipv6 *s= pec, snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); snprintf((char *)key_field->mask, MRVL_CLS_STR_SIZE_MAX, "%u", m); =20 - flow->pattern |=3D F_IP6_FLOW; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP6; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv6 =3D + MV_NET_IP6_F_FLOW; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -615,7 +663,12 @@ mrvl_parse_ip6_next_hdr(const struct rte_flow_item_ipv= 6 *spec, =20 snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 - flow->pattern |=3D F_IP6_NEXT_HDR; + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_IP6; + flow->table_key.proto_field[flow->rule.num_fields].field.ipv6 =3D + MV_NET_IP6_F_NEXT_HDR; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -648,15 +701,21 @@ mrvl_parse_tcp_port(const struct rte_flow_item_tcp *s= pec, if (parse_dst) { k =3D rte_be_to_cpu_16(spec->hdr.dst_port); =20 - flow->pattern |=3D F_TCP_DPORT; + flow->table_key.proto_field[flow->rule.num_fields].field.tcp =3D + MV_NET_TCP_F_DP; } else { k =3D rte_be_to_cpu_16(spec->hdr.src_port); =20 - flow->pattern |=3D F_TCP_SPORT; + flow->table_key.proto_field[flow->rule.num_fields].field.tcp =3D + MV_NET_TCP_F_SP; } =20 snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_TCP; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -721,15 +780,21 @@ mrvl_parse_udp_port(const struct rte_flow_item_udp *s= pec, if (parse_dst) { k =3D rte_be_to_cpu_16(spec->hdr.dst_port); =20 - flow->pattern |=3D F_UDP_DPORT; + flow->table_key.proto_field[flow->rule.num_fields].field.udp =3D + MV_NET_UDP_F_DP; } else { k =3D rte_be_to_cpu_16(spec->hdr.src_port); =20 - flow->pattern |=3D F_UDP_SPORT; + flow->table_key.proto_field[flow->rule.num_fields].field.udp =3D + MV_NET_UDP_F_SP; } =20 snprintf((char *)key_field->key, MRVL_CLS_STR_SIZE_MAX, "%u", k); =20 + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_PROTO_UDP; + flow->table_key.key_size +=3D key_field->size; + flow->rule.num_fields +=3D 1; =20 return 0; @@ -832,7 +897,7 @@ mrvl_parse_vlan(const struct rte_flow_item *item, { const struct rte_flow_item_vlan *spec =3D NULL, *mask =3D NULL; uint16_t m; - int ret; + int ret, i; =20 ret =3D mrvl_parse_init(item, (const void **)&spec, (const void **)&mask, &rte_flow_item_vlan_mask, @@ -855,12 +920,6 @@ mrvl_parse_vlan(const struct rte_flow_item *item, goto out; } =20 - if (flow->pattern & F_TYPE) { - rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ITEM, item, - "VLAN TPID matching is not supported"); - return -rte_errno; - } if (mask->inner_type) { struct rte_flow_item_eth spec_eth =3D { .type =3D spec->inner_type, @@ -869,6 +928,21 @@ mrvl_parse_vlan(const struct rte_flow_item *item, .type =3D mask->inner_type, }; =20 + /* TPID is not supported so if ETH_TYPE was selected, + * error is return. else, classify eth-type with the tpid value + */ + for (i =3D 0; i < flow->rule.num_fields; i++) + if (flow->table_key.proto_field[i].proto =3D=3D + MV_NET_PROTO_ETH && + flow->table_key.proto_field[i].field.eth =3D=3D + MV_NET_ETH_F_TYPE) { + rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "VLAN TPID matching is not supported"); + return -rte_errno; + } + MRVL_LOG(WARNING, "inner eth type mask is ignored"); ret =3D mrvl_parse_type(&spec_eth, &mask_eth, flow); if (ret) @@ -1250,6 +1324,8 @@ mrvl_flow_parse_pattern(struct mrvl_priv *priv __rte_= unused, } } =20 + flow->table_key.num_fields =3D flow->rule.num_fields; + return 0; } =20 @@ -1462,134 +1538,9 @@ mrvl_create_cls_table(struct rte_eth_dev *dev, stru= ct rte_flow *first_flow) priv->cls_tbl_params.max_num_rules =3D MRVL_CLS_MAX_NUM_RULES; priv->cls_tbl_params.default_act.type =3D PP2_CLS_TBL_ACT_DONE; priv->cls_tbl_params.default_act.cos =3D &first_flow->cos; - - if (first_flow->pattern & F_DMAC) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_ETH; - key->proto_field[key->num_fields].field.eth =3D MV_NET_ETH_F_DA; - key->key_size +=3D 6; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_SMAC) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_ETH; - key->proto_field[key->num_fields].field.eth =3D MV_NET_ETH_F_SA; - key->key_size +=3D 6; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_TYPE) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_ETH; - key->proto_field[key->num_fields].field.eth =3D MV_NET_ETH_F_TYPE; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_VLAN_ID) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_VLAN; - key->proto_field[key->num_fields].field.vlan =3D MV_NET_VLAN_F_ID; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_VLAN_PRI) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_VLAN; - key->proto_field[key->num_fields].field.vlan =3D - MV_NET_VLAN_F_PRI; - key->key_size +=3D 1; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP4_TOS) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP4; - key->proto_field[key->num_fields].field.ipv4 =3D - MV_NET_IP4_F_DSCP; - key->key_size +=3D 1; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP4_SIP) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP4; - key->proto_field[key->num_fields].field.ipv4 =3D MV_NET_IP4_F_SA; - key->key_size +=3D 4; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP4_DIP) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP4; - key->proto_field[key->num_fields].field.ipv4 =3D MV_NET_IP4_F_DA; - key->key_size +=3D 4; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP4_PROTO) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP4; - key->proto_field[key->num_fields].field.ipv4 =3D - MV_NET_IP4_F_PROTO; - key->key_size +=3D 1; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP6_SIP) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP6; - key->proto_field[key->num_fields].field.ipv6 =3D MV_NET_IP6_F_SA; - key->key_size +=3D 16; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP6_DIP) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP6; - key->proto_field[key->num_fields].field.ipv6 =3D MV_NET_IP6_F_DA; - key->key_size +=3D 16; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP6_FLOW) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP6; - key->proto_field[key->num_fields].field.ipv6 =3D - MV_NET_IP6_F_FLOW; - key->key_size +=3D 3; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_IP6_NEXT_HDR) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_IP6; - key->proto_field[key->num_fields].field.ipv6 =3D - MV_NET_IP6_F_NEXT_HDR; - key->key_size +=3D 1; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_TCP_SPORT) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_TCP; - key->proto_field[key->num_fields].field.tcp =3D MV_NET_TCP_F_SP; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_TCP_DPORT) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_TCP; - key->proto_field[key->num_fields].field.tcp =3D MV_NET_TCP_F_DP; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_UDP_SPORT) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_UDP; - key->proto_field[key->num_fields].field.udp =3D MV_NET_UDP_F_SP; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } - - if (first_flow->pattern & F_UDP_DPORT) { - key->proto_field[key->num_fields].proto =3D MV_NET_PROTO_UDP; - key->proto_field[key->num_fields].field.udp =3D MV_NET_UDP_F_DP; - key->key_size +=3D 2; - key->num_fields +=3D 1; - } + memcpy(key, &first_flow->table_key, sizeof(struct pp2_cls_tbl_key)); =20 ret =3D pp2_cls_tbl_init(&priv->cls_tbl_params, &priv->cls_tbl); - if (!ret) - priv->cls_tbl_pattern =3D first_flow->pattern; =20 return ret; } @@ -1604,8 +1555,10 @@ mrvl_create_cls_table(struct rte_eth_dev *dev, struc= t rte_flow *first_flow) static inline int mrvl_flow_can_be_added(struct m= rvl_priv *priv, const struct rte_flow *flow) { - return flow->pattern =3D=3D priv->cls_tbl_pattern && - mrvl_engine_type(flow) =3D=3D priv->cls_tbl_params.type; + int same =3D memcmp(&flow->table_key, &priv->cls_tbl_params.key, + sizeof(struct pp2_cls_tbl_key)) =3D=3D 0; + + return same && mrvl_engine_type(flow) =3D=3D priv->cls_tbl_params.type; } =20 /** -- 2.28.0