Commit 9c748934 authored by Luciano Coelho's avatar Luciano Coelho Committed by Johannes Berg

nl80211: add an attribute to allow delaying the first scheduled scan cycle

The userspace may want to delay the the first scheduled scan or
net-detect cycle.  Add an optional attribute to the scheduled scan
configuration to pass the delay to be (optionally) used by the driver.
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
[add the attribute to the policy to validate it]
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent db82d8a9
...@@ -1493,6 +1493,10 @@ struct cfg80211_match_set { ...@@ -1493,6 +1493,10 @@ struct cfg80211_match_set {
* @rcu_head: RCU callback used to free the struct * @rcu_head: RCU callback used to free the struct
* @owner_nlportid: netlink portid of owner (if this should is a request * @owner_nlportid: netlink portid of owner (if this should is a request
* owned by a particular socket) * owned by a particular socket)
* @delay: delay in seconds to use before starting the first scan
* cycle. The driver may ignore this parameter and start
* immediately (or at any other time), if this feature is not
* supported.
*/ */
struct cfg80211_sched_scan_request { struct cfg80211_sched_scan_request {
struct cfg80211_ssid *ssids; struct cfg80211_ssid *ssids;
...@@ -1506,6 +1510,7 @@ struct cfg80211_sched_scan_request { ...@@ -1506,6 +1510,7 @@ struct cfg80211_sched_scan_request {
struct cfg80211_match_set *match_sets; struct cfg80211_match_set *match_sets;
int n_match_sets; int n_match_sets;
s32 min_rssi_thold; s32 min_rssi_thold;
u32 delay;
u8 mac_addr[ETH_ALEN] __aligned(2); u8 mac_addr[ETH_ALEN] __aligned(2);
u8 mac_addr_mask[ETH_ALEN] __aligned(2); u8 mac_addr_mask[ETH_ALEN] __aligned(2);
......
...@@ -324,7 +324,9 @@ ...@@ -324,7 +324,9 @@
* if passed, define which channels should be scanned; if not * if passed, define which channels should be scanned; if not
* passed, all channels allowed for the current regulatory domain * passed, all channels allowed for the current regulatory domain
* are used. Extra IEs can also be passed from the userspace by * are used. Extra IEs can also be passed from the userspace by
* using the %NL80211_ATTR_IE attribute. * using the %NL80211_ATTR_IE attribute. The first cycle of the
* scheduled scan can be delayed by %NL80211_ATTR_SCHED_SCAN_DELAY
* is supplied.
* @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if
* scheduled scan is not running. The caller may assume that as soon * scheduled scan is not running. The caller may assume that as soon
* as the call returns, it is safe to start a new scheduled scan again. * as the call returns, it is safe to start a new scheduled scan again.
...@@ -1735,6 +1737,9 @@ enum nl80211_commands { ...@@ -1735,6 +1737,9 @@ enum nl80211_commands {
* should be contained in the result as the sum of the respective counters * should be contained in the result as the sum of the respective counters
* over all channels. * over all channels.
* *
* @NL80211_ATTR_SCHED_SCAN_DELAY: delay before a scheduled scan (or a
* WoWLAN net-detect scan) is started, u32 in seconds.
*
* @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined * @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use * @__NL80211_ATTR_AFTER_LAST: internal use
...@@ -2100,6 +2105,8 @@ enum nl80211_attrs { ...@@ -2100,6 +2105,8 @@ enum nl80211_attrs {
NL80211_ATTR_NETNS_FD, NL80211_ATTR_NETNS_FD,
NL80211_ATTR_SCHED_SCAN_DELAY,
/* add attributes here, update the policy in nl80211.c */ /* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST, __NL80211_ATTR_AFTER_LAST,
...@@ -3743,11 +3750,12 @@ struct nl80211_pattern_support { ...@@ -3743,11 +3750,12 @@ struct nl80211_pattern_support {
* @NL80211_WOWLAN_TRIG_NET_DETECT: wake up when a configured network * @NL80211_WOWLAN_TRIG_NET_DETECT: wake up when a configured network
* is detected. This is a nested attribute that contains the * is detected. This is a nested attribute that contains the
* same attributes used with @NL80211_CMD_START_SCHED_SCAN. It * same attributes used with @NL80211_CMD_START_SCHED_SCAN. It
* specifies how the scan is performed (e.g. the interval and the * specifies how the scan is performed (e.g. the interval, the
* channels to scan) as well as the scan results that will * channels to scan and the initial delay) as well as the scan
* trigger a wake (i.e. the matchsets). This attribute is also * results that will trigger a wake (i.e. the matchsets). This
* sent in a response to @NL80211_CMD_GET_WIPHY, indicating the * attribute is also sent in a response to
* number of match sets supported by the driver (u32). * @NL80211_CMD_GET_WIPHY, indicating the number of match sets
* supported by the driver (u32).
* @NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS: nested attribute * @NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS: nested attribute
* containing an array with information about what triggered the * containing an array with information about what triggered the
* wake up. If no elements are present in the array, it means * wake up. If no elements are present in the array, it means
......
...@@ -398,6 +398,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { ...@@ -398,6 +398,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_MAC_MASK] = { .len = ETH_ALEN }, [NL80211_ATTR_MAC_MASK] = { .len = ETH_ALEN },
[NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG }, [NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG },
[NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 }, [NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 },
[NL80211_ATTR_SCHED_SCAN_DELAY] = { .type = NLA_U32 },
}; };
/* policy for the key attributes */ /* policy for the key attributes */
...@@ -6205,6 +6206,10 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev, ...@@ -6205,6 +6206,10 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
} }
} }
if (attrs[NL80211_ATTR_SCHED_SCAN_DELAY])
request->delay =
nla_get_u32(attrs[NL80211_ATTR_SCHED_SCAN_DELAY]);
request->interval = interval; request->interval = interval;
request->scan_start = jiffies; request->scan_start = jiffies;
......
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