diff options
Diffstat (limited to 'net/wireless/wext-sme.c')
-rw-r--r-- | net/wireless/wext-sme.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c index 82e913aa163e..4c689fd865b0 100644 --- a/net/wireless/wext-sme.c +++ b/net/wireless/wext-sme.c | |||
@@ -72,13 +72,14 @@ int cfg80211_mgd_wext_siwfreq(struct net_device *dev, | |||
72 | cfg80211_lock_rdev(rdev); | 72 | cfg80211_lock_rdev(rdev); |
73 | wdev_lock(wdev); | 73 | wdev_lock(wdev); |
74 | 74 | ||
75 | if (wdev->wext.connect.channel == chan) { | ||
76 | err = 0; | ||
77 | goto out; | ||
78 | } | ||
79 | |||
80 | if (wdev->sme_state != CFG80211_SME_IDLE) { | 75 | if (wdev->sme_state != CFG80211_SME_IDLE) { |
81 | bool event = true; | 76 | bool event = true; |
77 | |||
78 | if (wdev->wext.connect.channel == chan) { | ||
79 | err = 0; | ||
80 | goto out; | ||
81 | } | ||
82 | |||
82 | /* if SSID set, we'll try right again, avoid event */ | 83 | /* if SSID set, we'll try right again, avoid event */ |
83 | if (wdev->wext.connect.ssid_len) | 84 | if (wdev->wext.connect.ssid_len) |
84 | event = false; | 85 | event = false; |
@@ -164,13 +165,14 @@ int cfg80211_mgd_wext_siwessid(struct net_device *dev, | |||
164 | 165 | ||
165 | err = 0; | 166 | err = 0; |
166 | 167 | ||
167 | if (wdev->wext.connect.ssid && len && | ||
168 | len == wdev->wext.connect.ssid_len && | ||
169 | memcmp(wdev->wext.connect.ssid, ssid, len) == 0) | ||
170 | goto out; | ||
171 | |||
172 | if (wdev->sme_state != CFG80211_SME_IDLE) { | 168 | if (wdev->sme_state != CFG80211_SME_IDLE) { |
173 | bool event = true; | 169 | bool event = true; |
170 | |||
171 | if (wdev->wext.connect.ssid && len && | ||
172 | len == wdev->wext.connect.ssid_len && | ||
173 | memcmp(wdev->wext.connect.ssid, ssid, len) == 0) | ||
174 | goto out; | ||
175 | |||
174 | /* if SSID set now, we'll try to connect, avoid event */ | 176 | /* if SSID set now, we'll try to connect, avoid event */ |
175 | if (len) | 177 | if (len) |
176 | event = false; | 178 | event = false; |
@@ -244,17 +246,17 @@ int cfg80211_mgd_wext_siwap(struct net_device *dev, | |||
244 | cfg80211_lock_rdev(wiphy_to_dev(wdev->wiphy)); | 246 | cfg80211_lock_rdev(wiphy_to_dev(wdev->wiphy)); |
245 | wdev_lock(wdev); | 247 | wdev_lock(wdev); |
246 | 248 | ||
247 | err = 0; | 249 | if (wdev->sme_state != CFG80211_SME_IDLE) { |
248 | /* both automatic */ | 250 | err = 0; |
249 | if (!bssid && !wdev->wext.connect.bssid) | 251 | /* both automatic */ |
250 | goto out; | 252 | if (!bssid && !wdev->wext.connect.bssid) |
253 | goto out; | ||
251 | 254 | ||
252 | /* fixed already - and no change */ | 255 | /* fixed already - and no change */ |
253 | if (wdev->wext.connect.bssid && bssid && | 256 | if (wdev->wext.connect.bssid && bssid && |
254 | compare_ether_addr(bssid, wdev->wext.connect.bssid) == 0) | 257 | compare_ether_addr(bssid, wdev->wext.connect.bssid) == 0) |
255 | goto out; | 258 | goto out; |
256 | 259 | ||
257 | if (wdev->sme_state != CFG80211_SME_IDLE) { | ||
258 | err = __cfg80211_disconnect(wiphy_to_dev(wdev->wiphy), | 260 | err = __cfg80211_disconnect(wiphy_to_dev(wdev->wiphy), |
259 | dev, WLAN_REASON_DEAUTH_LEAVING, | 261 | dev, WLAN_REASON_DEAUTH_LEAVING, |
260 | false); | 262 | false); |