mlxsw: spectrum: Send untagged packets through a port netdev
Port netdevs (e.g. swXpY) that are not bridged are represented in the device using a vPort with VID=PVID=1 (the PVID vPort), as untagged packets entering the switch are internally tagged with the PVID VLAN. When these packets are routed through a different port netdev they should egress untagged. This wasn't a problem until now, as non-bridged traffic only originated from the CPU, which transmits packets out of the port as-is. When a vPort is created with VID 1 mark it as egress untagged. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cec88ea3ee
commit
52697a9ede
|
@ -816,6 +816,7 @@ int mlxsw_sp_port_add_vid(struct net_device *dev, __be16 __always_unused proto,
|
|||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
|
||||
struct mlxsw_sp_port *mlxsw_sp_vport;
|
||||
bool untagged = vid == 1;
|
||||
int err;
|
||||
|
||||
/* VLAN 0 is added to HW filter when device goes up, but it is
|
||||
|
@ -859,7 +860,7 @@ int mlxsw_sp_port_add_vid(struct net_device *dev, __be16 __always_unused proto,
|
|||
goto err_port_vid_learning_set;
|
||||
}
|
||||
|
||||
err = mlxsw_sp_port_vlan_set(mlxsw_sp_vport, vid, vid, true, false);
|
||||
err = mlxsw_sp_port_vlan_set(mlxsw_sp_vport, vid, vid, true, untagged);
|
||||
if (err) {
|
||||
netdev_err(dev, "Failed to set VLAN membership for VID=%d\n",
|
||||
vid);
|
||||
|
|
Loading…
Reference in New Issue