Commit 46856bbf authored by Sam Leffler's avatar Sam Leffler Committed by Johannes Berg

cfg80211: add scan flag to indicate its priority

Add NL80211_SCAN_FLAG_LOW_PRIORITY flag support. It tells drivers
that this is a low priority scan request, so that they can take
necessary action.
Drivers need to advertise low priority scan capability during
registration.
Signed-off-by: default avatarSam Leffler <sleffler@chromium.org>
Tested-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent e8e27c66
...@@ -3048,6 +3048,7 @@ enum nl80211_ap_sme_features { ...@@ -3048,6 +3048,7 @@ enum nl80211_ap_sme_features {
* @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of
* equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station * equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station
* mode * mode
* @NL80211_FEATURE_LOW_PRIORITY_SCAN: This driver supports low priority scan
*/ */
enum nl80211_feature_flags { enum nl80211_feature_flags {
NL80211_FEATURE_SK_TX_STATUS = 1 << 0, NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
...@@ -3056,6 +3057,7 @@ enum nl80211_feature_flags { ...@@ -3056,6 +3057,7 @@ enum nl80211_feature_flags {
NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3,
NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4,
NL80211_FEATURE_SAE = 1 << 5, NL80211_FEATURE_SAE = 1 << 5,
NL80211_FEATURE_LOW_PRIORITY_SCAN = 1 << 6,
}; };
/** /**
...@@ -3096,9 +3098,11 @@ enum nl80211_connect_failed_reason { ...@@ -3096,9 +3098,11 @@ enum nl80211_connect_failed_reason {
* Scan request control flags are used to control the handling * Scan request control flags are used to control the handling
* of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN
* requests. * requests.
* (will be filled) *
* @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority
*/
enum nl80211_scan_flags { enum nl80211_scan_flags {
NL80211_SCAN_FLAG_LOW_PRIORITY = 1<<0,
}; };
*/
#endif /* __LINUX_NL80211_H */ #endif /* __LINUX_NL80211_H */
...@@ -4368,9 +4368,15 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) ...@@ -4368,9 +4368,15 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
} }
} }
if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) {
request->flags = nla_get_u32( request->flags = nla_get_u32(
info->attrs[NL80211_ATTR_SCAN_FLAGS]); info->attrs[NL80211_ATTR_SCAN_FLAGS]);
if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) &&
!(wiphy->features & NL80211_FEATURE_LOW_PRIORITY_SCAN)) {
err = -EOPNOTSUPP;
goto out_free;
}
}
request->no_cck = request->no_cck =
nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
...@@ -4603,9 +4609,15 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, ...@@ -4603,9 +4609,15 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
request->ie_len); request->ie_len);
} }
if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) {
request->flags = nla_get_u32( request->flags = nla_get_u32(
info->attrs[NL80211_ATTR_SCAN_FLAGS]); info->attrs[NL80211_ATTR_SCAN_FLAGS]);
if ((request->flags & NL80211_SCAN_FLAG_LOW_PRIORITY) &&
!(wiphy->features & NL80211_FEATURE_LOW_PRIORITY_SCAN)) {
err = -EOPNOTSUPP;
goto out_free;
}
}
request->dev = dev; request->dev = dev;
request->wiphy = &rdev->wiphy; request->wiphy = &rdev->wiphy;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment