1f5fd14f58
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
90 lines
3.0 KiB
Diff
90 lines
3.0 KiB
Diff
From d0f3f451f0002339ad75b43e79f1322f2e2e4ed1 Mon Sep 17 00:00:00 2001
|
|
From: Jouni Malinen <jouni.malinen@atheros.com>
|
|
Date: Mon, 13 Dec 2010 21:08:53 +0200
|
|
Subject: [PATCH] nl80211: Set cipher suites when using user space SME
|
|
|
|
Previously, pairwise and group cipher suites were configured only
|
|
when kernel SME (nl80211 connect API) was used. However, mac80211
|
|
needs this information even in the user space SME case for one
|
|
thing: to disable HT when TKIP/WEP is used. Add
|
|
NL80211_ATTR_CIPHER_SUITES_PAIRWISE to fix this special case with
|
|
user space SME. This allows mac80211 to disable HT properly when
|
|
the AP is configured with configuration that is not allowed.
|
|
(cherry picked from commit aca016054885c17d58c41888698761f2e1ce2b39)
|
|
---
|
|
src/drivers/driver_nl80211.c | 44 ++++++++++++++++++++++++++++++++++++++++++
|
|
wpa_supplicant/sme.c | 2 +
|
|
2 files changed, 46 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
|
|
index 364158c..fb75c2e 100644
|
|
--- a/src/drivers/driver_nl80211.c
|
|
+++ b/src/drivers/driver_nl80211.c
|
|
@@ -3940,6 +3940,50 @@ static int wpa_driver_nl80211_associate(
|
|
NLA_PUT(msg, NL80211_ATTR_IE, params->wpa_ie_len,
|
|
params->wpa_ie);
|
|
|
|
+ if (params->pairwise_suite != CIPHER_NONE) {
|
|
+ int cipher;
|
|
+
|
|
+ switch (params->pairwise_suite) {
|
|
+ case CIPHER_WEP40:
|
|
+ cipher = WLAN_CIPHER_SUITE_WEP40;
|
|
+ break;
|
|
+ case CIPHER_WEP104:
|
|
+ cipher = WLAN_CIPHER_SUITE_WEP104;
|
|
+ break;
|
|
+ case CIPHER_CCMP:
|
|
+ cipher = WLAN_CIPHER_SUITE_CCMP;
|
|
+ break;
|
|
+ case CIPHER_TKIP:
|
|
+ default:
|
|
+ cipher = WLAN_CIPHER_SUITE_TKIP;
|
|
+ break;
|
|
+ }
|
|
+ wpa_printf(MSG_DEBUG, " * pairwise=0x%x\n", cipher);
|
|
+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITES_PAIRWISE, cipher);
|
|
+ }
|
|
+
|
|
+ if (params->group_suite != CIPHER_NONE) {
|
|
+ int cipher;
|
|
+
|
|
+ switch (params->group_suite) {
|
|
+ case CIPHER_WEP40:
|
|
+ cipher = WLAN_CIPHER_SUITE_WEP40;
|
|
+ break;
|
|
+ case CIPHER_WEP104:
|
|
+ cipher = WLAN_CIPHER_SUITE_WEP104;
|
|
+ break;
|
|
+ case CIPHER_CCMP:
|
|
+ cipher = WLAN_CIPHER_SUITE_CCMP;
|
|
+ break;
|
|
+ case CIPHER_TKIP:
|
|
+ default:
|
|
+ cipher = WLAN_CIPHER_SUITE_TKIP;
|
|
+ break;
|
|
+ }
|
|
+ wpa_printf(MSG_DEBUG, " * group=0x%x\n", cipher);
|
|
+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITE_GROUP, cipher);
|
|
+ }
|
|
+
|
|
#ifdef CONFIG_IEEE80211W
|
|
if (params->mgmt_frame_protection == MGMT_FRAME_PROTECTION_REQUIRED)
|
|
NLA_PUT_U32(msg, NL80211_ATTR_USE_MFP, NL80211_MFP_REQUIRED);
|
|
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
|
|
index 5604e97..878bbf0 100644
|
|
--- a/wpa_supplicant/sme.c
|
|
+++ b/wpa_supplicant/sme.c
|
|
@@ -333,6 +333,8 @@ void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
|
|
params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
|
|
wpa_s->sme.assoc_req_ie : NULL;
|
|
params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
|
|
+ params.pairwise_suite = cipher_suite2driver(wpa_s->pairwise_cipher);
|
|
+ params.group_suite = cipher_suite2driver(wpa_s->group_cipher);
|
|
#ifdef CONFIG_IEEE80211R
|
|
if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
|
|
params.wpa_ie = wpa_s->sme.ft_ies;
|
|
--
|
|
1.7.4-rc1
|
|
|