]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: cfg80211: expose update timestamp to drivers
authorBenjamin Berg <benjamin.berg@intel.com>
Wed, 12 Feb 2025 06:22:58 +0000 (08:22 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 26 Feb 2025 14:48:54 +0000 (15:48 +0100)
This information is exposed to userspace but not drivers. Make this
field public so that drivers are also able to access it. The information
is for example useful for link selection to determine whether the BSS
corresponding to an MLO link has been seen in a recent scan.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250212082137.b682ee7aebc8.I0f7cca9effa2b1cee79f4f2eb8b549c99b4e0571@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
net/wireless/core.h
net/wireless/nl80211.c
net/wireless/scan.c

index a72e7eb7027f2f85b5354a84f0e8b577b561cbe3..3580f3f5f44eec1404b4fda8e6e306b2b57ce054 100644 (file)
@@ -2947,6 +2947,7 @@ struct cfg80211_bss_ies {
  * @nontrans_list: list of non-transmitted BSS, if this is a transmitted one
  *     (multi-BSSID support)
  * @signal: signal strength value (type depends on the wiphy's signal_type)
+ * @ts_boottime: timestamp of the last BSS update in nanoseconds since boot
  * @chains: bitmask for filled values in @chain_signal.
  * @chain_signal: per-chain signal strength of last received BSS in dBm.
  * @bssid_index: index in the multiple BSS set
@@ -2971,6 +2972,8 @@ struct cfg80211_bss {
 
        s32 signal;
 
+       u64 ts_boottime;
+
        u16 beacon_interval;
        u16 capability;
 
index 826299f3d78132f9cb12749b9316059cd3ab0121..b094b526b05db547ca38091514fa4f8ba442a057 100644 (file)
@@ -180,7 +180,6 @@ struct cfg80211_internal_bss {
        struct list_head list;
        struct list_head hidden_list;
        struct rb_node rbn;
-       u64 ts_boottime;
        unsigned long ts;
        unsigned long refcount;
        atomic_t hold;
index 8bd09110d393e968e6164dde60180d47810e5ca7..79b3f34e72e2a1277a3571dd6e5f813aa5014ba1 100644 (file)
@@ -10519,9 +10519,9 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
                     intbss->parent_bssid)))
                goto nla_put_failure;
 
-       if (intbss->ts_boottime &&
+       if (res->ts_boottime &&
            nla_put_u64_64bit(msg, NL80211_BSS_LAST_SEEN_BOOTTIME,
-                             intbss->ts_boottime, NL80211_BSS_PAD))
+                             res->ts_boottime, NL80211_BSS_PAD))
                goto nla_put_failure;
 
        if (!nl80211_put_signal(msg, intbss->pub.chains,
index 1de25e9763cbb8d8d2917da33cbcf98c1285021b..9865f305275da6f265f0c305244953bb7e31f7bd 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright 2008 Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright 2016      Intel Deutschland GmbH
- * Copyright (C) 2018-2024 Intel Corporation
+ * Copyright (C) 2018-2025 Intel Corporation
  */
 #include <linux/kernel.h>
 #include <linux/slab.h>
@@ -1934,7 +1934,7 @@ cfg80211_update_known_bss(struct cfg80211_registered_device *rdev,
                known->pub.signal = new->pub.signal;
        known->pub.capability = new->pub.capability;
        known->ts = new->ts;
-       known->ts_boottime = new->ts_boottime;
+       known->pub.ts_boottime = new->pub.ts_boottime;
        known->parent_tsf = new->parent_tsf;
        known->pub.chains = new->pub.chains;
        memcpy(known->pub.chain_signal, new->pub.chain_signal,
@@ -2291,7 +2291,7 @@ cfg80211_inform_single_bss_data(struct wiphy *wiphy,
                tmp.pub.signal = 0;
        tmp.pub.beacon_interval = data->beacon_interval;
        tmp.pub.capability = data->capability;
-       tmp.ts_boottime = drv_data->boottime_ns;
+       tmp.pub.ts_boottime = drv_data->boottime_ns;
        tmp.parent_tsf = drv_data->parent_tsf;
        ether_addr_copy(tmp.parent_bssid, drv_data->parent_bssid);
        tmp.pub.chains = drv_data->chains;