cfg80211: don't optimise wext calls too much
In the wext code I tried to not reconnect all the time when the user wasn't really sure what they were doing, like setting the BSSID back to the same value it was. However, this optimisation should only be done while associated so that setting the BSSID back to the same value that it was actually triggers a new association if not currently associated. To achieve, that, put the relevant code into the !IDLE case instead. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Tested-by: Kalle Valo <kalle.valo@iki.fi> Tested-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
d4b1a6876f
commit
25e83c490b
1 changed files with 22 additions and 20 deletions
|
@ -72,13 +72,14 @@ int cfg80211_mgd_wext_siwfreq(struct net_device *dev,
|
|||
cfg80211_lock_rdev(rdev);
|
||||
wdev_lock(wdev);
|
||||
|
||||
if (wdev->wext.connect.channel == chan) {
|
||||
err = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (wdev->sme_state != CFG80211_SME_IDLE) {
|
||||
bool event = true;
|
||||
|
||||
if (wdev->wext.connect.channel == chan) {
|
||||
err = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* if SSID set, we'll try right again, avoid event */
|
||||
if (wdev->wext.connect.ssid_len)
|
||||
event = false;
|
||||
|
@ -164,13 +165,14 @@ int cfg80211_mgd_wext_siwessid(struct net_device *dev,
|
|||
|
||||
err = 0;
|
||||
|
||||
if (wdev->wext.connect.ssid && len &&
|
||||
len == wdev->wext.connect.ssid_len &&
|
||||
memcmp(wdev->wext.connect.ssid, ssid, len) == 0)
|
||||
goto out;
|
||||
|
||||
if (wdev->sme_state != CFG80211_SME_IDLE) {
|
||||
bool event = true;
|
||||
|
||||
if (wdev->wext.connect.ssid && len &&
|
||||
len == wdev->wext.connect.ssid_len &&
|
||||
memcmp(wdev->wext.connect.ssid, ssid, len) == 0)
|
||||
goto out;
|
||||
|
||||
/* if SSID set now, we'll try to connect, avoid event */
|
||||
if (len)
|
||||
event = false;
|
||||
|
@ -244,17 +246,17 @@ int cfg80211_mgd_wext_siwap(struct net_device *dev,
|
|||
cfg80211_lock_rdev(wiphy_to_dev(wdev->wiphy));
|
||||
wdev_lock(wdev);
|
||||
|
||||
err = 0;
|
||||
/* both automatic */
|
||||
if (!bssid && !wdev->wext.connect.bssid)
|
||||
goto out;
|
||||
|
||||
/* fixed already - and no change */
|
||||
if (wdev->wext.connect.bssid && bssid &&
|
||||
compare_ether_addr(bssid, wdev->wext.connect.bssid) == 0)
|
||||
goto out;
|
||||
|
||||
if (wdev->sme_state != CFG80211_SME_IDLE) {
|
||||
err = 0;
|
||||
/* both automatic */
|
||||
if (!bssid && !wdev->wext.connect.bssid)
|
||||
goto out;
|
||||
|
||||
/* fixed already - and no change */
|
||||
if (wdev->wext.connect.bssid && bssid &&
|
||||
compare_ether_addr(bssid, wdev->wext.connect.bssid) == 0)
|
||||
goto out;
|
||||
|
||||
err = __cfg80211_disconnect(wiphy_to_dev(wdev->wiphy),
|
||||
dev, WLAN_REASON_DEAUTH_LEAVING,
|
||||
false);
|
||||
|
|
Loading…
Reference in a new issue