diff options
-rw-r--r-- | net/mac80211/iface.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index cde145221b61..46082125f3e1 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -229,8 +229,14 @@ static int ieee80211_open(struct net_device *dev) | |||
229 | if (res) | 229 | if (res) |
230 | goto err_stop; | 230 | goto err_stop; |
231 | 231 | ||
232 | if (ieee80211_vif_is_mesh(&sdata->vif)) | 232 | if (ieee80211_vif_is_mesh(&sdata->vif)) { |
233 | local->fif_other_bss++; | ||
234 | netif_addr_lock_bh(local->mdev); | ||
235 | ieee80211_configure_filter(local); | ||
236 | netif_addr_unlock_bh(local->mdev); | ||
237 | |||
233 | ieee80211_start_mesh(sdata); | 238 | ieee80211_start_mesh(sdata); |
239 | } | ||
234 | changed |= ieee80211_reset_erp_info(sdata); | 240 | changed |= ieee80211_reset_erp_info(sdata); |
235 | ieee80211_bss_info_change_notify(sdata, changed); | 241 | ieee80211_bss_info_change_notify(sdata, changed); |
236 | ieee80211_enable_keys(sdata); | 242 | ieee80211_enable_keys(sdata); |
@@ -456,8 +462,15 @@ static int ieee80211_stop(struct net_device *dev) | |||
456 | /* fall through */ | 462 | /* fall through */ |
457 | case NL80211_IFTYPE_MESH_POINT: | 463 | case NL80211_IFTYPE_MESH_POINT: |
458 | if (ieee80211_vif_is_mesh(&sdata->vif)) { | 464 | if (ieee80211_vif_is_mesh(&sdata->vif)) { |
459 | /* allmulti is always set on mesh ifaces */ | 465 | /* other_bss and allmulti are always set on mesh |
466 | * ifaces */ | ||
467 | local->fif_other_bss--; | ||
460 | atomic_dec(&local->iff_allmultis); | 468 | atomic_dec(&local->iff_allmultis); |
469 | |||
470 | netif_addr_lock_bh(local->mdev); | ||
471 | ieee80211_configure_filter(local); | ||
472 | netif_addr_unlock_bh(local->mdev); | ||
473 | |||
461 | ieee80211_stop_mesh(sdata); | 474 | ieee80211_stop_mesh(sdata); |
462 | } | 475 | } |
463 | /* fall through */ | 476 | /* fall through */ |