Skip to content

Commit

Permalink
cfg80211: don't optimise wext calls too much
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jul 24, 2009
1 parent d4b1a68 commit 25e83c4
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions net/wireless/wext-sme.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
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;
/* 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 = __cfg80211_disconnect(wiphy_to_dev(wdev->wiphy),
dev, WLAN_REASON_DEAUTH_LEAVING,
false);
Expand Down

0 comments on commit 25e83c4

Please sign in to comment.