mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-11 21:14:07 +08:00
net/mlx5e: Use the inner headers to determine tc/pedit offload limitation on decap flows
In packets that need to be decaped the internal headers
have to be checked, not the external ones.
Fixes: bdd66ac0ae
("net/mlx5e: Disallow TC offloading of unsupported match/action combinations")
Signed-off-by: Guy Shattah <sguy@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
6363651d6d
commit
1651925d40
@ -2181,6 +2181,7 @@ static bool csum_offload_supported(struct mlx5e_priv *priv,
|
||||
|
||||
static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
|
||||
struct tcf_exts *exts,
|
||||
u32 actions,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct tc_action *a;
|
||||
@ -2190,7 +2191,11 @@ static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
|
||||
u16 ethertype;
|
||||
int nkeys, i;
|
||||
|
||||
headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);
|
||||
if (actions & MLX5_FLOW_CONTEXT_ACTION_DECAP)
|
||||
headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, inner_headers);
|
||||
else
|
||||
headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);
|
||||
|
||||
ethertype = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ethertype);
|
||||
|
||||
/* for non-IP we only re-write MACs, so we're okay */
|
||||
@ -2247,7 +2252,7 @@ static bool actions_match_supported(struct mlx5e_priv *priv,
|
||||
|
||||
if (actions & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
|
||||
return modify_header_match_supported(&parse_attr->spec, exts,
|
||||
extack);
|
||||
actions, extack);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user