aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_device.c')
-rw-r--r--net/bridge/br_device.c21
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
304static 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
312static 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
300static const struct ethtool_ops br_ethtool_ops = { 319static 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
331static void br_dev_free(struct net_device *dev) 352static void br_dev_free(struct net_device *dev)