net/mlx5: fix meter hierarchy validation with yellow
authorBing Zhao <bingz@nvidia.com>
Thu, 29 Jul 2021 16:04:05 +0000 (19:04 +0300)
committerRaslan Darawsheh <rasland@nvidia.com>
Thu, 29 Jul 2021 20:06:43 +0000 (22:06 +0200)
In mlx5 PMD, the meter hierarchy only supports the green color. It
means that a meter action can only be in the green action list. In
the meanwhile, the yellow action list should be empty now. Any
action for the yellow color policy will be considered invalid if
the green color policy is a hierarchy.

Also, the error message printing of meter hierarchy validation is
fixed by removing an incorrect checking.

Fixes: 4b7bf3ffb473 ("net/mlx5: support yellow in meter policy validation")
Fixes: a3b7af90baba ("net/mlx5: validate meter action in policy")

Signed-off-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5_flow_dv.c

index 2de6b4f..059bd25 100644 (file)
@@ -17691,9 +17691,14 @@ flow_dv_validate_mtr_policy_acts(struct rte_eth_dev *dev,
                                        return -rte_mtr_error_set(error,
                                                ENOTSUP,
                                                RTE_MTR_ERROR_TYPE_METER_POLICY,
-                                               NULL, flow_err.message ?
-                                               flow_err.message :
-                                 "Meter hierarchy only supports GREEN color.");
+                                               NULL,
+                                               "Meter hierarchy only supports GREEN color.");
+                               if (*policy_mode != MLX5_MTR_POLICY_MODE_OG)
+                                       return -rte_mtr_error_set(error,
+                                               ENOTSUP,
+                                               RTE_MTR_ERROR_TYPE_METER_POLICY,
+                                               NULL,
+                                               "No yellow policy should be provided in meter hierarchy.");
                                mtr = act->conf;
                                ret = flow_dv_validate_policy_mtr_hierarchy(dev,
                                                        mtr->mtr_id,