aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorAssaf Krauss <assaf.krauss@intel.com>2014-09-03 08:25:01 -0400
committerJohannes Berg <johannes.berg@intel.com>2014-09-05 07:52:08 -0400
commitbab5ab7d2a5466406e8003d038cc7ce6b2d5d804 (patch)
tree4efa1ae46d6dce226fd8f389720c10b4a198634c /net/wireless/nl80211.c
parent1c7e23bf50264a251de53ad9fb1604683b801258 (diff)
nl80211: Add flag attribute for RRM connections
Add a flag attribute to use in associations, for tagging the target connection as supporting RRM. It is the responsibility of upper layers to set this flag only if both the underlying device, and the target network indeed support RRM. To be used in ASSOCIATE and CONNECT commands. Signed-off-by: Assaf Krauss <assaf.krauss@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index d876146498dd..459dc2769d0e 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -389,6 +389,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
389 [NL80211_ATTR_TDLS_PEER_CAPABILITY] = { .type = NLA_U32 }, 389 [NL80211_ATTR_TDLS_PEER_CAPABILITY] = { .type = NLA_U32 },
390 [NL80211_ATTR_IFACE_SOCKET_OWNER] = { .type = NLA_FLAG }, 390 [NL80211_ATTR_IFACE_SOCKET_OWNER] = { .type = NLA_FLAG },
391 [NL80211_ATTR_CSA_C_OFFSETS_TX] = { .type = NLA_BINARY }, 391 [NL80211_ATTR_CSA_C_OFFSETS_TX] = { .type = NLA_BINARY },
392 [NL80211_ATTR_USE_RRM] = { .type = NLA_FLAG },
392}; 393};
393 394
394/* policy for the key attributes */ 395/* policy for the key attributes */
@@ -6584,6 +6585,14 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
6584 sizeof(req.vht_capa)); 6585 sizeof(req.vht_capa));
6585 } 6586 }
6586 6587
6588 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
6589 if (!(rdev->wiphy.features &
6590 NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES) ||
6591 !(rdev->wiphy.features & NL80211_FEATURE_QUIET))
6592 return -EINVAL;
6593 req.flags |= ASSOC_REQ_USE_RRM;
6594 }
6595
6587 err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); 6596 err = nl80211_crypto_settings(rdev, info, &req.crypto, 1);
6588 if (!err) { 6597 if (!err) {
6589 wdev_lock(dev->ieee80211_ptr); 6598 wdev_lock(dev->ieee80211_ptr);
@@ -7241,6 +7250,14 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
7241 sizeof(connect.vht_capa)); 7250 sizeof(connect.vht_capa));
7242 } 7251 }
7243 7252
7253 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
7254 if (!(rdev->wiphy.features &
7255 NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES) ||
7256 !(rdev->wiphy.features & NL80211_FEATURE_QUIET))
7257 return -EINVAL;
7258 connect.flags |= ASSOC_REQ_USE_RRM;
7259 }
7260
7244 wdev_lock(dev->ieee80211_ptr); 7261 wdev_lock(dev->ieee80211_ptr);
7245 err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL); 7262 err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL);
7246 wdev_unlock(dev->ieee80211_ptr); 7263 wdev_unlock(dev->ieee80211_ptr);