net/mlx5: DR, Enable counter on non-fwd-dest objects
The current code handles only counters that attached to dest, we still
have the cases where we have counter on non-dest, like over drop etc.
Fixes: 6a48faeeca
("net/mlx5: Add direct rule fs_cmd implementation")
Signed-off-by: Hamdan Igbaria <hamdani@mellanox.com>
Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
Reviewed-by: Alex Vesker <valex@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
505a7f5478
commit
b850a82114
@ -352,26 +352,16 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns,
|
|||||||
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
|
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
|
||||||
list_for_each_entry(dst, &fte->node.children, node.list) {
|
list_for_each_entry(dst, &fte->node.children, node.list) {
|
||||||
enum mlx5_flow_destination_type type = dst->dest_attr.type;
|
enum mlx5_flow_destination_type type = dst->dest_attr.type;
|
||||||
u32 id;
|
|
||||||
|
|
||||||
if (num_actions == MLX5_FLOW_CONTEXT_ACTION_MAX) {
|
if (num_actions == MLX5_FLOW_CONTEXT_ACTION_MAX) {
|
||||||
err = -ENOSPC;
|
err = -ENOSPC;
|
||||||
goto free_actions;
|
goto free_actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
if (type == MLX5_FLOW_DESTINATION_TYPE_COUNTER)
|
||||||
case MLX5_FLOW_DESTINATION_TYPE_COUNTER:
|
continue;
|
||||||
id = dst->dest_attr.counter_id;
|
|
||||||
|
|
||||||
tmp_action =
|
switch (type) {
|
||||||
mlx5dr_action_create_flow_counter(id);
|
|
||||||
if (!tmp_action) {
|
|
||||||
err = -ENOMEM;
|
|
||||||
goto free_actions;
|
|
||||||
}
|
|
||||||
fs_dr_actions[fs_dr_num_actions++] = tmp_action;
|
|
||||||
actions[num_actions++] = tmp_action;
|
|
||||||
break;
|
|
||||||
case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE:
|
case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE:
|
||||||
tmp_action = create_ft_action(dev, dst);
|
tmp_action = create_ft_action(dev, dst);
|
||||||
if (!tmp_action) {
|
if (!tmp_action) {
|
||||||
@ -397,6 +387,32 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
|
||||||
|
list_for_each_entry(dst, &fte->node.children, node.list) {
|
||||||
|
u32 id;
|
||||||
|
|
||||||
|
if (dst->dest_attr.type !=
|
||||||
|
MLX5_FLOW_DESTINATION_TYPE_COUNTER)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (num_actions == MLX5_FLOW_CONTEXT_ACTION_MAX) {
|
||||||
|
err = -ENOSPC;
|
||||||
|
goto free_actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
id = dst->dest_attr.counter_id;
|
||||||
|
tmp_action =
|
||||||
|
mlx5dr_action_create_flow_counter(id);
|
||||||
|
if (!tmp_action) {
|
||||||
|
err = -ENOMEM;
|
||||||
|
goto free_actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs_dr_actions[fs_dr_num_actions++] = tmp_action;
|
||||||
|
actions[num_actions++] = tmp_action;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
params.match_sz = match_sz;
|
params.match_sz = match_sz;
|
||||||
params.match_buf = (u64 *)fte->val;
|
params.match_buf = (u64 *)fte->val;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user