Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f88061e authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller
Browse files

mlxsw: spectrum: Don't assume upper device's type



When an upper device is configured on top of a vPort we make sure it's a
bridge master during PRECHANGEUPPER and fail otherwise. Therefore, when
CHANGEUPPER is later received we don't bother checking the upper's type.

Make the code more extendable in preparation for VRF uppers, by checking
the upper's type.

Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b414970e
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -4818,6 +4818,8 @@ static int mlxsw_sp_netdevice_vport_event(struct net_device *dev,
	int err = 0;

	mlxsw_sp_vport = mlxsw_sp_port_vport_find(mlxsw_sp_port, vid);
	if (!mlxsw_sp_vport)
		return 0;

	switch (event) {
	case NETDEV_PRECHANGEUPPER:
@@ -4835,16 +4837,17 @@ static int mlxsw_sp_netdevice_vport_event(struct net_device *dev,
		break;
	case NETDEV_CHANGEUPPER:
		upper_dev = info->upper_dev;
		if (info->linking) {
			if (WARN_ON(!mlxsw_sp_vport))
				return -EINVAL;
		if (netif_is_bridge_master(upper_dev)) {
			if (info->linking)
				err = mlxsw_sp_vport_bridge_join(mlxsw_sp_vport,
								 upper_dev);
		} else {
			if (!mlxsw_sp_vport)
				return 0;
			else
				mlxsw_sp_vport_bridge_leave(mlxsw_sp_vport);
		} else {
			err = -EINVAL;
			WARN_ON(1);
		}
		break;
	}

	return err;