diff options
-rw-r--r-- | net/bridge/br_device.c | 6 | ||||
-rw-r--r-- | net/bridge/br_if.c | 4 | ||||
-rw-r--r-- | net/bridge/br_stp.c | 2 | ||||
-rw-r--r-- | net/bridge/br_stp_if.c | 1 |
4 files changed, 12 insertions, 1 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index be356293caa1..91dffe7574d6 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c | |||
@@ -51,6 +51,7 @@ static int br_dev_open(struct net_device *dev) | |||
51 | br_features_recompute(br); | 51 | br_features_recompute(br); |
52 | netif_start_queue(dev); | 52 | netif_start_queue(dev); |
53 | br_stp_enable_bridge(br); | 53 | br_stp_enable_bridge(br); |
54 | br_multicast_open(br); | ||
54 | 55 | ||
55 | return 0; | 56 | return 0; |
56 | } | 57 | } |
@@ -61,7 +62,10 @@ static void br_dev_set_multicast_list(struct net_device *dev) | |||
61 | 62 | ||
62 | static int br_dev_stop(struct net_device *dev) | 63 | static int br_dev_stop(struct net_device *dev) |
63 | { | 64 | { |
64 | br_stp_disable_bridge(netdev_priv(dev)); | 65 | struct net_bridge *br = netdev_priv(dev); |
66 | |||
67 | br_stp_disable_bridge(br); | ||
68 | br_multicast_stop(br); | ||
65 | 69 | ||
66 | netif_stop_queue(dev); | 70 | netif_stop_queue(dev); |
67 | 71 | ||
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index bc2b1badab88..b6a3872f5681 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
@@ -147,6 +147,8 @@ static void del_nbp(struct net_bridge_port *p) | |||
147 | 147 | ||
148 | rcu_assign_pointer(dev->br_port, NULL); | 148 | rcu_assign_pointer(dev->br_port, NULL); |
149 | 149 | ||
150 | br_multicast_del_port(p); | ||
151 | |||
150 | kobject_uevent(&p->kobj, KOBJ_REMOVE); | 152 | kobject_uevent(&p->kobj, KOBJ_REMOVE); |
151 | kobject_del(&p->kobj); | 153 | kobject_del(&p->kobj); |
152 | 154 | ||
@@ -207,6 +209,7 @@ static struct net_device *new_bridge_dev(struct net *net, const char *name) | |||
207 | br_netfilter_rtable_init(br); | 209 | br_netfilter_rtable_init(br); |
208 | 210 | ||
209 | br_stp_timer_init(br); | 211 | br_stp_timer_init(br); |
212 | br_multicast_init(br); | ||
210 | 213 | ||
211 | return dev; | 214 | return dev; |
212 | } | 215 | } |
@@ -258,6 +261,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, | |||
258 | br_init_port(p); | 261 | br_init_port(p); |
259 | p->state = BR_STATE_DISABLED; | 262 | p->state = BR_STATE_DISABLED; |
260 | br_stp_port_timer_init(p); | 263 | br_stp_port_timer_init(p); |
264 | br_multicast_add_port(p); | ||
261 | 265 | ||
262 | return p; | 266 | return p; |
263 | } | 267 | } |
diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c index fd3f8d6c0998..edcf14b560f6 100644 --- a/net/bridge/br_stp.c +++ b/net/bridge/br_stp.c | |||
@@ -386,6 +386,8 @@ static void br_make_forwarding(struct net_bridge_port *p) | |||
386 | else | 386 | else |
387 | p->state = BR_STATE_LEARNING; | 387 | p->state = BR_STATE_LEARNING; |
388 | 388 | ||
389 | br_multicast_enable_port(p); | ||
390 | |||
389 | br_log_state(p); | 391 | br_log_state(p); |
390 | 392 | ||
391 | if (br->forward_delay != 0) | 393 | if (br->forward_delay != 0) |
diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c index 9a52ac5b4525..d527119e9f54 100644 --- a/net/bridge/br_stp_if.c +++ b/net/bridge/br_stp_if.c | |||
@@ -108,6 +108,7 @@ void br_stp_disable_port(struct net_bridge_port *p) | |||
108 | del_timer(&p->hold_timer); | 108 | del_timer(&p->hold_timer); |
109 | 109 | ||
110 | br_fdb_delete_by_port(br, p, 0); | 110 | br_fdb_delete_by_port(br, p, 0); |
111 | br_multicast_disable_port(p); | ||
111 | 112 | ||
112 | br_configuration_update(br); | 113 | br_configuration_update(br); |
113 | 114 | ||