Hi Slava,

> -----Original Message-----
> From: Slava Ovsiienko <viachesl...@nvidia.com>
> Sent: Tuesday, October 12, 2021 3:55 PM
> Subject: [PATCH v5 3/5] ethdev: implement RTE flex item API
> 
> From: Gregory Etelson <getel...@nvidia.com>
> 
> RTE flex item API was introduced in
> "ethdev: introduce configurable flexible item" patch.
> 
> The API allows DPDK application to define parser for custom network header in 
> port hardware and offload
> flows that will match the custom header elements.
> 
> Signed-off-by: Gregory Etelson <getel...@nvidia.com>
> Reviewed-by: Viacheslav Ovsiienko <viachesl...@nvidia.com>
> ---
>  lib/ethdev/rte_flow.c        | 40 ++++++++++++++++++++++++++++++++++++
>  lib/ethdev/rte_flow_driver.h |  8 ++++++++
>  lib/ethdev/version.map       |  4 ++++
>  3 files changed, 52 insertions(+)
> 
> diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 
> 051781b440..8257ed8c97 100644
> --- a/lib/ethdev/rte_flow.c
> +++ b/lib/ethdev/rte_flow.c
> @@ -1321,3 +1321,43 @@ rte_flow_tunnel_item_release(uint16_t port_id,
>                                 RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
>                                 NULL, rte_strerror(ENOTSUP));
>  }
> +
> +struct rte_flow_item_flex_handle *
> +rte_flow_flex_item_create(uint16_t port_id,
> +                       const struct rte_flow_item_flex_conf *conf,
> +                       struct rte_flow_error *error)
> +{
> +     struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> +     const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
> +     struct rte_flow_item_flex_handle *handle;
> +
> +     if (unlikely(!ops))
> +             return NULL;
> +     if (unlikely(!ops->flex_item_create)) {
> +             rte_flow_error_set(error, ENOTSUP,
> +                                RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> +                                NULL, rte_strerror(ENOTSUP));
> +             return NULL;
> +     }
> +     handle = ops->flex_item_create(dev, conf, error);
> +     if (handle == NULL)
> +             flow_err(port_id, -rte_errno, error);
> +     return handle;
> +}
> +
> +int
> +rte_flow_flex_item_release(uint16_t port_id,
> +                        const struct rte_flow_item_flex_handle *handle,
> +                        struct rte_flow_error *error)
> +{
> +     int ret;
> +     struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> +     const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
> +
> +     if (unlikely(!ops || !ops->flex_item_release))
> +             return rte_flow_error_set(error, ENOTSUP,
> +                                       RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> +                                       NULL, rte_strerror(ENOTSUP));
> +     ret = ops->flex_item_release(dev, handle, error);
> +     return flow_err(port_id, ret, error);
> +}
> diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h 
> index 46f62c2ec2..34a5a5bcd0
> 100644
> --- a/lib/ethdev/rte_flow_driver.h
> +++ b/lib/ethdev/rte_flow_driver.h
> @@ -139,6 +139,14 @@ struct rte_flow_ops {
>                struct rte_flow_item *pmd_items,
>                uint32_t num_of_items,
>                struct rte_flow_error *err);
> +     struct rte_flow_item_flex_handle *(*flex_item_create)
> +             (struct rte_eth_dev *dev,
> +              const struct rte_flow_item_flex_conf *conf,
> +              struct rte_flow_error *error);
> +     int (*flex_item_release)
> +             (struct rte_eth_dev *dev,
> +              const struct rte_flow_item_flex_handle *handle,
> +              struct rte_flow_error *error);
>  };
> 
>  /**
> diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index 
> 904bce6ea1..ec3b66d7a1 100644
> --- a/lib/ethdev/version.map
> +++ b/lib/ethdev/version.map
> @@ -247,6 +247,10 @@ EXPERIMENTAL {
>       rte_mtr_meter_policy_delete;
>       rte_mtr_meter_policy_update;
>       rte_mtr_meter_policy_validate;
> +
> +     # added in 21.11
> +     rte_flow_flex_item_create;
> +     rte_flow_flex_item_release;
>  };
> 
>  INTERNAL {
> --
> 2.18.1

Acked-by: Ori Kam <or...@nvidia.com>
Best,
Ori


Reply via email to