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 1F174A04DB; Fri, 16 Oct 2020 14:51:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 391701EAA1; Fri, 16 Oct 2020 14:51:34 +0200 (CEST) Received: from hqnvemgate26.nvidia.com (hqnvemgate26.nvidia.com [216.228.121.65]) by dpdk.org (Postfix) with ESMTP id A51191EA3E for ; Fri, 16 Oct 2020 14:51:31 +0200 (CEST) Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Fri, 16 Oct 2020 05:51:17 -0700 Received: from nvidia.com (10.124.1.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 16 Oct 2020 12:51:23 +0000 From: Gregory Etelson To: CC: , , , , , , Ori Kam , Viacheslav Ovsiienko , "Thomas Monjalon" , Ferruh Yigit , Andrew Rybchenko Date: Fri, 16 Oct 2020 15:51:05 +0300 Message-ID: <20201016125108.22997-2-getelson@nvidia.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201016125108.22997-1-getelson@nvidia.com> References: <20200625160348.26220-1-getelson@mellanox.com> <20201016125108.22997-1-getelson@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-Originating-IP: [10.124.1.5] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1602852677; bh=/6jVazrlMnsgAfIysc1U/qyvzCMaURzmwEdLNyZNK4s=; h=From:To:CC:Subject:Date:Message-ID:X-Mailer:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:Content-Type: X-Originating-IP:X-ClientProxiedBy; b=HismBRIT9qpCyijml9Ez/TZwseqYrDhFua8RWDjuHo06W/LV2fSKUI9aw3D5N+gJ0 WaFwZXf1tjCvig4cvK2SYWZ5PMAHbtBLy1cFOv5zTonVayesTraEXgVFiqETpEb1V9 r0Q9AuehsLxzMWujQW9jO3ZCzZT3aqPN7UkA0I8cOetfNQVsK/2y0xrzbiXpg5syYa GVssVCxwV3OO9f4M7VtBtH7LIV5XhiaSHlbnCEH67JxD8WQVI7KUGh2+yLxK5qGBbE xD0tylCNlJpLbOQbnf5IrMP48T8zssNUjxSB2q/G/7XJvc+eB1EdT1ArhPKu0TtlzN 8jOtV6rgdJH2w== Subject: [dpdk-dev] [PATCH v8 1/3] ethdev: allow negative values in flow rule types 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" RTE flow items & actions use positive values in item & action type. Negative values are reserved for PMD private types. PMD items & actions usually are not exposed to application and are not used to create RTE flows. The patch allows applications with access to PMD flow items & actions ability to integrate RTE and PMD items & actions and use them to create flow rule. RTE flow item or action conversion library accepts positive known element types with predefined sizes only. Private PMD items and actions do not fit into this scheme because PMD type values are negative, each PMD has it's own types numeration and element types and their sizes are not visible at RTE level. To resolve these limitations the patch proposes this solution: 1. PMD can expose elements of pointer size only. RTE flow conversion functions will use pointer size for each configuration object in private PMD element it processes; 2. RTE flow verification will not reject elements with negative type. Signed-off-by: Gregory Etelson Acked-by: Ori Kam Acked-by: Viacheslav Ovsiienko --- v4: * update the 'Negative types' section in the rtre_flow.rst * update the patch comment v5: * rebase to next-net --- doc/guides/prog_guide/rte_flow.rst | 3 +++ doc/guides/rel_notes/release_20_11.rst | 5 +++++ lib/librte_ethdev/rte_flow.c | 28 ++++++++++++++++++++------ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte= _flow.rst index 6ee0d3a10a..7fb5ec9059 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -2775,6 +2775,9 @@ identifiers they are not aware of. =20 A method to generate them remains to be defined. =20 +Application may use PMD dynamic items or actions in flow rules. In that ca= se +size of configuration object in dynamic element must be a pointer size. + Planned types ~~~~~~~~~~~~~ =20 diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/= release_20_11.rst index 79d9ebac4e..9155b468d6 100644 --- a/doc/guides/rel_notes/release_20_11.rst +++ b/doc/guides/rel_notes/release_20_11.rst @@ -116,6 +116,11 @@ New Features * Updated HWRM structures to 1.10.1.70 version. * Added TRUFLOW support for Stingray devices. =20 +* **Flow rules allowed to use private PMD items / actions.** + + * Flow rule verification was updated to accept private PMD + items and actions. + * **Updated Cisco enic driver.** =20 * Added support for VF representors with single-queue Tx/Rx and flow API diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index 686fe40eaa..b74ea5593a 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -518,7 +518,11 @@ rte_flow_conv_item_spec(void *buf, const size_t size, } break; default: - off =3D rte_flow_desc_item[item->type].size; + /** + * allow PMD private flow item + */ + off =3D (int)item->type >=3D 0 ? + rte_flow_desc_item[item->type].size : sizeof(void *); rte_memcpy(buf, data, (size > off ? off : size)); break; } @@ -621,7 +625,11 @@ rte_flow_conv_action_conf(void *buf, const size_t size= , } break; default: - off =3D rte_flow_desc_action[action->type].size; + /** + * allow PMD private flow action + */ + off =3D (int)action->type >=3D 0 ? + rte_flow_desc_action[action->type].size : sizeof(void *); rte_memcpy(buf, action->conf, (size > off ? off : size)); break; } @@ -663,8 +671,12 @@ rte_flow_conv_pattern(struct rte_flow_item *dst, unsigned int i; =20 for (i =3D 0, off =3D 0; !num || i !=3D num; ++i, ++src, ++dst) { - if ((size_t)src->type >=3D RTE_DIM(rte_flow_desc_item) || - !rte_flow_desc_item[src->type].name) + /** + * allow PMD private flow item + */ + if (((int)src->type >=3D 0) && + ((size_t)src->type >=3D RTE_DIM(rte_flow_desc_item) || + !rte_flow_desc_item[src->type].name)) return rte_flow_error_set (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, src, "cannot convert unknown item type"); @@ -752,8 +764,12 @@ rte_flow_conv_actions(struct rte_flow_action *dst, unsigned int i; =20 for (i =3D 0, off =3D 0; !num || i !=3D num; ++i, ++src, ++dst) { - if ((size_t)src->type >=3D RTE_DIM(rte_flow_desc_action) || - !rte_flow_desc_action[src->type].name) + /** + * allow PMD private flow action + */ + if (((int)src->type >=3D 0) && + ((size_t)src->type >=3D RTE_DIM(rte_flow_desc_action) || + !rte_flow_desc_action[src->type].name)) return rte_flow_error_set (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, src, "cannot convert unknown action type"); --=20 2.28.0