* Check meter validation. * * @param[in] priv * Pointer to mlx5 private data structure. * @param[in] meter_id * Meter id. * @param[in] params * Pointer to rte meter parameters. * @param[out] error * Pointer to rte meter error structure. * * @return * 0 on success, a negative errno value otherwise and rte_errno is set. */
| 1182 | * 0 on success, a negative errno value otherwise and rte_errno is set. |
| 1183 | */ |
| 1184 | static int |
| 1185 | mlx5_flow_meter_validate(struct mlx5_priv *priv, uint32_t meter_id, |
| 1186 | struct rte_mtr_params *params, |
| 1187 | struct rte_mtr_error *error) |
| 1188 | { |
| 1189 | /* Meter must use global drop action. */ |
| 1190 | if (!priv->sh->dr_drop_action) |
| 1191 | return -rte_mtr_error_set(error, ENOTSUP, |
| 1192 | RTE_MTR_ERROR_TYPE_MTR_PARAMS, |
| 1193 | NULL, |
| 1194 | "No drop action ready for meter."); |
| 1195 | /* Meter params must not be NULL. */ |
| 1196 | if (params == NULL) |
| 1197 | return -rte_mtr_error_set(error, EINVAL, |
| 1198 | RTE_MTR_ERROR_TYPE_MTR_PARAMS, |
| 1199 | NULL, "Meter object params null."); |
| 1200 | /* Previous meter color is not supported. */ |
| 1201 | if (params->use_prev_mtr_color && !priv->sh->meter_aso_en) |
| 1202 | return -rte_mtr_error_set(error, ENOTSUP, |
| 1203 | RTE_MTR_ERROR_TYPE_MTR_PARAMS, |
| 1204 | NULL, |
| 1205 | "Previous meter color " |
| 1206 | "not supported."); |
| 1207 | if (params->meter_policy_id == MLX5_INVALID_POLICY_ID) |
| 1208 | return -rte_mtr_error_set(error, ENOENT, |
| 1209 | RTE_MTR_ERROR_TYPE_METER_POLICY_ID, |
| 1210 | NULL, "Meter policy id not valid."); |
| 1211 | /* Validate meter id. */ |
| 1212 | if (mlx5_flow_meter_find(priv, meter_id, NULL)) |
| 1213 | return -rte_mtr_error_set(error, EEXIST, |
| 1214 | RTE_MTR_ERROR_TYPE_MTR_ID, NULL, |
| 1215 | "Meter object already exists."); |
| 1216 | return 0; |
| 1217 | } |
| 1218 | |
| 1219 | /** |
| 1220 | * Modify the flow meter action. |
no test coverage detected