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

Commit 8fd72856 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

team: fill-up LAG changeupper info struct and pass it along



Initialize netdev_lag_upper_info structure by TX type according to
current team mode and pass it along via netdev_master_upper_dev_link.

Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 764f5e54
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -1078,23 +1078,24 @@ static void team_port_disable_netpoll(struct team_port *port)
}
#endif

static int team_upper_dev_link(struct net_device *dev,
			       struct net_device *port_dev)
static int team_upper_dev_link(struct team *team, struct team_port *port)
{
	struct netdev_lag_upper_info lag_upper_info;
	int err;

	err = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL);
	lag_upper_info.tx_type = team->mode->lag_tx_type;
	err = netdev_master_upper_dev_link(port->dev, team->dev, NULL,
					   &lag_upper_info);
	if (err)
		return err;
	port_dev->priv_flags |= IFF_TEAM_PORT;
	port->dev->priv_flags |= IFF_TEAM_PORT;
	return 0;
}

static void team_upper_dev_unlink(struct net_device *dev,
				  struct net_device *port_dev)
static void team_upper_dev_unlink(struct team *team, struct team_port *port)
{
	netdev_upper_dev_unlink(port_dev, dev);
	port_dev->priv_flags &= ~IFF_TEAM_PORT;
	netdev_upper_dev_unlink(port->dev, team->dev);
	port->dev->priv_flags &= ~IFF_TEAM_PORT;
}

static void __team_port_change_port_added(struct team_port *port, bool linkup);
@@ -1194,7 +1195,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
		goto err_handler_register;
	}

	err = team_upper_dev_link(dev, port_dev);
	err = team_upper_dev_link(team, port);
	if (err) {
		netdev_err(dev, "Device %s failed to set upper link\n",
			   portname);
@@ -1220,7 +1221,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
	return 0;

err_option_port_add:
	team_upper_dev_unlink(dev, port_dev);
	team_upper_dev_unlink(team, port);

err_set_upper_link:
	netdev_rx_handler_unregister(port_dev);
@@ -1264,7 +1265,7 @@ static int team_port_del(struct team *team, struct net_device *port_dev)

	team_port_disable(team, port);
	list_del_rcu(&port->list);
	team_upper_dev_unlink(dev, port_dev);
	team_upper_dev_unlink(team, port);
	netdev_rx_handler_unregister(port_dev);
	team_port_disable_netpoll(port);
	vlan_vids_del_by_dev(port_dev, dev);
+1 −0
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ static const struct team_mode ab_mode = {
	.owner		= THIS_MODULE,
	.priv_size	= sizeof(struct ab_priv),
	.ops		= &ab_mode_ops,
	.lag_tx_type	= NETDEV_LAG_TX_TYPE_ACTIVEBACKUP,
};

static int __init ab_init_module(void)
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ static const struct team_mode bc_mode = {
	.kind		= "broadcast",
	.owner		= THIS_MODULE,
	.ops		= &bc_mode_ops,
	.lag_tx_type	= NETDEV_LAG_TX_TYPE_BROADCAST,
};

static int __init bc_init_module(void)
+1 −0
Original line number Diff line number Diff line
@@ -661,6 +661,7 @@ static const struct team_mode lb_mode = {
	.priv_size	= sizeof(struct lb_priv),
	.port_priv_size	= sizeof(struct lb_port_priv),
	.ops		= &lb_mode_ops,
	.lag_tx_type	= NETDEV_LAG_TX_TYPE_HASH,
};

static int __init lb_init_module(void)
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ static const struct team_mode rnd_mode = {
	.kind		= "random",
	.owner		= THIS_MODULE,
	.ops		= &rnd_mode_ops,
	.lag_tx_type	= NETDEV_LAG_TX_TYPE_RANDOM,
};

static int __init rnd_init_module(void)
Loading