mirror of
https://github.com/torvalds/linux.git
synced 2024-12-19 17:41:29 +00:00
net/mlx5e: Disable VLAN filter in promiscuous mode
When the device was set to promiscuous mode, we didn't disable VLAN filtering, which is wrong behaviour, fix that. Now when the device is set to promiscuous mode RX packets sent over any VLAN (or no VLAN tag at all) will be accepted. Signed-off-by: Achiad Shochat <achiad@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
13b7938883
commit
c07543431e
@ -598,6 +598,8 @@ void mlx5e_enable_vlan_filter(struct mlx5e_priv *priv)
|
||||
return;
|
||||
|
||||
priv->vlan.filter_disabled = false;
|
||||
if (priv->netdev->flags & IFF_PROMISC)
|
||||
return;
|
||||
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0);
|
||||
}
|
||||
|
||||
@ -607,6 +609,8 @@ void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv)
|
||||
return;
|
||||
|
||||
priv->vlan.filter_disabled = true;
|
||||
if (priv->netdev->flags & IFF_PROMISC)
|
||||
return;
|
||||
mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0);
|
||||
}
|
||||
|
||||
@ -717,8 +721,12 @@ void mlx5e_set_rx_mode_work(struct work_struct *work)
|
||||
bool enable_broadcast = !ea->broadcast_enabled && broadcast_enabled;
|
||||
bool disable_broadcast = ea->broadcast_enabled && !broadcast_enabled;
|
||||
|
||||
if (enable_promisc)
|
||||
if (enable_promisc) {
|
||||
mlx5e_add_eth_addr_rule(priv, &ea->promisc, MLX5E_PROMISC);
|
||||
if (!priv->vlan.filter_disabled)
|
||||
mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID,
|
||||
0);
|
||||
}
|
||||
if (enable_allmulti)
|
||||
mlx5e_add_eth_addr_rule(priv, &ea->allmulti, MLX5E_ALLMULTI);
|
||||
if (enable_broadcast)
|
||||
@ -730,8 +738,12 @@ void mlx5e_set_rx_mode_work(struct work_struct *work)
|
||||
mlx5e_del_eth_addr_from_flow_table(priv, &ea->broadcast);
|
||||
if (disable_allmulti)
|
||||
mlx5e_del_eth_addr_from_flow_table(priv, &ea->allmulti);
|
||||
if (disable_promisc)
|
||||
if (disable_promisc) {
|
||||
if (!priv->vlan.filter_disabled)
|
||||
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID,
|
||||
0);
|
||||
mlx5e_del_eth_addr_from_flow_table(priv, &ea->promisc);
|
||||
}
|
||||
|
||||
ea->promisc_enabled = promisc_enabled;
|
||||
ea->allmulti_enabled = allmulti_enabled;
|
||||
|
Loading…
Reference in New Issue
Block a user