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 2AD12A052A; Wed, 23 Dec 2020 10:28:11 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0B5B1CA4D; Wed, 23 Dec 2020 10:28:10 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 64F82CA39 for ; Wed, 23 Dec 2020 10:28:08 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0BN9Am4O032101 for ; Wed, 23 Dec 2020 01:28:06 -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=pXHwD4iQmKIMp4LxYLmghmx8wCjsGcUEfuDy9ILisnU=; b=Eiz4XgtUN3w1vgw2JlXe4B+gPglanI+qxuAht0bCVZWiW7CFbY6jIU1nFYOkkfEIOejT W3s2z3VM1lmh52gIPNp2oq4JMqrG55PLregtToyY57rcALX2nIAmJPSYH5eXTtXHbfAX TNt6XohZ6erQ5d2HSD1sau73Y5kEqrqI7tlR18iBzg5TounSwStxYnjtsQ6/efV97zn0 0+nEPkY2oeJKVGwFIgXoHt9SGWlShlSJr89fRBIpHW34lqTAFocb8OOS+eX2g3Um76zV oP7jM5mrEOv8yn0IYyG1rNdb2FU/RckRzsD2yfPDBung1Ehm5+c/DTGYvguM4biI+f78 QQ== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 35k0hx5m7q-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 23 Dec 2020 01:28:06 -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:28:05 -0800 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 23 Dec 2020 01:28:05 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 23 Dec 2020 01:28:05 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DmKB2+anekS9Qky02cY+UAWG0qTqwVD+rrwc4Lqrj+N3lCgPMzo/OctgafEz3AWI2JeTkdhpT/xwEchgW8M70Yuyiu8s32rPQ0Bk1GpiyWqJ9NuAIBoE0y44fTlPgc7UYtipKvisSiM/6NYCj4we4dynl0yA5xlPMLlaj8m4PRjUn8mDfRf5w8zrP5ckgsbxAShJDV8jEFrXjwGX5uQCgDmVlPDLytGSNw5EWWnSuKNj605d8QRipZswQXdobHzr7stpx4GiVpk86+cTfsERiD6Vgv5PTw5LVq9Q/fr1yN8Q8DqUZtB9/Wf0LfamYrF0xEI3Nc2DCAVK57AwK62ViA== 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=pXHwD4iQmKIMp4LxYLmghmx8wCjsGcUEfuDy9ILisnU=; b=HFA+YM2FDqRBQaU8BV1COixFKhEGO4QtndFDng61yhv9KGHky3HLHzQhW3dBjHkf+JOzC8zgd4L8EfXXHx6Idf3UwilKO87IJO/3Iy8ZAUDx8llQsC4wnFANosw8upvvbBb53HTxV26ztV/Cjz3t4+oUxUAad6CbWTX8Iccdv9Bp07116lGmhpRoXDjta1E3yLz9aqHV8l+1d2Y4P4Y7mIypcRTsC9YPViZ2GsFZ4zMP87jGpoJNjsyjnxqS3ZCc1myOSM+vVmd5TMFhaLpEGuogqORg4189fmfXMqqrSKjnTEpuO3iGIWFMkSVvIm0wd7QgLkBgr2iCVcdWPkacnQ== 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=pXHwD4iQmKIMp4LxYLmghmx8wCjsGcUEfuDy9ILisnU=; b=FYIVPTpNZNRrAX5qpo/NadWjMLGv4RgaYpHpHuPgJHhfdwYoNZUhk4CaF5esW6PhFDfchr6r8P7q7QlOlK4lM26+NVEsqS4q+nex5ID/YbYK+GgCVc/9cLa1vIVpE4VI/BWYaJWgRH3t6jXqZYQTZcHKrYFWsLw+VPJQBRdoNJY= Received: from DM5PR1801MB2058.namprd18.prod.outlook.com (2603:10b6:4:67::31) by DM6PR18MB2889.namprd18.prod.outlook.com (2603:10b6:5:163::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3676.33; Wed, 23 Dec 2020 09:28:03 +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:28:03 +0000 From: Michael Shamis To: Liron Himi , Jerin Jacob Kollanukkaran CC: "dev@dpdk.org" , Liron Himi Thread-Topic: [dpdk-dev] [PATCH v1 22/38] net/mvpp2: flow: add support for RAW type Thread-Index: AQHWyJqnAizsy3T8eU6kW33Acr81F6oEihRQ Date: Wed, 23 Dec 2020 09:28:02 +0000 Message-ID: References: <20201202101212.4717-1-lironh@marvell.com> <20201202101212.4717-23-lironh@marvell.com> In-Reply-To: <20201202101212.4717-23-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: a52adf85-6363-4ef5-7334-08d8a7250c22 x-ms-traffictypediagnostic: DM6PR18MB2889: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tSiolDqFk+zzdywYRzs8iv7Oy6OQyY2ad8mCft/3qVTYRbU0L9hXtSxvXKgPfGjAZf53uQktyGv0mYwAkTxrTLJ7gQbRAeNdFInttHQfgHVMOY3quNfQPXxvPIgrANH2nM6Me/ooE0r0c3ksv0WKJNqQKfXBVpo7x8mFTb0rz2EAWvznYAoxDvAmmTZgU7vgutj1RPBRapgoRPB+DqOMbIGhUAzMNrx1kL+TLP/CCJzdeFsmvzg19cbAZ6JUnW71HIB0UEczjy40S0Hp3SEihvapQQkPczyqJuK96GEkSncXd+7vc4gSyk2+meFvKmx2WG993DKsXVMXAKBLbNpFMETf89NzbVsMkArCM+1K83UMIlA6IiBNskuYD6meYAMesBhMuBgs5qL1NLI+Iddq9g== 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)(39860400002)(396003)(376002)(346002)(136003)(366004)(26005)(6636002)(54906003)(5660300002)(33656002)(478600001)(107886003)(52536014)(186003)(71200400001)(8936002)(66556008)(6506007)(66476007)(66446008)(83380400001)(7696005)(53546011)(76116006)(2906002)(66946007)(9686003)(64756008)(55016002)(316002)(86362001)(110136005)(4326008); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?eSeft2lKM7gBewYu8k1yziDyDiMRPUY6ZRfQ8I/ihy8Dxn3QDkf33Jmt0svO?= =?us-ascii?Q?J3f6FPGTupHIvn+LmxgCgf0P3nloaybikINpZALQORayM5AEJyZ2b6o+bsQ3?= =?us-ascii?Q?fJqNLxvhY7w3HiR1jDcJxZZIFoS+1mqOe+xjUyx6RsfWCn3nPjrx9df8tju4?= =?us-ascii?Q?XsjJ6vpXkFRStTQZwbwpHBLxKKEfO2qmFc93nE6alP3ODuYetvkBkv2sI+Z/?= =?us-ascii?Q?ui6uIrIIv62u0tSjiKNkxwLBgnMmpAKpyDtfU100tVFOJeKbm7wwjoBDo4ad?= =?us-ascii?Q?rCHLHVxovGYW7/ckTPXeISRdwxlbzhJ1W7rCGqTp307bk3+RqhoNlCOyqKgg?= =?us-ascii?Q?QGNY/nwBD2eMq/CFTvdACr3e3NBUUUNVhneK16Xfwfr7663qLJahWdWuiayN?= =?us-ascii?Q?1GGULvJbuDmHBeSygjL5AaLuKTwG0tYmjhVua3K1zOOCJFUwr0C5kGY8Ex0D?= =?us-ascii?Q?DqjRswhtSslkzKkSn47EsuvzA14vquxgVwSVzZ5CIII70JuNxM8DZRsAoF8g?= =?us-ascii?Q?L4ttjMUcVxwC0ii4FGA5y7bCEa0DZdjZOrBFXKD2zya2awykNTw6evc2kJBo?= =?us-ascii?Q?YeVm5YZUveLQTN7BPjCGMjo57MfYDlyLkctrBbCg/p/ptuBv15PPpia6/jCk?= =?us-ascii?Q?8WZs99bDsUt7xGoXQeEJsWP9HQGAVV8yDwQIEdG7XcVyqBMRvJz3Mt/SVaKp?= =?us-ascii?Q?RkUZAd2CfDpAhb8d9DlIOy1qfnf3nFgSAKGbNatI+lPQ4eAKgyvCkfyaMQjn?= =?us-ascii?Q?paU4qjkuDntq6w07AEmcoJgMAEXdOc6/OGT5DS+1oxCF73FDDtImuwrKmmsw?= =?us-ascii?Q?QBRLwU7cP5g0DEy8e5D4otW18zamKM/BfXovtF5w10YQ2TBGEraH4E8pwTKB?= =?us-ascii?Q?3ookslCMMF/gzR75IRIslHmKOU9r+sccEfdp62zEaWo4PjcjQPua4y7/7iWN?= =?us-ascii?Q?tYAFz+PJ1la0yoAkLsY+0ZLQoOWd6Buy2WOzStJyVAk=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: a52adf85-6363-4ef5-7334-08d8a7250c22 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Dec 2020 09:28:03.0389 (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: uEByEammMrxnVRjd3oXfsZ8IuA2DsLhBO/uuT4PieDaIq64ehAnBfOIOmQMqEreEK/Zk8QyOqmrAQ7kD/Z1xOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR18MB2889 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 22/38] net/mvpp2: flow: add support for RAW type 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 22/38] net/mvpp2: flow: add support for RAW t= ype From: Liron Himi add support for RAW type and connect it to MUSDK UDF Signed-off-by: Liron Himi Reviewed-by: Liron Himi --- drivers/net/mvpp2/mrvl_ethdev.h | 1 + drivers/net/mvpp2/mrvl_flow.c | 141 ++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) diff --git a/drivers/net/mvpp2/mrvl_ethdev.h b/drivers/net/mvpp2/mrvl_ethde= v.h index e7f75067f..be5e5a51b 100644 --- a/drivers/net/mvpp2/mrvl_ethdev.h +++ b/drivers/net/mvpp2/mrvl_ethdev.h @@ -92,6 +92,7 @@ struct rte_flow { struct pp2_cls_tbl_rule rule; struct pp2_cls_cos_desc cos; struct pp2_cls_tbl_action action; + uint8_t next_udf_id; }; =20 struct mrvl_mtr_profile { diff --git a/drivers/net/mvpp2/mrvl_flow.c b/drivers/net/mvpp2/mrvl_flow.c = index ffa47a12e..3c8052f06 100644 --- a/drivers/net/mvpp2/mrvl_flow.c +++ b/drivers/net/mvpp2/mrvl_flow.c @@ -1196,6 +1196,146 @@ mrvl_parse_udp(const struct rte_flow_item *item, return -rte_errno; } =20 +static int +mrvl_string_to_hex_values(const uint8_t *input_string, + uint8_t *hex_key, + uint8_t *length) +{ + char tmp_arr[3], tmp_string[MRVL_CLS_STR_SIZE_MAX], *string_iter; + int i; + + strcpy(tmp_string, (const char *)input_string); + string_iter =3D tmp_string; + + string_iter +=3D 2; /* skip the '0x' */ + *length =3D ((*length - 2) + 1) / 2; + + for (i =3D 0; i < *length; i++) { + strncpy(tmp_arr, string_iter, 2); + tmp_arr[2] =3D '\0'; + if (get_val_securely8(tmp_arr, 16, + &hex_key[*length - 1 - i]) < 0) + return -1; + string_iter +=3D 2; + } + + return 0; +} + +/** + * Parse raw flow item. + * + * @param item Pointer to the flow item. + * @param flow Pointer to the flow. + * @param error Pointer to the flow error. + * @returns 0 on success, negative value otherwise. + */ +static int +mrvl_parse_raw(const struct rte_flow_item *item, + struct rte_flow *flow, + struct rte_flow_error *error) +{ + const struct rte_flow_item_raw *spec =3D NULL, *mask =3D NULL; + struct pp2_cls_rule_key_field *key_field; + struct mv_net_udf *udf_params; + uint8_t length; + int ret; + + ret =3D mrvl_parse_init(item, (const void **)&spec, (const void **)&mask, + &rte_flow_item_raw_mask, + sizeof(struct rte_flow_item_raw), error); + if (ret) + return ret; + + if (!spec->pattern) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "pattern pointer MUST be given\n"); + return -rte_errno; + } + + /* Only hex string is supported; so, it must start with '0x' */ + if (strncmp((const char *)spec->pattern, "0x", 2) !=3D 0) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'pattern' string must start with '0x'\n"); + return -rte_errno; + } + + if (mask->pattern && + strncmp((const char *)mask->pattern, "0x", 2) !=3D 0) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'mask-pattern' string must start with '0x'\n"); + return -rte_errno; + } + + if (mask->search && spec->search) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'search' option must be '0'\n"); + return -rte_errno; + } + + if (mask->offset && spec->offset !=3D 0) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'offset' option must be '0'\n"); + return -rte_errno; + } + + if (!mask->relative || !spec->relative) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'relative' option must be given and enabled\n"); + return -rte_errno; + } + + length =3D spec->length & mask->length; + if (!length) { + rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, "'length' option must be given bigger than '0'\n"); + return -rte_errno; + } + + key_field =3D &flow->rule.fields[flow->rule.num_fields]; + mrvl_alloc_key_mask(key_field); + + /* pattern and length refer to string bytes. we need to convert it to + * values. + */ + key_field->size =3D length; + ret =3D mrvl_string_to_hex_values(spec->pattern, key_field->key, + &key_field->size); + if (ret) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, + "can't convert pattern from string to hex\n"); + return -rte_errno; + } + if (mask->pattern) { + ret =3D mrvl_string_to_hex_values(mask->pattern, key_field->mask, + &length); + if (ret) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, + "can't convert mask-pattern from string to hex\n"); + return -rte_errno; + } + } else { + rte_free(key_field->mask); + key_field->mask =3D NULL; + } + + flow->table_key.proto_field[flow->rule.num_fields].proto =3D + MV_NET_UDF; + udf_params =3D + &flow->table_key.proto_field[flow->rule.num_fields].field.udf; + udf_params->id =3D flow->next_udf_id++; + udf_params->size =3D key_field->size; + flow->table_key.key_size +=3D key_field->size; + + flow->rule.num_fields +=3D 1; + + return 0; +} + /** * Structure used to map specific flow pattern to the pattern parse callba= ck * which will iterate over each pattern item and extract relevant data. @@ -1212,6 +1352,7 @@ static const struct { { RTE_FLOW_ITEM_TYPE_IPV6, mrvl_parse_ip6 }, { RTE_FLOW_ITEM_TYPE_TCP, mrvl_parse_tcp }, { RTE_FLOW_ITEM_TYPE_UDP, mrvl_parse_udp }, + { RTE_FLOW_ITEM_TYPE_RAW, mrvl_parse_raw }, { RTE_FLOW_ITEM_TYPE_END, NULL } }; =20 -- 2.28.0