aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-06-15 07:42:25 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-06-15 15:05:58 -0400
commit7e9debe9789456426ec8574ead879e33da19ee57 (patch)
treed1158594e3b9ea1b54e6e24f7bf370a68e6105eb /net/mac80211/mlme.c
parentdb2e6bd4e966a36c6b2f1921feb3537e8254415c (diff)
mac80211: disconnect when user changes channel
If we do not disconnect when a channel switch is requested, we end up eventually detection beacon loss from the AP and then disconnecting, without ever really telling the AP, so we might just as well disconnect right away. Additionally, this fixes a problem with iwlwifi where the driver will clear some internal state on channel changes like this and then get confused when we actually go clear that state from mac80211. It may look like this patch drops the no-IBSS check, but that is already handled by cfg80211 in the wext handler it provides for IBSS (cfg80211_ibss_wext_siwfreq). Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index e5de9cea0034..84e59b9b493a 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2223,7 +2223,10 @@ static int ieee80211_sta_config_auth(struct ieee80211_sub_if_data *sdata)
2223 capa_mask, capa_val); 2223 capa_mask, capa_val);
2224 2224
2225 if (bss) { 2225 if (bss) {
2226 ieee80211_set_freq(sdata, bss->cbss.channel->center_freq); 2226 local->oper_channel = bss->cbss.channel;
2227 local->oper_channel_type = NL80211_CHAN_NO_HT;
2228 ieee80211_hw_config(local, 0);
2229
2227 if (!(ifmgd->flags & IEEE80211_STA_SSID_SET)) 2230 if (!(ifmgd->flags & IEEE80211_STA_SSID_SET))
2228 ieee80211_sta_set_ssid(sdata, bss->ssid, 2231 ieee80211_sta_set_ssid(sdata, bss->ssid,
2229 bss->ssid_len); 2232 bss->ssid_len);