diff options
author | Arend Van Spriel <arend.vanspriel@broadcom.com> | 2017-04-13 08:06:27 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2017-04-18 04:23:50 -0400 |
commit | 96b08fd6080efdfa8f6125cffc6742a2235d92f1 (patch) | |
tree | 994b4a3fa2dbb513740143b3af22a44ea0ee628e | |
parent | 1d5e9f80ab021e3e1f9436627a4ad07a143ccb2c (diff) |
nl80211: add request id in scheduled scan event messages
For multi-scheduled scan support in subsequent patch a request id
will be added. This patch add this request id to the scheduled
scan event messages. For now the request id will always be zero.
With multi-scheduled scan its value will inform user-space to which
scan the event relates.
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | include/net/cfg80211.h | 2 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 23 | ||||
-rw-r--r-- | net/wireless/nl80211.h | 3 | ||||
-rw-r--r-- | net/wireless/scan.c | 5 |
4 files changed, 16 insertions, 17 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 89fa4995ddca..2a200b964b7a 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -1649,6 +1649,7 @@ struct cfg80211_bss_select_adjust { | |||
1649 | /** | 1649 | /** |
1650 | * struct cfg80211_sched_scan_request - scheduled scan request description | 1650 | * struct cfg80211_sched_scan_request - scheduled scan request description |
1651 | * | 1651 | * |
1652 | * @reqid: identifies this request. | ||
1652 | * @ssids: SSIDs to scan for (passed in the probe_reqs in active scans) | 1653 | * @ssids: SSIDs to scan for (passed in the probe_reqs in active scans) |
1653 | * @n_ssids: number of SSIDs | 1654 | * @n_ssids: number of SSIDs |
1654 | * @n_channels: total number of channels to scan | 1655 | * @n_channels: total number of channels to scan |
@@ -1693,6 +1694,7 @@ struct cfg80211_bss_select_adjust { | |||
1693 | * comparisions. | 1694 | * comparisions. |
1694 | */ | 1695 | */ |
1695 | struct cfg80211_sched_scan_request { | 1696 | struct cfg80211_sched_scan_request { |
1697 | u64 reqid; | ||
1696 | struct cfg80211_ssid *ssids; | 1698 | struct cfg80211_ssid *ssids; |
1697 | int n_ssids; | 1699 | int n_ssids; |
1698 | u32 n_channels; | 1700 | u32 n_channels; |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 671b635c0625..a047992e5df1 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -7371,8 +7371,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, | |||
7371 | 7371 | ||
7372 | rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req); | 7372 | rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req); |
7373 | 7373 | ||
7374 | nl80211_send_sched_scan(rdev, dev, | 7374 | nl80211_send_sched_scan(sched_scan_req, NL80211_CMD_START_SCHED_SCAN); |
7375 | NL80211_CMD_START_SCHED_SCAN); | ||
7376 | return 0; | 7375 | return 0; |
7377 | 7376 | ||
7378 | out_free: | 7377 | out_free: |
@@ -13219,18 +13218,19 @@ static int nl80211_prep_scan_msg(struct sk_buff *msg, | |||
13219 | 13218 | ||
13220 | static int | 13219 | static int |
13221 | nl80211_prep_sched_scan_msg(struct sk_buff *msg, | 13220 | nl80211_prep_sched_scan_msg(struct sk_buff *msg, |
13222 | struct cfg80211_registered_device *rdev, | 13221 | struct cfg80211_sched_scan_request *req, u32 cmd) |
13223 | struct net_device *netdev, | ||
13224 | u32 portid, u32 seq, int flags, u32 cmd) | ||
13225 | { | 13222 | { |
13226 | void *hdr; | 13223 | void *hdr; |
13227 | 13224 | ||
13228 | hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); | 13225 | hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); |
13229 | if (!hdr) | 13226 | if (!hdr) |
13230 | return -1; | 13227 | return -1; |
13231 | 13228 | ||
13232 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || | 13229 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, |
13233 | nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) | 13230 | wiphy_to_rdev(req->wiphy)->wiphy_idx) || |
13231 | nla_put_u32(msg, NL80211_ATTR_IFINDEX, req->dev->ifindex) || | ||
13232 | nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, req->reqid, | ||
13233 | NL80211_ATTR_PAD)) | ||
13234 | goto nla_put_failure; | 13234 | goto nla_put_failure; |
13235 | 13235 | ||
13236 | genlmsg_end(msg, hdr); | 13236 | genlmsg_end(msg, hdr); |
@@ -13290,8 +13290,7 @@ void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, | |||
13290 | NL80211_MCGRP_SCAN, GFP_KERNEL); | 13290 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
13291 | } | 13291 | } |
13292 | 13292 | ||
13293 | void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, | 13293 | void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd) |
13294 | struct net_device *netdev, u32 cmd) | ||
13295 | { | 13294 | { |
13296 | struct sk_buff *msg; | 13295 | struct sk_buff *msg; |
13297 | 13296 | ||
@@ -13299,12 +13298,12 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, | |||
13299 | if (!msg) | 13298 | if (!msg) |
13300 | return; | 13299 | return; |
13301 | 13300 | ||
13302 | if (nl80211_prep_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { | 13301 | if (nl80211_prep_sched_scan_msg(msg, req, cmd) < 0) { |
13303 | nlmsg_free(msg); | 13302 | nlmsg_free(msg); |
13304 | return; | 13303 | return; |
13305 | } | 13304 | } |
13306 | 13305 | ||
13307 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, | 13306 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(req->wiphy), msg, 0, |
13308 | NL80211_MCGRP_SCAN, GFP_KERNEL); | 13307 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
13309 | } | 13308 | } |
13310 | 13309 | ||
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h index 3cb17cd9577f..d5f6860e62ab 100644 --- a/net/wireless/nl80211.h +++ b/net/wireless/nl80211.h | |||
@@ -16,8 +16,7 @@ struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, | |||
16 | struct wireless_dev *wdev, bool aborted); | 16 | struct wireless_dev *wdev, bool aborted); |
17 | void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, | 17 | void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, |
18 | struct sk_buff *msg); | 18 | struct sk_buff *msg); |
19 | void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, | 19 | void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd); |
20 | struct net_device *netdev, u32 cmd); | ||
21 | void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, | 20 | void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, |
22 | struct regulatory_request *request); | 21 | struct regulatory_request *request); |
23 | 22 | ||
diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 21be56b3128e..6f4996c0f4df 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c | |||
@@ -321,8 +321,7 @@ void __cfg80211_sched_scan_results(struct work_struct *wk) | |||
321 | spin_unlock_bh(&rdev->bss_lock); | 321 | spin_unlock_bh(&rdev->bss_lock); |
322 | request->scan_start = jiffies; | 322 | request->scan_start = jiffies; |
323 | } | 323 | } |
324 | nl80211_send_sched_scan(rdev, request->dev, | 324 | nl80211_send_sched_scan(request, NL80211_CMD_SCHED_SCAN_RESULTS); |
325 | NL80211_CMD_SCHED_SCAN_RESULTS); | ||
326 | } | 325 | } |
327 | 326 | ||
328 | rtnl_unlock(); | 327 | rtnl_unlock(); |
@@ -379,7 +378,7 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, | |||
379 | return err; | 378 | return err; |
380 | } | 379 | } |
381 | 380 | ||
382 | nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); | 381 | nl80211_send_sched_scan(sched_scan_req, NL80211_CMD_SCHED_SCAN_STOPPED); |
383 | 382 | ||
384 | RCU_INIT_POINTER(rdev->sched_scan_req, NULL); | 383 | RCU_INIT_POINTER(rdev->sched_scan_req, NULL); |
385 | kfree_rcu(sched_scan_req, rcu_head); | 384 | kfree_rcu(sched_scan_req, rcu_head); |