diff options
author | Jouni Malinen <jouni.malinen@atheros.com> | 2009-03-19 07:39:20 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:13:01 -0400 |
commit | a299542e97ec1939fdca7db6d3d82c0aa9bf8b9a (patch) | |
tree | f7af1607553e08ec9c6fde0e8430a0a2b003a384 /net/mac80211 | |
parent | 4b4698c443c9db62b220c41a1793872d6ebe82e1 (diff) |
mac80211: Fix reassociation by not clearing previous BSSID
We must not clear the previous BSSID when roaming to another AP within
the same ESS for reassociation to be used properly. It is fine to
clear this when the SSID changes, so let's move the code into
ieee80211_sta_set_ssid().
Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/mlme.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 4c753bb43ba9..1f49b63d8dd2 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1888,8 +1888,6 @@ int ieee80211_sta_commit(struct ieee80211_sub_if_data *sdata) | |||
1888 | { | 1888 | { |
1889 | struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; | 1889 | struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; |
1890 | 1890 | ||
1891 | ifmgd->flags &= ~IEEE80211_STA_PREV_BSSID_SET; | ||
1892 | |||
1893 | if (ifmgd->ssid_len) | 1891 | if (ifmgd->ssid_len) |
1894 | ifmgd->flags |= IEEE80211_STA_SSID_SET; | 1892 | ifmgd->flags |= IEEE80211_STA_SSID_SET; |
1895 | else | 1893 | else |
@@ -1908,6 +1906,10 @@ int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size | |||
1908 | ifmgd = &sdata->u.mgd; | 1906 | ifmgd = &sdata->u.mgd; |
1909 | 1907 | ||
1910 | if (ifmgd->ssid_len != len || memcmp(ifmgd->ssid, ssid, len) != 0) { | 1908 | if (ifmgd->ssid_len != len || memcmp(ifmgd->ssid, ssid, len) != 0) { |
1909 | /* | ||
1910 | * Do not use reassociation if SSID is changed (different ESS). | ||
1911 | */ | ||
1912 | ifmgd->flags &= ~IEEE80211_STA_PREV_BSSID_SET; | ||
1911 | memset(ifmgd->ssid, 0, sizeof(ifmgd->ssid)); | 1913 | memset(ifmgd->ssid, 0, sizeof(ifmgd->ssid)); |
1912 | memcpy(ifmgd->ssid, ssid, len); | 1914 | memcpy(ifmgd->ssid, ssid, len); |
1913 | ifmgd->ssid_len = len; | 1915 | ifmgd->ssid_len = len; |