Commit ec587855 authored by Oz Shlomo's avatar Oz Shlomo Committed by Jakub Kicinski

net/mlx5e: TC, set control params for branching actions

Extend the act tc api to set the branch control params aligning with
the police conform/exceed use case.
Signed-off-by: default avatarOz Shlomo <ozsh@nvidia.com>
Reviewed-by: default avatarRoi Dayan <roid@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Link: https://lore.kernel.org/r/20221203221337.29267-7-saeed@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 64426382
...@@ -32,6 +32,11 @@ struct mlx5e_tc_act_parse_state { ...@@ -32,6 +32,11 @@ struct mlx5e_tc_act_parse_state {
struct mlx5_tc_ct_priv *ct_priv; struct mlx5_tc_ct_priv *ct_priv;
}; };
struct mlx5e_tc_act_branch_ctrl {
enum flow_action_id act_id;
u32 extval;
};
struct mlx5e_tc_act { struct mlx5e_tc_act {
bool (*can_offload)(struct mlx5e_tc_act_parse_state *parse_state, bool (*can_offload)(struct mlx5e_tc_act_parse_state *parse_state,
const struct flow_action_entry *act, const struct flow_action_entry *act,
...@@ -61,6 +66,10 @@ struct mlx5e_tc_act { ...@@ -61,6 +66,10 @@ struct mlx5e_tc_act {
int (*stats_action)(struct mlx5e_priv *priv, int (*stats_action)(struct mlx5e_priv *priv,
struct flow_offload_action *fl_act); struct flow_offload_action *fl_act);
bool (*get_branch_ctrl)(const struct flow_action_entry *act,
struct mlx5e_tc_act_branch_ctrl *cond_true,
struct mlx5e_tc_act_branch_ctrl *cond_false);
bool is_terminating_action; bool is_terminating_action;
}; };
......
...@@ -147,6 +147,19 @@ tc_act_police_stats(struct mlx5e_priv *priv, ...@@ -147,6 +147,19 @@ tc_act_police_stats(struct mlx5e_priv *priv,
return 0; return 0;
} }
static bool
tc_act_police_get_branch_ctrl(const struct flow_action_entry *act,
struct mlx5e_tc_act_branch_ctrl *cond_true,
struct mlx5e_tc_act_branch_ctrl *cond_false)
{
cond_true->act_id = act->police.notexceed.act_id;
cond_true->extval = act->police.notexceed.extval;
cond_false->act_id = act->police.exceed.act_id;
cond_false->extval = act->police.exceed.extval;
return true;
}
struct mlx5e_tc_act mlx5e_tc_act_police = { struct mlx5e_tc_act mlx5e_tc_act_police = {
.can_offload = tc_act_can_offload_police, .can_offload = tc_act_can_offload_police,
.parse_action = tc_act_parse_police, .parse_action = tc_act_parse_police,
...@@ -154,4 +167,5 @@ struct mlx5e_tc_act mlx5e_tc_act_police = { ...@@ -154,4 +167,5 @@ struct mlx5e_tc_act mlx5e_tc_act_police = {
.offload_action = tc_act_police_offload, .offload_action = tc_act_police_offload,
.destroy_action = tc_act_police_destroy, .destroy_action = tc_act_police_destroy,
.stats_action = tc_act_police_stats, .stats_action = tc_act_police_stats,
.get_branch_ctrl = tc_act_police_get_branch_ctrl,
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment