* Destroy meter rules. * * @param[in] dev * Pointer to Ethernet device. * @param[in] meter_id * Meter id. * @param[out] error * Pointer to rte meter error structure. * * @return * 0 on success, a negative errno value otherwise and rte_errno is set. */
| 1609 | * 0 on success, a negative errno value otherwise and rte_errno is set. |
| 1610 | */ |
| 1611 | static int |
| 1612 | mlx5_flow_meter_destroy(struct rte_eth_dev *dev, uint32_t meter_id, |
| 1613 | struct rte_mtr_error *error) |
| 1614 | { |
| 1615 | struct mlx5_priv *priv = dev->data->dev_private; |
| 1616 | struct mlx5_flow_meter_info *fm; |
| 1617 | uint32_t mtr_idx = 0; |
| 1618 | |
| 1619 | if (!priv->mtr_en) |
| 1620 | return -rte_mtr_error_set(error, ENOTSUP, |
| 1621 | RTE_MTR_ERROR_TYPE_UNSPECIFIED, |
| 1622 | NULL, |
| 1623 | "Meter is not supported"); |
| 1624 | /* Meter object must exist. */ |
| 1625 | fm = mlx5_flow_meter_find(priv, meter_id, &mtr_idx); |
| 1626 | if (fm == NULL) |
| 1627 | return -rte_mtr_error_set(error, ENOENT, |
| 1628 | RTE_MTR_ERROR_TYPE_MTR_ID, |
| 1629 | NULL, |
| 1630 | "Meter object id not valid."); |
| 1631 | /* Meter object must not have any owner. */ |
| 1632 | if (fm->ref_cnt > 0) |
| 1633 | return -rte_mtr_error_set(error, EBUSY, |
| 1634 | RTE_MTR_ERROR_TYPE_UNSPECIFIED, |
| 1635 | NULL, |
| 1636 | "Meter object is being used."); |
| 1637 | /* Destroy the meter profile. */ |
| 1638 | if (mlx5_flow_meter_params_flush(dev, fm, mtr_idx)) |
| 1639 | return -rte_mtr_error_set(error, EINVAL, |
| 1640 | RTE_MTR_ERROR_TYPE_METER_PROFILE_ID, |
| 1641 | NULL, |
| 1642 | "MTR object meter profile invalid."); |
| 1643 | return 0; |
| 1644 | } |
| 1645 | |
| 1646 | /** |
| 1647 | * Modify meter state. |
nothing calls this directly
no test coverage detected