net/mlx5e: Don't match double-vlan packets if cvlan is not set
authorVlad Buslov <vladbu@nvidia.com>
Mon, 28 Mar 2022 12:54:52 +0000 (15:54 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 4 May 2022 07:00:02 +0000 (00:00 -0700)
Currently, match VLAN rule also matches packets that have multiple VLAN
headers. This behavior is similar to buggy flower classifier behavior that
has recently been fixed. Fix the issue by matching on
outer_second_cvlan_tag with value 0 which will cause the HW to verify the
packet doesn't contain second vlan header.

Fixes: 699e96ddf47f ("net/mlx5e: Support offloading tc double vlan headers match")
Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index e3fc15ae7bb106a055dad73466790accb04a6798..ac0f73074f7ab1d53de229a2952939c8e2b77995 100644 (file)
@@ -2459,6 +2459,17 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
                                 match.key->vlan_priority);
 
                        *match_level = MLX5_MATCH_L2;
+
+                       if (!flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CVLAN) &&
+                           match.mask->vlan_eth_type &&
+                           MLX5_CAP_FLOWTABLE_TYPE(priv->mdev,
+                                                   ft_field_support.outer_second_vid,
+                                                   fs_type)) {
+                               MLX5_SET(fte_match_set_misc, misc_c,
+                                        outer_second_cvlan_tag, 1);
+                               spec->match_criteria_enable |=
+                                       MLX5_MATCH_MISC_PARAMETERS;
+                       }
                }
        } else if (*match_level != MLX5_MATCH_NONE) {
                /* cvlan_tag enabled in match criteria and