aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/iface.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-10-25 13:02:42 -0400
committerJohannes Berg <johannes.berg@intel.com>2012-10-26 06:57:01 -0400
commit7b20b8e8d70a0f4f18c254b42e5b157f93731e9f (patch)
tree1f719c47aeba588532580ce1663e1cf9c1f0c336 /net/mac80211/iface.c
parent1df332e82d0facc6b236957f1a5691b550b4e1f1 (diff)
mac80211: move AP teardown code to correct place
Since cfg80211 will now call the explicit stop_ap operation when an AP interface goes down, move all teardown code there and remove it from interface handling. The only thing that needs to stay is the code to dev_close() all dependent VLANs. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r--net/mac80211/iface.c19
1 files changed, 0 insertions, 19 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index c50cf6b9e28d..944c6cf53eb7 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -744,31 +744,12 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
744 /* APs need special treatment */ 744 /* APs need special treatment */
745 if (sdata->vif.type == NL80211_IFTYPE_AP) { 745 if (sdata->vif.type == NL80211_IFTYPE_AP) {
746 struct ieee80211_sub_if_data *vlan, *tmpsdata; 746 struct ieee80211_sub_if_data *vlan, *tmpsdata;
747 struct beacon_data *old_beacon =
748 rtnl_dereference(sdata->u.ap.beacon);
749 struct probe_resp *old_probe_resp =
750 rtnl_dereference(sdata->u.ap.probe_resp);
751
752 /* sdata_running will return false, so this will disable */
753 ieee80211_bss_info_change_notify(sdata,
754 BSS_CHANGED_BEACON_ENABLED);
755
756 /* remove beacon and probe response */
757 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
758 RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL);
759 synchronize_rcu();
760 kfree(old_beacon);
761 kfree(old_probe_resp);
762 747
763 /* down all dependent devices, that is VLANs */ 748 /* down all dependent devices, that is VLANs */
764 list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans, 749 list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans,
765 u.vlan.list) 750 u.vlan.list)
766 dev_close(vlan->dev); 751 dev_close(vlan->dev);
767 WARN_ON(!list_empty(&sdata->u.ap.vlans)); 752 WARN_ON(!list_empty(&sdata->u.ap.vlans));
768
769 /* free all potentially still buffered bcast frames */
770 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf);
771 skb_queue_purge(&sdata->u.ap.ps.bc_buf);
772 } else if (sdata->vif.type == NL80211_IFTYPE_STATION) { 753 } else if (sdata->vif.type == NL80211_IFTYPE_STATION) {
773 ieee80211_mgd_stop(sdata); 754 ieee80211_mgd_stop(sdata);
774 } 755 }