tc_act
tc_act = mlx5e_tc_act_get(act->id, ns_type);
if (!tc_act || !tc_act->post_parse)
err = tc_act->post_parse(parse_state, priv, attr);
struct mlx5e_tc_act *tc_act;
dec_jump_count(struct flow_action_entry *act, struct mlx5e_tc_act *tc_act,
if (tc_act->is_terminating_action) { /* the branch ends here */
parse_branch_ctrl(struct flow_action_entry *act, struct mlx5e_tc_act *tc_act,
if (!tc_act->get_branch_ctrl)
tc_act->get_branch_ctrl(act, &cond_true, &cond_false);
struct mlx5e_tc_act *tc_act;
tc_act = mlx5e_tc_act_get(act->id, ns_type);
if (!tc_act) {
if (tc_act->can_offload && !tc_act->can_offload(parse_state, act, i, attr)) {
err = tc_act->parse_action(parse_state, act, priv, attr);
dec_jump_count(act, tc_act, attr, priv, &jump_state);
err = parse_branch_ctrl(act, tc_act, flow, attr, &jump_state, extack);
(tc_act->is_multi_table_act &&
tc_act->is_multi_table_act(priv, act, attr) &&
is_missable = tc_act->is_missable ? tc_act->is_missable(act) : false;
} else if (!tc_act->stats_action) {
ret = tc_act(skb, a, res);
static int tcf_police_act_to_flow_act(int tc_act, u32 *extval,
if (!TC_ACT_EXT_OPCODE(tc_act)) {
if (tc_act == TC_ACT_OK)
else if (tc_act == TC_ACT_SHOT)
else if (tc_act == TC_ACT_PIPE)
else if (tc_act == TC_ACT_RECLASSIFY)
} else if (TC_ACT_EXT_CMP(tc_act, TC_ACT_GOTO_CHAIN)) {
*extval = tc_act & TC_ACT_EXT_VAL_MASK;
} else if (TC_ACT_EXT_CMP(tc_act, TC_ACT_JUMP)) {
*extval = tc_act & TC_ACT_EXT_VAL_MASK;
} else if (tc_act == TC_ACT_UNSPEC) {