nl80211: support beacon report scanning
[cascardo/linux.git] / net / wireless / nl80211.c
index 447026f..c53b546 100644 (file)
@@ -6223,6 +6223,19 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
                }
        }
 
+       if (info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]) {
+               if (!wiphy_ext_feature_isset(wiphy,
+                                       NL80211_EXT_FEATURE_SET_SCAN_DWELL)) {
+                       err = -EOPNOTSUPP;
+                       goto out_free;
+               }
+
+               request->duration =
+                       nla_get_u16(info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]);
+               request->duration_mandatory =
+                       nla_get_flag(info->attrs[NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY]);
+       }
+
        if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) {
                request->flags = nla_get_u32(
                        info->attrs[NL80211_ATTR_SCAN_FLAGS]);
@@ -7056,6 +7069,13 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
                        jiffies_to_msecs(jiffies - intbss->ts)))
                goto nla_put_failure;
 
+       if (intbss->parent_tsf &&
+           (nla_put_u64_64bit(msg, NL80211_BSS_PARENT_TSF,
+                              intbss->parent_tsf, NL80211_BSS_PAD) ||
+            nla_put(msg, NL80211_BSS_PARENT_BSSID, ETH_ALEN,
+                    intbss->parent_bssid)))
+               goto nla_put_failure;
+
        if (intbss->ts_boottime &&
            nla_put_u64_64bit(msg, NL80211_BSS_LAST_SEEN_BOOTTIME,
                              intbss->ts_boottime, NL80211_BSS_PAD))
@@ -11829,6 +11849,13 @@ static int nl80211_add_scan_req(struct sk_buff *msg,
            nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, req->flags))
                goto nla_put_failure;
 
+       if (req->info.scan_start_tsf &&
+           (nla_put_u64_64bit(msg, NL80211_ATTR_SCAN_START_TIME_TSF,
+                              req->info.scan_start_tsf, NL80211_BSS_PAD) ||
+            nla_put(msg, NL80211_ATTR_SCAN_START_TIME_TSF_BSSID, ETH_ALEN,
+                    req->info.tsf_bssid)))
+               goto nla_put_failure;
+
        return 0;
  nla_put_failure:
        return -ENOBUFS;