mlxsw: spectrum: Extend port_orig_get for bridge devices
authorNogah Frankel <nogahf@mellanox.com>
Thu, 9 Feb 2017 13:54:48 +0000 (14:54 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Feb 2017 16:46:41 +0000 (11:46 -0500)
The function mlxsw_sp_port_orig_get returns the vport from the physical
port if needed, based on the original device.
This patch addresses the case where the original device is a bridge.
If it is vlan unaware bridge, it returns the matching vport. If it is vlan
aware bridge, there is no matching vport, and it returns the original port.

Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: Yotam Gigi <yotamg@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

index 53702464db2eadd20fd09545a411e827a6d223c2..9540f202c521bebfb78d12636d03aa678f188262 100644 (file)
@@ -71,8 +71,21 @@ mlxsw_sp_port_orig_get(struct net_device *dev,
                       struct mlxsw_sp_port *mlxsw_sp_port)
 {
        struct mlxsw_sp_port *mlxsw_sp_vport;
+       struct mlxsw_sp_fid *fid;
        u16 vid;
 
+       if (netif_is_bridge_master(dev)) {
+               fid = mlxsw_sp_vfid_find(mlxsw_sp_port->mlxsw_sp,
+                                        dev);
+               if (fid) {
+                       mlxsw_sp_vport =
+                               mlxsw_sp_port_vport_find_by_fid(mlxsw_sp_port,
+                                                               fid->fid);
+                       WARN_ON(!mlxsw_sp_vport);
+                       return mlxsw_sp_vport;
+               }
+       }
+
        if (!is_vlan_dev(dev))
                return mlxsw_sp_port;