net/mlx5e: Move vlan action chunk into tc action vlan post parse op
Move vlan prio tag rewrite handling into tc action infra vlan post parse op. Signed-off-by: Roi Dayan <roid@nvidia.com> Reviewed-by: Oz Shlomo <ozsh@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
dd5ab6d115
commit
c22080352e
@ -6,6 +6,30 @@
|
||||
#include "vlan.h"
|
||||
#include "en/tc_priv.h"
|
||||
|
||||
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,
|
||||
mlx5e_get_match_headers_value(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio) &
|
||||
MLX5_GET(fte_match_set_lyr_2_4,
|
||||
mlx5e_get_match_headers_criteria(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio),
|
||||
};
|
||||
|
||||
return mlx5e_tc_act_vlan_add_rewrite_action(priv, MLX5_FLOW_NAMESPACE_FDB,
|
||||
&prio_tag_act, parse_attr, hdrs, action,
|
||||
extack);
|
||||
}
|
||||
|
||||
static int
|
||||
parse_tc_vlan_action(struct mlx5e_priv *priv,
|
||||
const struct flow_action_entry *act,
|
||||
@ -161,7 +185,34 @@ tc_act_parse_vlan(struct mlx5e_tc_act_parse_state *parse_state,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
tc_act_post_parse_vlan(struct mlx5e_tc_act_parse_state *parse_state,
|
||||
struct mlx5e_priv *priv,
|
||||
struct mlx5_flow_attr *attr)
|
||||
{
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr = attr->parse_attr;
|
||||
struct pedit_headers_action *hdrs = parse_state->hdrs;
|
||||
struct netlink_ext_ack *extack = parse_state->extack;
|
||||
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
||||
int err;
|
||||
|
||||
if (MLX5_CAP_GEN(esw->dev, prio_tag_required) &&
|
||||
attr->action & MLX5_FLOW_CONTEXT_ACTION_VLAN_POP) {
|
||||
/* For prio tag mode, replace vlan pop with rewrite vlan prio
|
||||
* tag rewrite.
|
||||
*/
|
||||
attr->action &= ~MLX5_FLOW_CONTEXT_ACTION_VLAN_POP;
|
||||
err = add_vlan_prio_tag_rewrite_action(priv, parse_attr, hdrs,
|
||||
&attr->action, extack);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct mlx5e_tc_act mlx5e_tc_act_vlan = {
|
||||
.can_offload = tc_act_can_offload_vlan,
|
||||
.parse_action = tc_act_parse_vlan,
|
||||
.post_parse = tc_act_post_parse_vlan,
|
||||
};
|
||||
|
@ -59,7 +59,6 @@
|
||||
#include "en/tc_tun_encap.h"
|
||||
#include "en/tc/sample.h"
|
||||
#include "en/tc/act/act.h"
|
||||
#include "en/tc/act/vlan.h"
|
||||
#include "lib/devcom.h"
|
||||
#include "lib/geneve.h"
|
||||
#include "lib/fs_chains.h"
|
||||
@ -3114,30 +3113,6 @@ bool mlx5e_same_hw_devs(struct mlx5e_priv *priv, struct mlx5e_priv *peer_priv)
|
||||
return (fsystem_guid == psystem_guid);
|
||||
}
|
||||
|
||||
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,
|
||||
mlx5e_get_match_headers_value(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio) &
|
||||
MLX5_GET(fte_match_set_lyr_2_4,
|
||||
mlx5e_get_match_headers_criteria(*action,
|
||||
&parse_attr->spec),
|
||||
first_prio),
|
||||
};
|
||||
|
||||
return mlx5e_tc_act_vlan_add_rewrite_action(priv, MLX5_FLOW_NAMESPACE_FDB,
|
||||
&prio_tag_act, parse_attr, hdrs, action,
|
||||
extack);
|
||||
}
|
||||
|
||||
static int
|
||||
parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
|
||||
struct flow_action *flow_action)
|
||||
@ -3372,7 +3347,6 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
||||
struct mlx5e_tc_act_parse_state *parse_state;
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr;
|
||||
struct mlx5_flow_attr *attr = flow->attr;
|
||||
@ -3403,18 +3377,6 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (MLX5_CAP_GEN(esw->dev, prio_tag_required) &&
|
||||
attr->action & MLX5_FLOW_CONTEXT_ACTION_VLAN_POP) {
|
||||
/* For prio tag mode, replace vlan pop with rewrite vlan prio
|
||||
* tag rewrite.
|
||||
*/
|
||||
attr->action &= ~MLX5_FLOW_CONTEXT_ACTION_VLAN_POP;
|
||||
err = add_vlan_prio_tag_rewrite_action(priv, parse_attr, hdrs,
|
||||
&attr->action, extack);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = actions_prepare_mod_hdr_actions(priv, flow, attr, hdrs, extack);
|
||||
if (err)
|
||||
return err;
|
||||
|
Loading…
x
Reference in New Issue
Block a user