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 2F80CA04B7; Sun, 4 Oct 2020 15:52:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AF2331BC8C; Sun, 4 Oct 2020 15:51:30 +0200 (CEST) Received: from hqnvemgate24.nvidia.com (hqnvemgate24.nvidia.com [216.228.121.143]) by dpdk.org (Postfix) with ESMTP id 03DB61BC8B for ; Sun, 4 Oct 2020 15:51:29 +0200 (CEST) Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate24.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Sun, 04 Oct 2020 06:49:42 -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; Sun, 4 Oct 2020 13:51:08 +0000 From: Gregory Etelson To: CC: , , , , , , "Gregory Etelson" , Ori Kam , "Viacheslav Ovsiienko" , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Sun, 4 Oct 2020 16:50:37 +0300 Message-ID: <20201004135040.10307-2-getelson@nvidia.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201004135040.10307-1-getelson@nvidia.com> References: <20200625160348.26220-1-getelson@mellanox.com> <20201004135040.10307-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=1601819382; bh=GsJ4ig5nnjkxhRjiAbSelFFL29e7dBBRIAHcLvaIdQ8=; 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=BJuO6/yHZOj7EYR+9s0p3ab//kbdnwgi14HU2Cf2tyJ8w8jGl2XWuXLZyDE9AoewX vwH1U/vAixle4SgCDeuneu8/RDSFCQFy0OXqLH+COOfnkU1LRmnojnxDhVw/Iswy9E ydTpmgGgWR/mGl+4IPyIlOJl/VQzKksAr666OPGyizFEH3bK53pTxLJ2mFn9kJsUin cGgSkac/vxogoZPGng3psMCfzcDxhhkF8dfAbLXtye519VXuwCHp14ClRTNkhvX37S 8sn1nP47FAynhf9Lt6DgH83D/E/wwnFxcwaASeHgAL1CJMPwEI4ec3xZv6KxIfAbP7 2LUK/TnNl1GmQ== Subject: [dpdk-dev] [PATCH v4 1/4] 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" From: Gregory Etelson 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 coversion library accepts positive known element types with predefined sizes only. Private PMD items and actions do not fit into this scheme becase 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 to 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 --- doc/guides/prog_guide/rte_flow.rst | 3 +++ lib/librte_ethdev/rte_flow.c | 28 ++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte= _flow.rst index 119b128739..df71bd2eeb 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -2678,6 +2678,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/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index f8fdd68fe9..c8c6d62a8b 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -564,7 +564,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; } @@ -667,7 +671,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; } @@ -709,8 +717,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"); @@ -798,8 +810,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