From: Ivan Malov Date: Wed, 13 Oct 2021 17:34:40 +0000 (+0300) Subject: ethdev: add represented port action to flow API X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=88caad251c8de3a84e353b0b2a27014bc303df87;p=dpdk.git ethdev: add represented port action to flow API For use in "transfer" flows. Supposed to send matching traffic to the entity represented by the given ethdev, at embedded switch level. Such an entity can be a network (via a network port), a guest machine (via a VF) or another ethdev in the same application. Signed-off-by: Ivan Malov Acked-by: Ori Kam Acked-by: Andrew Rybchenko --- diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 1496d7a067..d897d0d1d4 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -461,6 +461,8 @@ enum index { ACTION_POL_R, ACTION_PORT_REPRESENTOR, ACTION_PORT_REPRESENTOR_PORT_ID, + ACTION_REPRESENTED_PORT, + ACTION_REPRESENTED_PORT_ETHDEV_PORT_ID, }; /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -1454,6 +1456,7 @@ static const enum index next_action[] = { ACTION_CONNTRACK, ACTION_CONNTRACK_UPDATE, ACTION_PORT_REPRESENTOR, + ACTION_REPRESENTED_PORT, ZERO, }; @@ -1740,6 +1743,12 @@ static const enum index action_port_representor[] = { ZERO, }; +static const enum index action_represented_port[] = { + ACTION_REPRESENTED_PORT_ETHDEV_PORT_ID, + ACTION_NEXT, + ZERO, +}; + static int parse_set_raw_encap_decap(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -4836,6 +4845,23 @@ static const struct token token_list[] = { port_id)), .call = parse_vc_conf, }, + [ACTION_REPRESENTED_PORT] = { + .name = "represented_port", + .help = "at embedded switch level, send matching traffic to the entity represented by the given ethdev", + .priv = PRIV_ACTION(REPRESENTED_PORT, + sizeof(struct rte_flow_action_ethdev)), + .next = NEXT(action_represented_port), + .call = parse_vc, + }, + [ACTION_REPRESENTED_PORT_ETHDEV_PORT_ID] = { + .name = "ethdev_port_id", + .help = "ethdev port ID", + .next = NEXT(action_represented_port, + NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_ethdev, + port_id)), + .call = parse_vc_conf, + }, /* Indirect action destroy arguments. */ [INDIRECT_ACTION_DESTROY_ID] = { .name = "action_id", diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini index f7f937ca0a..09914b1ad3 100644 --- a/doc/guides/nics/features/default.ini +++ b/doc/guides/nics/features/default.ini @@ -173,6 +173,7 @@ port_representor = queue = raw_decap = raw_encap = +represented_port = rss = sample = security = diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 587ed37c2c..27a17fac58 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1532,6 +1532,8 @@ at the opposite end of the "wire" leading to the ethdev. This item is meant to use the same structure as `Item: PORT_REPRESENTOR`_. +See also `Action: REPRESENTED_PORT`_. + Actions ~~~~~~~ @@ -3145,6 +3147,53 @@ at the opposite end of the "wire" leading to the ethdev. See also `Item: PORT_REPRESENTOR`_. +Action: ``REPRESENTED_PORT`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +At embedded switch level, send matching traffic to +the entity represented by the given ethdev. + +Term **ethdev** and the concept of **port representor** are synonymous. +The **represented port** is an *entity* plugged to the embedded switch +at the opposite end of the "wire" leading to the ethdev. + +:: + + .--------------------. + | PORT_REPRESENTOR | Ethdev (Application Port Referred to by its ID) + '--------------------' + : + : + .----------------. + | Logical Port | + '----------------' + : + : + : + : + .----------. .--------------------. + | Switch | <== | Matching Traffic | + '----------' '--------------------' + || + || + || + \/ + .----------------. + | Logical Port | + '----------------' + || + \/ + .--------------------. + | REPRESENTED_PORT | Net / Guest / Another Ethdev (Same Application) + '--------------------' + + +- Requires `Attribute: Transfer`_. + +This action is meant to use the same structure as `Action: PORT_REPRESENTOR`_. + +See also `Item: REPRESENTED_PORT`_. + Negative types ~~~~~~~~~~~~~~ diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst index 157b623036..81e5d9c72f 100644 --- a/doc/guides/rel_notes/release_21_11.rst +++ b/doc/guides/rel_notes/release_21_11.rst @@ -294,8 +294,8 @@ API Changes * net: Renamed ``s_addr`` and ``d_addr`` fields of ``rte_ether_hdr`` structure to ``src_addr`` and ``dst_addr``, respectively. -* ethdev: Added items ``PORT_REPRESENTOR``, ``REPRESENTED_PORT`` and action - ``PORT_REPRESENTOR`` to flow API. +* ethdev: Added items and actions ``PORT_REPRESENTOR``, ``REPRESENTED_PORT`` to + flow API. * cryptodev: The API rte_cryptodev_pmd_is_valid_dev is modified to rte_cryptodev_is_valid_dev as it can be used by the application as diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 46b7f07cbc..22ba8f0516 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -4090,6 +4090,11 @@ This section lists supported actions and their attributes, if any. - ``port_id {unsigned}``: ethdev port ID +- ``represented_port``: at embedded switch level, send matching traffic to + the entity represented by the given ethdev + + - ``ethdev_port_id {unsigned}``: ethdev port ID + Destroying flow rules ~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index b074b1c77d..542e40e496 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -192,6 +192,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(INDIRECT, 0), MK_FLOW_ACTION(CONNTRACK, sizeof(struct rte_flow_action_conntrack)), MK_FLOW_ACTION(PORT_REPRESENTOR, sizeof(struct rte_flow_action_ethdev)), + MK_FLOW_ACTION(REPRESENTED_PORT, sizeof(struct rte_flow_action_ethdev)), }; int diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 56fd4393e5..ff32c0a5ee 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -2462,6 +2462,14 @@ enum rte_flow_action_type { * @see struct rte_flow_action_ethdev */ RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR, + + /** + * At embedded switch level, send matching traffic to + * the entity represented by the given ethdev. + * + * @see struct rte_flow_action_ethdev + */ + RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT, }; /** @@ -3212,7 +3220,8 @@ struct rte_flow_action_meter_color { * @b EXPERIMENTAL: this structure may change without prior notice * * Provides an ethdev port ID for use with the following actions: - * RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR. + * RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR, + * RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT. */ struct rte_flow_action_ethdev { uint16_t port_id; /**< ethdev port ID */