Skip to content

Commit 095b6cf

Browse files
ogerlitzdavem330
authored andcommitted
net/mlx5e: Add TC vlan match parsing
Enhance the parsing of offloaded TC rules matches to handle vlans. Signed-off-by: Or Gerlitz <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 8b32580 commit 095b6cf

File tree

1 file changed

+19
-0
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+19
-0
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ static int parse_cls_flower(struct mlx5e_priv *priv, struct mlx5_flow_spec *spec
164164
~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
165165
BIT(FLOW_DISSECTOR_KEY_BASIC) |
166166
BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
167+
BIT(FLOW_DISSECTOR_KEY_VLAN) |
167168
BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
168169
BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
169170
BIT(FLOW_DISSECTOR_KEY_PORTS))) {
@@ -227,6 +228,24 @@ static int parse_cls_flower(struct mlx5e_priv *priv, struct mlx5_flow_spec *spec
227228
key->src);
228229
}
229230

231+
if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_VLAN)) {
232+
struct flow_dissector_key_vlan *key =
233+
skb_flow_dissector_target(f->dissector,
234+
FLOW_DISSECTOR_KEY_VLAN,
235+
f->key);
236+
struct flow_dissector_key_vlan *mask =
237+
skb_flow_dissector_target(f->dissector,
238+
FLOW_DISSECTOR_KEY_VLAN,
239+
f->mask);
240+
if (mask->vlan_id) {
241+
MLX5_SET(fte_match_set_lyr_2_4, headers_c, vlan_tag, 1);
242+
MLX5_SET(fte_match_set_lyr_2_4, headers_v, vlan_tag, 1);
243+
244+
MLX5_SET(fte_match_set_lyr_2_4, headers_c, first_vid, mask->vlan_id);
245+
MLX5_SET(fte_match_set_lyr_2_4, headers_v, first_vid, key->vlan_id);
246+
}
247+
}
248+
230249
if (addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
231250
struct flow_dissector_key_ipv4_addrs *key =
232251
skb_flow_dissector_target(f->dissector,

0 commit comments

Comments
 (0)