aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/iface.c
diff options
context:
space:
mode:
authorAndrey Yurovsky <andrey@cozybit.com>2008-10-31 17:50:12 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-11-21 11:06:03 -0500
commita3c9aa512945aa5552d03c7d6d6c3b826a3f9e28 (patch)
tree7115dde22db957f1b8c75966614a5fe921788db7 /net/mac80211/iface.c
parentb7b05fe7f92e21e933caa529fd8d78bbbbfbd293 (diff)
mac80211: disable BSSID filtering for mesh interfaces
Mesh interfaces are currently opened with the FIF_ALLMULTI rx filter flag set, however there is no BSSID in mesh so BSSID filtering should be disabled by setting the FIF_OTHER_BSS flag as well. Also explicitly call ieee80211_configure_filter for mesh. Signed-off-by: Andrey Yurovsky <andrey@cozybit.com> Signed-off-by: Javier Cardona <javier@cozbit.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r--net/mac80211/iface.c17
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 */