Commit 96b08fd6 authored by Arend Van Spriel's avatar Arend Van Spriel Committed by Johannes Berg

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: default avatarHante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: default avatarFranky Lin <franky.lin@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 1d5e9f80
...@@ -1649,6 +1649,7 @@ struct cfg80211_bss_select_adjust { ...@@ -1649,6 +1649,7 @@ struct cfg80211_bss_select_adjust {
/** /**
* struct cfg80211_sched_scan_request - scheduled scan request description * struct cfg80211_sched_scan_request - scheduled scan request description
* *
* @reqid: identifies this request.
* @ssids: SSIDs to scan for (passed in the probe_reqs in active scans) * @ssids: SSIDs to scan for (passed in the probe_reqs in active scans)
* @n_ssids: number of SSIDs * @n_ssids: number of SSIDs
* @n_channels: total number of channels to scan * @n_channels: total number of channels to scan
...@@ -1693,6 +1694,7 @@ struct cfg80211_bss_select_adjust { ...@@ -1693,6 +1694,7 @@ struct cfg80211_bss_select_adjust {
* comparisions. * comparisions.
*/ */
struct cfg80211_sched_scan_request { struct cfg80211_sched_scan_request {
u64 reqid;
struct cfg80211_ssid *ssids; struct cfg80211_ssid *ssids;
int n_ssids; int n_ssids;
u32 n_channels; u32 n_channels;
......
...@@ -7371,8 +7371,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb, ...@@ -7371,8 +7371,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req); rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req);
nl80211_send_sched_scan(rdev, dev, nl80211_send_sched_scan(sched_scan_req, NL80211_CMD_START_SCHED_SCAN);
NL80211_CMD_START_SCHED_SCAN);
return 0; return 0;
out_free: out_free:
...@@ -13219,18 +13218,19 @@ static int nl80211_prep_scan_msg(struct sk_buff *msg, ...@@ -13219,18 +13218,19 @@ static int nl80211_prep_scan_msg(struct sk_buff *msg,
static int static int
nl80211_prep_sched_scan_msg(struct sk_buff *msg, nl80211_prep_sched_scan_msg(struct sk_buff *msg,
struct cfg80211_registered_device *rdev, struct cfg80211_sched_scan_request *req, u32 cmd)
struct net_device *netdev,
u32 portid, u32 seq, int flags, u32 cmd)
{ {
void *hdr; void *hdr;
hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); hdr = nl80211hdr_put(msg, 0, 0, 0, cmd);
if (!hdr) if (!hdr)
return -1; return -1;
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || if (nla_put_u32(msg, NL80211_ATTR_WIPHY,
nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) wiphy_to_rdev(req->wiphy)->wiphy_idx) ||
nla_put_u32(msg, NL80211_ATTR_IFINDEX, req->dev->ifindex) ||
nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, req->reqid,
NL80211_ATTR_PAD))
goto nla_put_failure; goto nla_put_failure;
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -13290,8 +13290,7 @@ void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, ...@@ -13290,8 +13290,7 @@ void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev,
NL80211_MCGRP_SCAN, GFP_KERNEL); NL80211_MCGRP_SCAN, GFP_KERNEL);
} }
void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd)
struct net_device *netdev, u32 cmd)
{ {
struct sk_buff *msg; struct sk_buff *msg;
...@@ -13299,12 +13298,12 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, ...@@ -13299,12 +13298,12 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
if (!msg) if (!msg)
return; return;
if (nl80211_prep_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { if (nl80211_prep_sched_scan_msg(msg, req, cmd) < 0) {
nlmsg_free(msg); nlmsg_free(msg);
return; return;
} }
genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, genlmsg_multicast_netns(&nl80211_fam, wiphy_net(req->wiphy), msg, 0,
NL80211_MCGRP_SCAN, GFP_KERNEL); NL80211_MCGRP_SCAN, GFP_KERNEL);
} }
......
...@@ -16,8 +16,7 @@ struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, ...@@ -16,8 +16,7 @@ struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev, bool aborted); struct wireless_dev *wdev, bool aborted);
void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev,
struct sk_buff *msg); struct sk_buff *msg);
void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd);
struct net_device *netdev, u32 cmd);
void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, void nl80211_common_reg_change_event(enum nl80211_commands cmd_id,
struct regulatory_request *request); struct regulatory_request *request);
......
...@@ -321,8 +321,7 @@ void __cfg80211_sched_scan_results(struct work_struct *wk) ...@@ -321,8 +321,7 @@ void __cfg80211_sched_scan_results(struct work_struct *wk)
spin_unlock_bh(&rdev->bss_lock); spin_unlock_bh(&rdev->bss_lock);
request->scan_start = jiffies; request->scan_start = jiffies;
} }
nl80211_send_sched_scan(rdev, request->dev, nl80211_send_sched_scan(request, NL80211_CMD_SCHED_SCAN_RESULTS);
NL80211_CMD_SCHED_SCAN_RESULTS);
} }
rtnl_unlock(); rtnl_unlock();
...@@ -379,7 +378,7 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, ...@@ -379,7 +378,7 @@ int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev,
return err; return err;
} }
nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); nl80211_send_sched_scan(sched_scan_req, NL80211_CMD_SCHED_SCAN_STOPPED);
RCU_INIT_POINTER(rdev->sched_scan_req, NULL); RCU_INIT_POINTER(rdev->sched_scan_req, NULL);
kfree_rcu(sched_scan_req, rcu_head); kfree_rcu(sched_scan_req, rcu_head);
......
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