From b41c48b7ad6b81825001f70a7ee9b7e5bab01e76 Mon Sep 17 00:00:00 2001 From: Dekel Peled Date: Thu, 15 Aug 2019 12:26:51 +0300 Subject: [PATCH] net/mlx5: fix jump action validation This patch updates the validation function of jump action. It adds check of conflicting fate actions in flow rule. It also removes check of action->type which is not needed. Fixes: 684b9a1b1f5c ("net/mlx5: support jump action") Cc: stable@dpdk.org Signed-off-by: Dekel Peled Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/mlx5_flow_dv.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 41500bc109..a6452178b8 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1957,7 +1957,9 @@ flow_dv_validate_action_modify_ttl(const uint64_t action_flags, * Validate jump action. * * @param[in] action - * Pointer to the modify action. + * Pointer to the jump action. + * @param[in] action_flags + * Holds the actions detected until now. * @param[in] group * The group of the current flow. * @param[out] error @@ -1968,10 +1970,17 @@ flow_dv_validate_action_modify_ttl(const uint64_t action_flags, */ static int flow_dv_validate_action_jump(const struct rte_flow_action *action, + uint64_t action_flags, uint32_t group, struct rte_flow_error *error) { - if (action->type != RTE_FLOW_ACTION_TYPE_JUMP && !action->conf) + if (action_flags & (MLX5_FLOW_FATE_ACTIONS | + MLX5_FLOW_FATE_ESWITCH_ACTIONS)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, NULL, + "can't have 2 fate actions in" + " same flow"); + if (!action->conf) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION_CONF, NULL, "action configuration not set"); @@ -3226,6 +3235,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, break; case RTE_FLOW_ACTION_TYPE_JUMP: ret = flow_dv_validate_action_jump(actions, + action_flags, attr->group, error); if (ret) return ret; -- 2.20.1