On Thu, Jan 16, 2020 at 3:45 PM Xiaoyu Min <jack...@mellanox.com> wrote:
>
> Introduce an API which dump the device's internal representation
> information of rte flows in hardware.
>
> Signed-off-by: Xiaoyu Min <jack...@mellanox.com>

Looks good to me.

> ---
>  lib/librte_ethdev/rte_ethdev_version.map |  3 +++
>  lib/librte_ethdev/rte_flow.c             | 16 ++++++++++++++++
>  lib/librte_ethdev/rte_flow.h             | 21 +++++++++++++++++++++
>  lib/librte_ethdev/rte_flow_driver.h      |  5 +++++
>  4 files changed, 45 insertions(+)
>
> diff --git a/lib/librte_ethdev/rte_ethdev_version.map 
> b/lib/librte_ethdev/rte_ethdev_version.map
> index a7dacf2cf2..3f32fdecf7 100644
> --- a/lib/librte_ethdev/rte_ethdev_version.map
> +++ b/lib/librte_ethdev/rte_ethdev_version.map
> @@ -227,4 +227,7 @@ EXPERIMENTAL {
>         rte_flow_dynf_metadata_mask;
>         rte_flow_dynf_metadata_register;
>         rte_eth_dev_set_ptypes;
> +
> +       # added in 20.02
> +       rte_flow_dev_dump;
>  };
> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
> index 87a3e8c4c6..751ce721b2 100644
> --- a/lib/librte_ethdev/rte_flow.c
> +++ b/lib/librte_ethdev/rte_flow.c
> @@ -1212,3 +1212,19 @@ rte_flow_expand_rss(struct rte_flow_expand_rss *buf, 
> size_t size,
>         }
>         return lsize;
>  }
> +
> +int
> +rte_flow_dev_dump(uint16_t port_id, FILE *file, 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);
> +
> +       if (unlikely(!ops))
> +               return -rte_errno;
> +       if (likely(!!ops->dev_dump))
> +               return flow_err(port_id, ops->dev_dump(dev, file, error),
> +                               error);
> +       return rte_flow_error_set(error, ENOSYS,
> +                                 RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> +                                 NULL, rte_strerror(ENOSYS));
> +}
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index 58b50265d2..cf7cf61ae8 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -2790,6 +2790,27 @@ enum rte_flow_conv_op {
>         RTE_FLOW_CONV_OP_ACTION_NAME_PTR,
>  };
>
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Dump hardware internal representation information of
> + * rte flow to file.
> + *
> + * @param[in] port_id
> + *    The port identifier of the Ethernet device.
> + * @param[in] file
> + *   A pointer to a file for output.
> + * @param[out] error
> + *   Perform verbose error reporting if not NULL. PMDs initialize this
> + *   structure in case of error only.
> + * @return
> + *   0 on success, a nagative value otherwise.
> + */
> +__rte_experimental
> +int
> +rte_flow_dev_dump(uint16_t port_id, FILE *file, struct rte_flow_error 
> *error);
> +
>  /**
>   * Check if mbuf dynamic field for metadata is registered.
>   *
> diff --git a/lib/librte_ethdev/rte_flow_driver.h 
> b/lib/librte_ethdev/rte_flow_driver.h
> index a0359853e6..51a9a57a0f 100644
> --- a/lib/librte_ethdev/rte_flow_driver.h
> +++ b/lib/librte_ethdev/rte_flow_driver.h
> @@ -96,6 +96,11 @@ struct rte_flow_ops {
>                 (struct rte_eth_dev *,
>                  int,
>                  struct rte_flow_error *);
> +       /** See rte_flow_dev_dump(). */
> +       int (*dev_dump)
> +               (struct rte_eth_dev *dev,
> +                FILE *file,
> +                struct rte_flow_error *error);
>  };
>
>  /**
> --
> 2.24.1
>

Reply via email to