diff options
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r-- | net/mac80211/iface.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 8c1284d45e69..e8fb03b91a44 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -220,8 +220,10 @@ static int ieee80211_open(struct net_device *dev) | |||
220 | local->fif_fcsfail++; | 220 | local->fif_fcsfail++; |
221 | if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL) | 221 | if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL) |
222 | local->fif_plcpfail++; | 222 | local->fif_plcpfail++; |
223 | if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) | 223 | if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) { |
224 | local->fif_control++; | 224 | local->fif_control++; |
225 | local->fif_pspoll++; | ||
226 | } | ||
225 | if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS) | 227 | if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS) |
226 | local->fif_other_bss++; | 228 | local->fif_other_bss++; |
227 | 229 | ||
@@ -244,7 +246,14 @@ static int ieee80211_open(struct net_device *dev) | |||
244 | spin_unlock_bh(&local->filter_lock); | 246 | spin_unlock_bh(&local->filter_lock); |
245 | 247 | ||
246 | ieee80211_start_mesh(sdata); | 248 | ieee80211_start_mesh(sdata); |
249 | } else if (sdata->vif.type == NL80211_IFTYPE_AP) { | ||
250 | local->fif_pspoll++; | ||
251 | |||
252 | spin_lock_bh(&local->filter_lock); | ||
253 | ieee80211_configure_filter(local); | ||
254 | spin_unlock_bh(&local->filter_lock); | ||
247 | } | 255 | } |
256 | |||
248 | changed |= ieee80211_reset_erp_info(sdata); | 257 | changed |= ieee80211_reset_erp_info(sdata); |
249 | ieee80211_bss_info_change_notify(sdata, changed); | 258 | ieee80211_bss_info_change_notify(sdata, changed); |
250 | ieee80211_enable_keys(sdata); | 259 | ieee80211_enable_keys(sdata); |
@@ -388,6 +397,9 @@ static int ieee80211_stop(struct net_device *dev) | |||
388 | if (sdata->flags & IEEE80211_SDATA_PROMISC) | 397 | if (sdata->flags & IEEE80211_SDATA_PROMISC) |
389 | atomic_dec(&local->iff_promiscs); | 398 | atomic_dec(&local->iff_promiscs); |
390 | 399 | ||
400 | if (sdata->vif.type == NL80211_IFTYPE_AP) | ||
401 | local->fif_pspoll--; | ||
402 | |||
391 | netif_addr_lock_bh(dev); | 403 | netif_addr_lock_bh(dev); |
392 | spin_lock_bh(&local->filter_lock); | 404 | spin_lock_bh(&local->filter_lock); |
393 | __dev_addr_unsync(&local->mc_list, &local->mc_count, | 405 | __dev_addr_unsync(&local->mc_list, &local->mc_count, |
@@ -439,8 +451,10 @@ static int ieee80211_stop(struct net_device *dev) | |||
439 | local->fif_fcsfail--; | 451 | local->fif_fcsfail--; |
440 | if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL) | 452 | if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL) |
441 | local->fif_plcpfail--; | 453 | local->fif_plcpfail--; |
442 | if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) | 454 | if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) { |
455 | local->fif_pspoll--; | ||
443 | local->fif_control--; | 456 | local->fif_control--; |
457 | } | ||
444 | if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS) | 458 | if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS) |
445 | local->fif_other_bss--; | 459 | local->fif_other_bss--; |
446 | 460 | ||