diff options
author | Vasanthakumar Thiagarajan <vasanth@atheros.com> | 2008-12-23 11:00:50 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-01-29 15:58:47 -0500 |
commit | eb46936b9f2b639f4edeeaf9154d49476fc30fe5 (patch) | |
tree | 07c5ba68d5a49c722c019e401d8f8abf53c60e20 /net/mac80211/mlme.c | |
parent | 9ee677c2276bfcbcf68042ec2718a504af0c5fd7 (diff) |
mac80211: Scale down to non-HT association with TKIP/WEP as pairwise cipher
As TKIP is not updated to new security needs which arise when
TKIP is used to encrypt A-MPDU aggregated data frames, IEEE802.11n
does not allow any cipher other than CCMP (Which has new extensions
defined) as pairwise cipher between HT peers.
When such configuration (TKIP/WEP in HT) is forced, we still
associate in non-HT mode (11a/b/g).
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r-- | net/mac80211/mlme.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 2b890af01ba4..b688425d7555 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -391,10 +391,17 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata, | |||
391 | } | 391 | } |
392 | 392 | ||
393 | /* wmm support is a must to HT */ | 393 | /* wmm support is a must to HT */ |
394 | /* | ||
395 | * IEEE802.11n does not allow TKIP/WEP as pairwise | ||
396 | * ciphers in HT mode. We still associate in non-ht | ||
397 | * mode (11a/b/g) if any one of these ciphers is | ||
398 | * configured as pairwise. | ||
399 | */ | ||
394 | if (wmm && (ifsta->flags & IEEE80211_STA_WMM_ENABLED) && | 400 | if (wmm && (ifsta->flags & IEEE80211_STA_WMM_ENABLED) && |
395 | sband->ht_cap.ht_supported && | 401 | sband->ht_cap.ht_supported && |
396 | (ht_ie = ieee80211_bss_get_ie(bss, WLAN_EID_HT_INFORMATION)) && | 402 | (ht_ie = ieee80211_bss_get_ie(bss, WLAN_EID_HT_INFORMATION)) && |
397 | ht_ie[1] >= sizeof(struct ieee80211_ht_info)) { | 403 | ht_ie[1] >= sizeof(struct ieee80211_ht_info) && |
404 | (!(ifsta->flags & IEEE80211_STA_TKIP_WEP_USED))) { | ||
398 | struct ieee80211_ht_info *ht_info = | 405 | struct ieee80211_ht_info *ht_info = |
399 | (struct ieee80211_ht_info *)(ht_ie + 2); | 406 | (struct ieee80211_ht_info *)(ht_ie + 2); |
400 | u16 cap = sband->ht_cap.cap; | 407 | u16 cap = sband->ht_cap.cap; |