Message ID | 20211001134716.1608857-1-andrew.rybchenko@oktetlabs.ru (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2BF11A0032; Fri, 1 Oct 2021 15:47:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A34B54067A; Fri, 1 Oct 2021 15:47:32 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 612E740040 for <dev@dpdk.org>; Fri, 1 Oct 2021 15:47:31 +0200 (CEST) Received: by shelob.oktetlabs.ru (Postfix, from userid 122) id C780D7F6DF; Fri, 1 Oct 2021 16:47:30 +0300 (MSK) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shelob.oktetlabs.ru X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=ALL_TRUSTED, DKIM_ADSP_DISCARD, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from aros.oktetlabs.ru (aros.oktetlabs.ru [192.168.38.17]) by shelob.oktetlabs.ru (Postfix) with ESMTP id 968107F66F; Fri, 1 Oct 2021 16:47:26 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 968107F66F Authentication-Results: shelob.oktetlabs.ru/968107F66F; dkim=none; dkim-atps=neutral From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> To: Cc: dev@dpdk.org, Ori Kam <orika@nvidia.com>, Thomas Monjalon <thomas@monjalon.net>, Ferruh Yigit <ferruh.yigit@intel.com>, Ivan Malov <ivan.malov@oktetlabs.ru> Date: Fri, 1 Oct 2021 16:47:04 +0300 Message-Id: <20211001134716.1608857-1-andrew.rybchenko@oktetlabs.ru> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210907125157.3843-1-ivan.malov@oktetlabs.ru> References: <20210907125157.3843-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v1 00/12] ethdev: rework transfer flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Series |
ethdev: rework transfer flow API
|
|
Message
Andrew Rybchenko
Oct. 1, 2021, 1:47 p.m. UTC
The patch series provides a number of changesets which are supposed to orderly address transfer flow API problems: hard to understand, ambiguous definition, different implemantation of the same actions by different PMDs etc. As a starting point, items and actions ETHDEV, ESWITCH_PORT are added and the corresponding diagrams are placed in relevant documentation sections to demonstrate the intended meaning of the new primitives. The use of the new items effectively defines traffic direction in a clear and concise manner. On this ground, the use of attributes "ingress" and "egress" in "transfer" flows is deprecated. At the same time, the patch series deprecates the use of items and actions PF, VF and PHY_PORT. They’re hard-to-use by applications as they suggest that applications have some extra knowledge of the underlying HW. Items and actions PORT_ID are also deprecated on similar grounds: they are ambiguous (which attendees of the said gathering can attest to) as they do not specify precisely whether the target port is an ethdev or an e-switch port connected to that ethdev. The patch series address deprecation notices about PORT_ID semantics, ingress/egress attributes and implicit filtering in the case of transfer flow rules. The patch series is the next step in accordance with ideas previously shared in RFC [1]. It supersedes patches [2] and [3] which should be discarded since they are step in different direction. The patch series updates PMDs which support PORT_ID item and action to support added replacements except: - PORT_ID item in the case of net/mlx5 since code is really complicated there and it would be better if it is updated by the maintainer and tested appropriately; - ESWITCH_PORT action in the case of net/sfc since required code depends on port representors patch series (patches exist but should be submitted in a right order to apply cleanly and build successfully by automation) Patches for transfer proxy mentioned in RFC [1] are in progress. [1] https://patches.dpdk.org/project/dpdk/patch/20210907125157.3843-1-ivan.malov@oktetlabs.ru/ [2] https://patches.dpdk.org/project/dpdk/patch/20210901151104.3923889-1-andrew.rybchenko@oktetlabs.ru/ [3] https://patches.dpdk.org/project/dpdk/patch/20210903074610.313622-1-andrew.rybchenko@oktetlabs.ru/ Andrew Rybchenko (6): net/bnxt: support ethdev and E-Switch port flow items net/bnxt: support ethdev and E-Switch port flow actions net/enic: support ethdev and E-Switch port flow actions net/mlx5: support E-Switch port flow action net/octeontx2: support ethdev flow action net/sfc: support ethdev flow item Ivan Malov (6): ethdev: add ethdev item to flow API ethdev: add eswitch port item to flow API ethdev: add ethdev action to flow API ethdev: add eswitch port action to flow API ethdev: deprecate hard-to-use or ambiguous items and actions ethdev: deprecate direction attributes in transfer flows app/test-pmd/cmdline_flow.c | 102 +++++++++++ doc/guides/prog_guide/rte_flow.rst | 157 +++++++++++++++-- doc/guides/rel_notes/deprecation.rst | 18 +- doc/guides/rel_notes/release_21_11.rst | 9 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 16 ++ drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c | 22 ++- drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 164 +++++++++++++----- drivers/net/bnxt/tf_ulp/ulp_rte_parser.h | 18 +- drivers/net/enic/enic_fm_flow.c | 93 ++++++++-- drivers/net/mlx5/mlx5_flow_dv.c | 62 +++++-- drivers/net/octeontx2/otx2_flow_parse.c | 16 +- drivers/net/sfc/sfc_mae.c | 72 ++++++++ lib/ethdev/rte_flow.c | 4 + lib/ethdev/rte_flow.h | 157 ++++++++++++++++- 14 files changed, 793 insertions(+), 117 deletions(-)
Comments
As per RFC [1], action PORT_ID appears to be ambiguous. Its name suggests that matching traffic be sent to the ethdev with the specified ID, that is, to the application. However, in Open vSwitch, the action is used to send traffic to a remote entity represented by the given port, that is, in the opposite direction. Its interpretation across PMDs also varies. RFC [2] attempted to define action PORT_ID semantics in vSwitch sense. However, this solution would completely abandon the opposite meaning. One more effort, RFC [3], was meant to declare that the use of direction attributes in "transfer" flows assumed implicit filtering by the port ID appearing as the first argument in rte_flow_create(). However, not all PMDs require such filtering, so the RFC turned out rather disputable. Since then, all of that has been given more thought: 1. One should not attempt to fix action PORT_ID. Instead, two new actions should be introduced. The first one should send traffic to the given ethdev. The second one should send it to the represented entity. 2. Similar to (1), two new items should be defined. The first one should match traffic going down from the given ethdev. The second one should match traffic going up from the entity represented by that ethdev. 3. The application always knows which packets come through which ethdevs. So, as per (2), the application can use the new item to match traffic arriving from precise entities represented by the relevant ethdev IDs. 4. New items suggested in (2) do not require the use of direction attributes. These items define precise directions on their own. 5. As a consequence of (3) and (4), the problem of implicit filtering by rte_flow_create() port ID argument and direction attributes is no longer a blocker. The new items allow to dispose of it. The new items appear to be symmetrical to each other. So do the new actions. This requires that their names reflect the symmetry. Also, the names should respect the existing concept of port representors. By the looks of it, terms "PORT_REPRESENTOR" and "REPRESENTED_PORT" satisfy these requirements. However, currently, ethdevs associated with network ports are not considered as their representors. Such understanding is mentioned in the documentation, but it's not expressed in the code (see enum rte_eth_representor_type). The short of it, this patch series follows points (1-5) to rework support for "transfer" flows accordingly. On the way, a string of ambiguous pattern items (PF, VF, PHY_PORT) is deprecated. The patch series also updates PMDs which support item and action PORT_ID to add support for replacements (1-2). However, there're some exceptions: - Support for traffic source items in the case of net/mlx5 is really complicated. This series does not rework it. The PMD maintainer can do the job much better and test the new code accordingly; - Support for item REPRESENTED_PORT and both actions is not added to net/sfc. This will be done later on, in a separate series. Changes in v2: * New naming and reworked comments * New diagrams Changes in v3: * Diagram improvements * Spelling fixes Changes in v4: * Minor adjustments as per request by Ferruh Yigit Changes in v5: * Extra documentation updates in patches [01/12] through [04/12] Andrew Rybchenko (6): net/bnxt: support meta flow items to match on traffic source net/bnxt: support meta flow actions to overrule destinations net/enic: support meta flow actions to overrule destinations net/mlx5: support represented port flow action net/octeontx2: support port representor flow action net/sfc: support port representor flow item Ivan Malov (6): ethdev: add port representor item to flow API ethdev: add represented port item to flow API ethdev: add port representor action to flow API ethdev: add represented port action to flow API ethdev: deprecate hard-to-use or ambiguous items and actions ethdev: deprecate direction attributes in transfer flows app/test-pmd/cmdline_flow.c | 104 +++++++ doc/guides/nics/features/bnxt.ini | 4 + doc/guides/nics/features/enic.ini | 2 + doc/guides/nics/features/mlx5.ini | 1 + doc/guides/nics/features/octeontx2.ini | 1 + doc/guides/nics/features/sfc.ini | 1 + doc/guides/nics/mlx5.rst | 4 +- doc/guides/nics/octeontx2.rst | 5 +- doc/guides/nics/sfc_efx.rst | 4 + doc/guides/prog_guide/rte_flow.rst | 270 +++++++++++++++++- doc/guides/rel_notes/deprecation.rst | 18 +- doc/guides/rel_notes/release_21_11.rst | 8 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 19 ++ drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c | 22 +- drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 161 ++++++++--- drivers/net/bnxt/tf_ulp/ulp_rte_parser.h | 12 +- drivers/net/enic/enic_fm_flow.c | 93 ++++-- drivers/net/mlx5/mlx5_flow_dv.c | 64 ++++- drivers/net/octeontx2/otx2_flow_parse.c | 16 +- drivers/net/sfc/sfc_mae.c | 72 +++++ lib/ethdev/rte_flow.c | 4 + lib/ethdev/rte_flow.h | 162 ++++++++++- 22 files changed, 927 insertions(+), 120 deletions(-)