diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2009-07-31 02:38:09 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-04 22:44:19 +0200 |
commit | 8b19e6ca3bac7e04e93fb73f561d670e77c5fae6 (patch) | |
tree | 50a1487febe99b670aab253c4eebee2b8b3c8268 /net/wireless/sme.c | |
parent | cfg80211: decouple regulatory variables from cfg80211_mutex (diff) | |
download | linux-8b19e6ca3bac7e04e93fb73f561d670e77c5fae6.tar.xz linux-8b19e6ca3bac7e04e93fb73f561d670e77c5fae6.zip |
cfg80211: enable country IE support to all cfg80211 drivers
Since the bss is always set now once we are connected, if the
bss has its own information element we refer to it and pass that
instead of relying on mac80211's parsing.
Now all cfg80211 drivers get country IE support, automatically and
we reduce the call overhead that we had on mac80211 which called this
upon every beacon and instead now call this only upon a successfull
connection by a STA on cfg80211.
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/sme.c')
-rw-r--r-- | net/wireless/sme.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 3728d2b88b25..af91192eedf5 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c @@ -13,6 +13,7 @@ #include <net/cfg80211.h> #include <net/rtnetlink.h> #include "nl80211.h" +#include "reg.h" struct cfg80211_conn { struct cfg80211_connect_params params; @@ -320,6 +321,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss) { struct wireless_dev *wdev = dev->ieee80211_ptr; + u8 *country_ie; #ifdef CONFIG_WIRELESS_EXT union iwreq_data wrqu; #endif @@ -401,6 +403,20 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, wdev->sme_state = CFG80211_SME_CONNECTED; cfg80211_upload_connect_keys(wdev); + + country_ie = (u8 *) ieee80211_bss_get_ie(bss, WLAN_EID_COUNTRY); + + if (!country_ie) + return; + + /* + * ieee80211_bss_get_ie() ensures we can access: + * - country_ie + 2, the start of the country ie data, and + * - and country_ie[1] which is the IE length + */ + regulatory_hint_11d(wdev->wiphy, + country_ie + 2, + country_ie[1]); } void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, |