aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2013-01-15 10:15:57 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-01-16 17:27:49 -0500
commitcee00a959c0a86571e6f99cf42f0261d7e54d2ae (patch)
treeca8fe105ffd7059ef4f4eaf33197ba0b9a7acb9c
parent1c18f1452a772dfe884ed25677bddb3ecaf9c43a (diff)
cfg80211: Allow use_mfp to be specified with the connect command
The NL80211_ATTR_USE_MFP attribute was originally added for NL80211_CMD_ASSOCIATE, but it is actually as useful (if not even more useful) with NL80211_CMD_CONNECT, so process that attribute with the connect command, too. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--include/net/cfg80211.h2
-rw-r--r--include/uapi/linux/nl80211.h6
-rw-r--r--net/wireless/nl80211.c9
-rw-r--r--net/wireless/sme.c3
4 files changed, 16 insertions, 4 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index d81e730962cc..f1686d460e6b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1465,6 +1465,7 @@ struct cfg80211_ibss_params {
1465 * @ie: IEs for association request 1465 * @ie: IEs for association request
1466 * @ie_len: Length of assoc_ie in octets 1466 * @ie_len: Length of assoc_ie in octets
1467 * @privacy: indicates whether privacy-enabled APs should be used 1467 * @privacy: indicates whether privacy-enabled APs should be used
1468 * @mfp: indicate whether management frame protection is used
1468 * @crypto: crypto settings 1469 * @crypto: crypto settings
1469 * @key_len: length of WEP key for shared key authentication 1470 * @key_len: length of WEP key for shared key authentication
1470 * @key_idx: index of WEP key for shared key authentication 1471 * @key_idx: index of WEP key for shared key authentication
@@ -1485,6 +1486,7 @@ struct cfg80211_connect_params {
1485 u8 *ie; 1486 u8 *ie;
1486 size_t ie_len; 1487 size_t ie_len;
1487 bool privacy; 1488 bool privacy;
1489 enum nl80211_mfp mfp;
1488 struct cfg80211_crypto_settings crypto; 1490 struct cfg80211_crypto_settings crypto;
1489 const u8 *key; 1491 const u8 *key;
1490 u8 key_len, key_idx; 1492 u8 key_len, key_idx;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 6c4f703ae890..d01c16220dc5 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -374,8 +374,8 @@
374 * requests to connect to a specified network but without separating 374 * requests to connect to a specified network but without separating
375 * auth and assoc steps. For this, you need to specify the SSID in a 375 * auth and assoc steps. For this, you need to specify the SSID in a
376 * %NL80211_ATTR_SSID attribute, and can optionally specify the association 376 * %NL80211_ATTR_SSID attribute, and can optionally specify the association
377 * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, 377 * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,
378 * %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, 378 * %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,
379 * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE and 379 * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE and
380 * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT. 380 * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT.
381 * Background scan period can optionally be 381 * Background scan period can optionally be
@@ -958,7 +958,7 @@ enum nl80211_commands {
958 * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is 958 * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is
959 * used for the association (&enum nl80211_mfp, represented as a u32); 959 * used for the association (&enum nl80211_mfp, represented as a u32);
960 * this attribute can be used 960 * this attribute can be used
961 * with %NL80211_CMD_ASSOCIATE request 961 * with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests
962 * 962 *
963 * @NL80211_ATTR_STA_FLAGS2: Attribute containing a 963 * @NL80211_ATTR_STA_FLAGS2: Attribute containing a
964 * &struct nl80211_sta_flag_update. 964 * &struct nl80211_sta_flag_update.
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index d543cf152100..df82a5c9faee 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5932,6 +5932,15 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
5932 connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); 5932 connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
5933 } 5933 }
5934 5934
5935 if (info->attrs[NL80211_ATTR_USE_MFP]) {
5936 connect.mfp = nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]);
5937 if (connect.mfp != NL80211_MFP_REQUIRED &&
5938 connect.mfp != NL80211_MFP_NO)
5939 return -EINVAL;
5940 } else {
5941 connect.mfp = NL80211_MFP_NO;
5942 }
5943
5935 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { 5944 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
5936 connect.channel = 5945 connect.channel =
5937 ieee80211_get_channel(wiphy, 5946 ieee80211_get_channel(wiphy,
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index d2d26518cdd7..a825dfe12cf7 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -192,7 +192,8 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
192 prev_bssid, 192 prev_bssid,
193 params->ssid, params->ssid_len, 193 params->ssid, params->ssid_len,
194 params->ie, params->ie_len, 194 params->ie, params->ie_len,
195 false, &params->crypto, 195 params->mfp != NL80211_MFP_NO,
196 &params->crypto,
196 params->flags, &params->ht_capa, 197 params->flags, &params->ht_capa,
197 &params->ht_capa_mask); 198 &params->ht_capa_mask);
198 if (err) 199 if (err)