summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend Van Spriel <arend.vanspriel@broadcom.com>2017-04-13 08:06:27 -0400
committerJohannes Berg <johannes.berg@intel.com>2017-04-18 04:23:50 -0400
commit96b08fd6080efdfa8f6125cffc6742a2235d92f1 (patch)
tree994b4a3fa2dbb513740143b3af22a44ea0ee628e
parent1d5e9f80ab021e3e1f9436627a4ad07a143ccb2c (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.h2
-rw-r--r--net/wireless/nl80211.c23
-rw-r--r--net/wireless/nl80211.h3
-rw-r--r--net/wireless/scan.c5
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 */
1695struct cfg80211_sched_scan_request { 1696struct 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
7378out_free: 7377out_free:
@@ -13219,18 +13218,19 @@ static int nl80211_prep_scan_msg(struct sk_buff *msg,
13219 13218
13220static int 13219static int
13221nl80211_prep_sched_scan_msg(struct sk_buff *msg, 13220nl80211_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
13293void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, 13293void 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);
17void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, 17void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev,
18 struct sk_buff *msg); 18 struct sk_buff *msg);
19void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, 19void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd);
20 struct net_device *netdev, u32 cmd);
21void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, 20void 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);