diff options
Diffstat (limited to 'net/bridge/br_device.c')
-rw-r--r-- | net/bridge/br_device.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 556443566e9c..21e5901186ea 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c | |||
@@ -78,6 +78,8 @@ static int br_dev_open(struct net_device *dev) | |||
78 | { | 78 | { |
79 | struct net_bridge *br = netdev_priv(dev); | 79 | struct net_bridge *br = netdev_priv(dev); |
80 | 80 | ||
81 | netif_carrier_off(dev); | ||
82 | |||
81 | br_features_recompute(br); | 83 | br_features_recompute(br); |
82 | netif_start_queue(dev); | 84 | netif_start_queue(dev); |
83 | br_stp_enable_bridge(br); | 85 | br_stp_enable_bridge(br); |
@@ -94,6 +96,8 @@ static int br_dev_stop(struct net_device *dev) | |||
94 | { | 96 | { |
95 | struct net_bridge *br = netdev_priv(dev); | 97 | struct net_bridge *br = netdev_priv(dev); |
96 | 98 | ||
99 | netif_carrier_off(dev); | ||
100 | |||
97 | br_stp_disable_bridge(br); | 101 | br_stp_disable_bridge(br); |
98 | br_multicast_stop(br); | 102 | br_multicast_stop(br); |
99 | 103 | ||
@@ -297,6 +301,21 @@ void br_netpoll_disable(struct net_bridge_port *p) | |||
297 | 301 | ||
298 | #endif | 302 | #endif |
299 | 303 | ||
304 | static int br_add_slave(struct net_device *dev, struct net_device *slave_dev) | ||
305 | |||
306 | { | ||
307 | struct net_bridge *br = netdev_priv(dev); | ||
308 | |||
309 | return br_add_if(br, slave_dev); | ||
310 | } | ||
311 | |||
312 | static int br_del_slave(struct net_device *dev, struct net_device *slave_dev) | ||
313 | { | ||
314 | struct net_bridge *br = netdev_priv(dev); | ||
315 | |||
316 | return br_del_if(br, slave_dev); | ||
317 | } | ||
318 | |||
300 | static const struct ethtool_ops br_ethtool_ops = { | 319 | static const struct ethtool_ops br_ethtool_ops = { |
301 | .get_drvinfo = br_getinfo, | 320 | .get_drvinfo = br_getinfo, |
302 | .get_link = ethtool_op_get_link, | 321 | .get_link = ethtool_op_get_link, |
@@ -326,6 +345,8 @@ static const struct net_device_ops br_netdev_ops = { | |||
326 | .ndo_netpoll_cleanup = br_netpoll_cleanup, | 345 | .ndo_netpoll_cleanup = br_netpoll_cleanup, |
327 | .ndo_poll_controller = br_poll_controller, | 346 | .ndo_poll_controller = br_poll_controller, |
328 | #endif | 347 | #endif |
348 | .ndo_add_slave = br_add_slave, | ||
349 | .ndo_del_slave = br_del_slave, | ||
329 | }; | 350 | }; |
330 | 351 | ||
331 | static void br_dev_free(struct net_device *dev) | 352 | static void br_dev_free(struct net_device *dev) |