Skip to content

Commit

Permalink
net/mlx5e: TC, Reject forwarding from internal port to internal port
Browse files Browse the repository at this point in the history
Reject TC rules that forward from internal port to internal port
as it is not supported.

This include rules that are explicitly have internal port as
the filter device as well as rules that apply on tunnel interfaces
as the route device for the tunnel interface can be an internal
port.

Fixes: 27484f7 ("net/mlx5e: Offload tc rules that redirect to ovs internal port")
Signed-off-by: Ariel Levkovich <[email protected]>
Reviewed-by: Maor Dickman <[email protected]>
Signed-off-by: Saeed Mahameed <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
Awik84 authored and kuba-moo committed Oct 27, 2022
1 parent bacd22d commit f382a24
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4066,6 +4066,7 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
struct mlx5e_tc_flow_parse_attr *parse_attr;
struct mlx5_flow_attr *attr = flow->attr;
struct mlx5_esw_flow_attr *esw_attr;
struct net_device *filter_dev;
int err;

err = flow_action_supported(flow_action, extack);
Expand All @@ -4074,6 +4075,7 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,

esw_attr = attr->esw_attr;
parse_attr = attr->parse_attr;
filter_dev = parse_attr->filter_dev;
parse_state = &parse_attr->parse_state;
mlx5e_tc_act_init_parse_state(parse_state, flow, flow_action, extack);
parse_state->ct_priv = get_ct_priv(priv);
Expand All @@ -4083,13 +4085,21 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
return err;

/* Forward to/from internal port can only have 1 dest */
if ((netif_is_ovs_master(parse_attr->filter_dev) || esw_attr->dest_int_port) &&
if ((netif_is_ovs_master(filter_dev) || esw_attr->dest_int_port) &&
esw_attr->out_count > 1) {
NL_SET_ERR_MSG_MOD(extack,
"Rules with internal port can have only one destination");
return -EOPNOTSUPP;
}

/* Forward from tunnel/internal port to internal port is not supported */
if ((mlx5e_get_tc_tun(filter_dev) || netif_is_ovs_master(filter_dev)) &&
esw_attr->dest_int_port) {
NL_SET_ERR_MSG_MOD(extack,
"Forwarding from tunnel/internal port to internal port is not supported");
return -EOPNOTSUPP;
}

err = actions_prepare_mod_hdr_actions(priv, flow, attr, extack);
if (err)
return err;
Expand Down

0 comments on commit f382a24

Please sign in to comment.