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: sta...@dpdk.org Signed-off-by: Dekel Peled <dek...@mellanox.com> --- 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 21faa98..374dbae 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1951,7 +1951,9 @@ struct field_modify_info modify_tcp[] = { * 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 @@ -1962,10 +1964,17 @@ struct field_modify_info modify_tcp[] = { */ 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"); @@ -3220,6 +3229,7 @@ struct field_modify_info modify_tcp[] = { break; case RTE_FLOW_ACTION_TYPE_JUMP: ret = flow_dv_validate_action_jump(actions, + action_flags, attr->group, error); if (ret) return ret; -- 1.8.3.1