2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-15 16:53:54 +08:00

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: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jiri Pirko 2015-12-03 12:12:13 +01:00 committed by David S. Miller
parent 764f5e5441
commit 8fd728566a
7 changed files with 18 additions and 11 deletions

View File

@ -1078,23 +1078,24 @@ static void team_port_disable_netpoll(struct team_port *port)
} }
#endif #endif
static int team_upper_dev_link(struct net_device *dev, static int team_upper_dev_link(struct team *team, struct team_port *port)
struct net_device *port_dev)
{ {
struct netdev_lag_upper_info lag_upper_info;
int err; 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) if (err)
return err; return err;
port_dev->priv_flags |= IFF_TEAM_PORT; port->dev->priv_flags |= IFF_TEAM_PORT;
return 0; return 0;
} }
static void team_upper_dev_unlink(struct net_device *dev, static void team_upper_dev_unlink(struct team *team, struct team_port *port)
struct net_device *port_dev)
{ {
netdev_upper_dev_unlink(port_dev, dev); netdev_upper_dev_unlink(port->dev, team->dev);
port_dev->priv_flags &= ~IFF_TEAM_PORT; port->dev->priv_flags &= ~IFF_TEAM_PORT;
} }
static void __team_port_change_port_added(struct team_port *port, bool linkup); 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; goto err_handler_register;
} }
err = team_upper_dev_link(dev, port_dev); err = team_upper_dev_link(team, port);
if (err) { if (err) {
netdev_err(dev, "Device %s failed to set upper link\n", netdev_err(dev, "Device %s failed to set upper link\n",
portname); portname);
@ -1220,7 +1221,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
return 0; return 0;
err_option_port_add: err_option_port_add:
team_upper_dev_unlink(dev, port_dev); team_upper_dev_unlink(team, port);
err_set_upper_link: err_set_upper_link:
netdev_rx_handler_unregister(port_dev); 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); team_port_disable(team, port);
list_del_rcu(&port->list); list_del_rcu(&port->list);
team_upper_dev_unlink(dev, port_dev); team_upper_dev_unlink(team, port);
netdev_rx_handler_unregister(port_dev); netdev_rx_handler_unregister(port_dev);
team_port_disable_netpoll(port); team_port_disable_netpoll(port);
vlan_vids_del_by_dev(port_dev, dev); vlan_vids_del_by_dev(port_dev, dev);

View File

@ -127,6 +127,7 @@ static const struct team_mode ab_mode = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.priv_size = sizeof(struct ab_priv), .priv_size = sizeof(struct ab_priv),
.ops = &ab_mode_ops, .ops = &ab_mode_ops,
.lag_tx_type = NETDEV_LAG_TX_TYPE_ACTIVEBACKUP,
}; };
static int __init ab_init_module(void) static int __init ab_init_module(void)

View File

@ -56,6 +56,7 @@ static const struct team_mode bc_mode = {
.kind = "broadcast", .kind = "broadcast",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ops = &bc_mode_ops, .ops = &bc_mode_ops,
.lag_tx_type = NETDEV_LAG_TX_TYPE_BROADCAST,
}; };
static int __init bc_init_module(void) static int __init bc_init_module(void)

View File

@ -661,6 +661,7 @@ static const struct team_mode lb_mode = {
.priv_size = sizeof(struct lb_priv), .priv_size = sizeof(struct lb_priv),
.port_priv_size = sizeof(struct lb_port_priv), .port_priv_size = sizeof(struct lb_port_priv),
.ops = &lb_mode_ops, .ops = &lb_mode_ops,
.lag_tx_type = NETDEV_LAG_TX_TYPE_HASH,
}; };
static int __init lb_init_module(void) static int __init lb_init_module(void)

View File

@ -46,6 +46,7 @@ static const struct team_mode rnd_mode = {
.kind = "random", .kind = "random",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ops = &rnd_mode_ops, .ops = &rnd_mode_ops,
.lag_tx_type = NETDEV_LAG_TX_TYPE_RANDOM,
}; };
static int __init rnd_init_module(void) static int __init rnd_init_module(void)

View File

@ -58,6 +58,7 @@ static const struct team_mode rr_mode = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.priv_size = sizeof(struct rr_priv), .priv_size = sizeof(struct rr_priv),
.ops = &rr_mode_ops, .ops = &rr_mode_ops,
.lag_tx_type = NETDEV_LAG_TX_TYPE_ROUNDROBIN,
}; };
static int __init rr_init_module(void) static int __init rr_init_module(void)

View File

@ -164,6 +164,7 @@ struct team_mode {
size_t priv_size; size_t priv_size;
size_t port_priv_size; size_t port_priv_size;
const struct team_mode_ops *ops; const struct team_mode_ops *ops;
enum netdev_lag_tx_type lag_tx_type;
}; };
#define TEAM_PORT_HASHBITS 4 #define TEAM_PORT_HASHBITS 4