[RFC 1/9] ethdev: add flex item modify field support
Ori Kam
orika at nvidia.com
Wed Jan 11 17:34:14 CET 2023
Hi Rongwei,
> -----Original Message-----
> From: Rongwei Liu <rongweil at nvidia.com>
> Sent: Wednesday, 21 December 2022 10:40
>
> Add flex item as modify field destination.
> Add "struct rte_flow_item_flex_handle *flex_handle" into
> "struct rte_flow_action_modify_data" as union with existed
> "level" member. This new member is dedicated for modifying
> flex item.
>
> Signed-off-by: Rongwei Liu <rongweil at nvidia.com>
> ---
> doc/guides/prog_guide/rte_flow.rst | 36 ++++++++++++++------------
> doc/guides/rel_notes/release_22_03.rst | 4 +++
> lib/ethdev/rte_flow.h | 8 ++++--
> 3 files changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/doc/guides/prog_guide/rte_flow.rst
> b/doc/guides/prog_guide/rte_flow.rst
> index 3e6242803d..ea20145224 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -2952,23 +2952,25 @@ value as sequence of bytes {xxx, xxx, 0x85, xxx,
> xxx, xxx}.
>
> .. table:: destination/source field definition
>
> - +---------------+----------------------------------------------------------+
> - | Field | Value |
> -
> +===============+=========================================
> =================+
> - | ``field`` | ID: packet field, mark, meta, tag, immediate, pointer |
> - +---------------+----------------------------------------------------------+
> - | ``level`` | encapsulation level of a packet field or tag array index |
> - +---------------+----------------------------------------------------------+
> - | ``offset`` | number of bits to skip at the beginning |
> - +---------------+----------------------------------------------------------+
> - | ``value`` | immediate value buffer (source field only, not |
> - | | applicable to destination) for RTE_FLOW_FIELD_VALUE |
> - | | field type |
> - +---------------+----------------------------------------------------------+
> - | ``pvalue`` | pointer to immediate value data (source field only, not |
> - | | applicable to destination) for RTE_FLOW_FIELD_POINTER |
> - | | field type |
> - +---------------+----------------------------------------------------------+
> + +-----------------+----------------------------------------------------------+
> + | Field | Value |
> +
> +=================+=======================================
> ===================+
> + | ``field`` | ID: packet field, mark, meta, tag, immediate, pointer |
> + +-----------------+----------------------------------------------------------+
> + | ``level`` | encapsulation level of a packet field or tag array index |
> + +-----------------+----------------------------------------------------------+
> + | ``flex_handle`` | flex item handle of a packet field |
> + +-----------------+----------------------------------------------------------+
> + | ``offset`` | number of bits to skip at the beginning |
> + +-----------------+----------------------------------------------------------+
> + | ``value`` | immediate value buffer (source field only, not |
> + | | applicable to destination) for RTE_FLOW_FIELD_VALUE |
> + | | field type |
> + +-----------------+----------------------------------------------------------+
> + | ``pvalue`` | pointer to immediate value data (source field only, not |
> + | | applicable to destination) for RTE_FLOW_FIELD_POINTER |
> + | | field type |
> + +-----------------+----------------------------------------------------------+
>
> Action: ``CONNTRACK``
> ^^^^^^^^^^^^^^^^^^^^^
> diff --git a/doc/guides/rel_notes/release_22_03.rst
> b/doc/guides/rel_notes/release_22_03.rst
> index 0923707cb8..5fc5aff8a4 100644
> --- a/doc/guides/rel_notes/release_22_03.rst
> +++ b/doc/guides/rel_notes/release_22_03.rst
> @@ -207,6 +207,10 @@ API Changes
> * ethdev: Old public macros and enumeration constants without
> ``RTE_ETH_`` prefix,
> which are kept for backward compatibility, are marked as deprecated.
>
> +* ethdev: added a new field:
> +
> + - modify flex item: ``rte_flow_action_modify_data.flex_handle``
> +
> * cryptodev: The asymmetric session handling was modified to use a single
> mempool object. An API ``rte_cryptodev_asym_session_pool_create`` was
> added
> to create a mempool with element size big enough to hold the generic
> asymmetric
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index b60987db4b..d535722773 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -3528,6 +3528,7 @@ enum rte_flow_field_id {
> RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */
> RTE_FLOW_FIELD_GTP_PSC_QFI, /**< GTP QFI. */
> RTE_FLOW_FIELD_METER_COLOR, /**< Meter color marker. */
> + RTE_FLOW_FIELD_FLEX_ITEM, /**< Flex item. */
> };
>
> /**
> @@ -3541,8 +3542,11 @@ struct rte_flow_action_modify_data {
> RTE_STD_C11
> union {
> struct {
> - /** Encapsulation level or tag index. */
> - uint32_t level;
> + /**< Encapsulation level or tag index or flex item
> handle. */
> + union {
> + uint32_t level;
> + struct rte_flow_item_flex_handle
> *flex_handle;
> + };
> /** Number of bits to skip from a field. */
> uint32_t offset;
> };
> --
> 2.27.0
Acked-by: Ori Kam <orika at nvidia.com>
Thanks,
Ori
More information about the dev
mailing list