From: Alexander Kozyrev <akozy...@nvidia.com>

Add callback functions for both software and hardware steering
to get a pointers to Meter profile/policy by their IDs.

Signed-off-by: Alexander Kozyrev <akozy...@nvidia.com>
---
 drivers/net/mlx5/mlx5_flow_meter.c | 65 ++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/drivers/net/mlx5/mlx5_flow_meter.c 
b/drivers/net/mlx5/mlx5_flow_meter.c
index 7221bfb642..893dc42cef 100644
--- a/drivers/net/mlx5/mlx5_flow_meter.c
+++ b/drivers/net/mlx5/mlx5_flow_meter.c
@@ -741,6 +741,36 @@ mlx5_flow_meter_profile_delete(struct rte_eth_dev *dev,
        return 0;
 }
 
+/**
+ * Callback to get MTR profile.
+ *
+ * @param[in] dev
+ *   Pointer to Ethernet device.
+ * @param[in] meter_profile_id
+ *   Meter profile id.
+ * @param[out] error
+ *   Pointer to the error structure.
+ *
+ * @return
+ *   A valid handle in case of success, NULL otherwise.
+ */
+static struct rte_flow_meter_profile *
+mlx5_flow_meter_profile_get(struct rte_eth_dev *dev,
+                         uint32_t meter_profile_id,
+                         struct rte_mtr_error *error)
+{
+       struct mlx5_priv *priv = dev->data->dev_private;
+
+       if (!priv->mtr_en) {
+               rte_mtr_error_set(error, ENOTSUP,
+                                 RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
+                                 "Meter is not supported");
+               return NULL;
+       }
+       return (void *)(uintptr_t)mlx5_flow_meter_profile_find(priv,
+                                                       meter_profile_id);
+}
+
 /**
  * Callback to add MTR profile with HWS.
  *
@@ -1303,6 +1333,37 @@ mlx5_flow_meter_policy_delete(struct rte_eth_dev *dev,
        return 0;
 }
 
+/**
+ * Callback to get MTR policy.
+ *
+ * @param[in] dev
+ *   Pointer to Ethernet device.
+ * @param[in] policy_id
+ *   Meter policy id.
+ * @param[out] error
+ *   Pointer to the error structure.
+ *
+ * @return
+ *   A valid handle in case of success, NULL otherwise.
+ */
+static struct rte_flow_meter_policy *
+mlx5_flow_meter_policy_get(struct rte_eth_dev *dev,
+                         uint32_t policy_id,
+                         struct rte_mtr_error *error)
+{
+       struct mlx5_priv *priv = dev->data->dev_private;
+       uint32_t policy_idx;
+
+       if (!priv->mtr_en) {
+               rte_mtr_error_set(error, ENOTSUP,
+                                 RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
+                                 "Meter is not supported");
+               return NULL;
+       }
+       return (void *)(uintptr_t)mlx5_flow_meter_policy_find(dev, policy_id,
+                                                             &policy_idx);
+}
+
 /**
  * Callback to delete MTR policy for HWS.
  *
@@ -2554,9 +2615,11 @@ static const struct rte_mtr_ops mlx5_flow_mtr_ops = {
        .capabilities_get = mlx5_flow_mtr_cap_get,
        .meter_profile_add = mlx5_flow_meter_profile_add,
        .meter_profile_delete = mlx5_flow_meter_profile_delete,
+       .meter_profile_get = mlx5_flow_meter_profile_get,
        .meter_policy_validate = mlx5_flow_meter_policy_validate,
        .meter_policy_add = mlx5_flow_meter_policy_add,
        .meter_policy_delete = mlx5_flow_meter_policy_delete,
+       .meter_policy_get = mlx5_flow_meter_policy_get,
        .create = mlx5_flow_meter_create,
        .destroy = mlx5_flow_meter_destroy,
        .meter_enable = mlx5_flow_meter_enable,
@@ -2571,9 +2634,11 @@ static const struct rte_mtr_ops mlx5_flow_mtr_hws_ops = {
        .capabilities_get = mlx5_flow_mtr_cap_get,
        .meter_profile_add = mlx5_flow_meter_profile_hws_add,
        .meter_profile_delete = mlx5_flow_meter_profile_hws_delete,
+       .meter_profile_get = mlx5_flow_meter_profile_get,
        .meter_policy_validate = mlx5_flow_meter_policy_hws_validate,
        .meter_policy_add = mlx5_flow_meter_policy_hws_add,
        .meter_policy_delete = mlx5_flow_meter_policy_hws_delete,
+       .meter_policy_get = mlx5_flow_meter_policy_get,
        .create = mlx5_flow_meter_hws_create,
        .destroy = mlx5_flow_meter_hws_destroy,
        .meter_enable = mlx5_flow_meter_enable,
-- 
2.25.1

Reply via email to