mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-23 11:59:20 +07:00
net/mlx5e: Replace TC VLAN pop with VLAN 0 rewrite in prio tag mode
Current ConnectX HW is unable to perform VLAN pop in TX path and VLAN push on RX path. To workaround that limitation untagged packets are tagged with VLAN ID 0x000 (priority tag) and pop/push actions are replaced by VLAN re-write actions (which are supported by the HW). Replace TC VLAN pop action with a VLAN priority tag header rewrite. Signed-off-by: Eli Britstein <elibr@mellanox.com> Reviewed-by: Oz Shlomo <ozsh@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
184867373d
commit
0bac119453
@ -2436,6 +2436,30 @@ static int add_vlan_rewrite_action(struct mlx5e_priv *priv, int namespace,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
add_vlan_prio_tag_rewrite_action(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr,
|
||||
struct pedit_headers_action *hdrs,
|
||||
u32 *action, struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct flow_action_entry prio_tag_act = {
|
||||
.vlan.vid = 0,
|
||||
.vlan.prio =
|
||||
MLX5_GET(fte_match_set_lyr_2_4,
|
||||
get_match_headers_value(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio) &
|
||||
MLX5_GET(fte_match_set_lyr_2_4,
|
||||
get_match_headers_criteria(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio),
|
||||
};
|
||||
|
||||
return add_vlan_rewrite_action(priv, MLX5_FLOW_NAMESPACE_FDB,
|
||||
&prio_tag_act, parse_attr, hdrs, action,
|
||||
extack);
|
||||
}
|
||||
|
||||
static int parse_tc_nic_actions(struct mlx5e_priv *priv,
|
||||
struct flow_action *flow_action,
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr,
|
||||
@ -2947,6 +2971,18 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
|
||||
}
|
||||
}
|
||||
|
||||
if (MLX5_CAP_GEN(esw->dev, prio_tag_required) &&
|
||||
action & MLX5_FLOW_CONTEXT_ACTION_VLAN_POP) {
|
||||
/* For prio tag mode, replace vlan pop with rewrite vlan prio
|
||||
* tag rewrite.
|
||||
*/
|
||||
action &= ~MLX5_FLOW_CONTEXT_ACTION_VLAN_POP;
|
||||
err = add_vlan_prio_tag_rewrite_action(priv, parse_attr, hdrs,
|
||||
&action, extack);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (hdrs[TCA_PEDIT_KEY_EX_CMD_SET].pedits ||
|
||||
hdrs[TCA_PEDIT_KEY_EX_CMD_ADD].pedits) {
|
||||
err = alloc_tc_pedit_action(priv, MLX5_FLOW_NAMESPACE_FDB,
|
||||
|
Loading…
Reference in New Issue
Block a user