]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/wireless/scan.c
nl80211: support beacon report scanning
[mirror_ubuntu-bionic-kernel.git] / net / wireless / scan.c
index ef2955c89a0024f24b7566d00870ef1ebed6b056..0358e12be54b0a7bd8dc5d15a012127b0fa5f643 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Copyright 2008 Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
+ * Copyright 2016      Intel Deutschland GmbH
  */
 #include <linux/kernel.h>
 #include <linux/slab.h>
@@ -194,7 +195,7 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev,
        if (wdev->netdev)
                cfg80211_sme_scan_done(wdev->netdev);
 
-       if (!request->aborted &&
+       if (!request->info.aborted &&
            request->flags & NL80211_SCAN_FLAG_FLUSH) {
                /* flush entries from previous scans */
                spin_lock_bh(&rdev->bss_lock);
@@ -202,10 +203,10 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev,
                spin_unlock_bh(&rdev->bss_lock);
        }
 
-       msg = nl80211_build_scan_msg(rdev, wdev, request->aborted);
+       msg = nl80211_build_scan_msg(rdev, wdev, request->info.aborted);
 
 #ifdef CONFIG_CFG80211_WEXT
-       if (wdev->netdev && !request->aborted) {
+       if (wdev->netdev && !request->info.aborted) {
                memset(&wrqu, 0, sizeof(wrqu));
 
                wireless_send_event(wdev->netdev, SIOCGIWSCAN, &wrqu, NULL);
@@ -236,12 +237,13 @@ void __cfg80211_scan_done(struct work_struct *wk)
        rtnl_unlock();
 }
 
-void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
+void cfg80211_scan_done(struct cfg80211_scan_request *request,
+                       struct cfg80211_scan_info *info)
 {
-       trace_cfg80211_scan_done(request, aborted);
+       trace_cfg80211_scan_done(request, info);
        WARN_ON(request != wiphy_to_rdev(request->wiphy)->scan_req);
 
-       request->aborted = aborted;
+       request->info = *info;
        request->notified = true;
        queue_work(cfg80211_wq, &wiphy_to_rdev(request->wiphy)->scan_done_wk);
 }
@@ -843,6 +845,8 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
                found->pub.capability = tmp->pub.capability;
                found->ts = tmp->ts;
                found->ts_boottime = tmp->ts_boottime;
+               found->parent_tsf = tmp->parent_tsf;
+               ether_addr_copy(found->parent_bssid, tmp->parent_bssid);
        } else {
                struct cfg80211_internal_bss *new;
                struct cfg80211_internal_bss *hidden;
@@ -1086,6 +1090,8 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
        tmp.pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int);
        tmp.pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info);
        tmp.ts_boottime = data->boottime_ns;
+       tmp.parent_tsf = data->parent_tsf;
+       ether_addr_copy(tmp.parent_bssid, data->parent_bssid);
 
        signal_valid = abs(data->chan->center_freq - channel->center_freq) <=
                wiphy->max_adj_channel_rssi_comp;