2009-09-24 10:21:11

by Holger Schurig

[permalink] [raw]
Subject: [PATCH, v2]: nl80211: report age of scan results

Linux keeps scan results up to 15 seconds. This can be a problem for fast
moving clients: they get back stale data. But if the kernel reports the age
of the BSS items, then user-space can simply weed out old entries by itself.

Signed-off-by: Holger Schurig <[email protected]>

---

v2: renamed NL80211_BSS_AGE_MS to NL80211_BSS_SEEN_MS_AGO to underline that
it's a relativene time

--- linux-wl.orig/include/linux/nl80211.h
+++ linux-wl/include/linux/nl80211.h
@@ -1277,6 +1277,7 @@
* @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
* in unspecified units, scaled to 0..100 (u8)
* @NL80211_BSS_STATUS: status, if this BSS is "used"
+ * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms
* @__NL80211_BSS_AFTER_LAST: internal
* @NL80211_BSS_MAX: highest BSS attribute
*/
@@ -1291,6 +1292,7 @@
NL80211_BSS_SIGNAL_MBM,
NL80211_BSS_SIGNAL_UNSPEC,
NL80211_BSS_STATUS,
+ NL80211_BSS_SEEN_MS_AGO,

/* keep last */
__NL80211_BSS_AFTER_LAST,
--- linux-wl.orig/net/wireless/nl80211.c
+++ linux-wl/net/wireless/nl80211.c
@@ -3105,6 +3105,8 @@
NLA_PUT_U16(msg, NL80211_BSS_BEACON_INTERVAL, res->beacon_interval);
NLA_PUT_U16(msg, NL80211_BSS_CAPABILITY, res->capability);
NLA_PUT_U32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq);
+ NLA_PUT_U32(msg, NL80211_BSS_SEEN_MS_AGO,
+ jiffies_to_msecs(jiffies - intbss->ts));

switch (rdev->wiphy.signal_type) {
case CFG80211_SIGNAL_TYPE_MBM:

--
http://www.holgerschurig.de


2009-09-24 10:29:18

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH, v2]: nl80211: report age of scan results

On Thu, 2009-09-24 at 12:21 +0200, Holger Schurig wrote:
> Linux keeps scan results up to 15 seconds. This can be a problem for fast
> moving clients: they get back stale data. But if the kernel reports the age
> of the BSS items, then user-space can simply weed out old entries by itself.
>
> Signed-off-by: Holger Schurig <[email protected]>

Fine with me, I don't care if there is a #define or not.

Acked-by: Johannes Berg <[email protected]>

johannes

>
> ---
>
> v2: renamed NL80211_BSS_AGE_MS to NL80211_BSS_SEEN_MS_AGO to underline that
> it's a relativene time
>
> --- linux-wl.orig/include/linux/nl80211.h
> +++ linux-wl/include/linux/nl80211.h
> @@ -1277,6 +1277,7 @@
> * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
> * in unspecified units, scaled to 0..100 (u8)
> * @NL80211_BSS_STATUS: status, if this BSS is "used"
> + * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms
> * @__NL80211_BSS_AFTER_LAST: internal
> * @NL80211_BSS_MAX: highest BSS attribute
> */
> @@ -1291,6 +1292,7 @@
> NL80211_BSS_SIGNAL_MBM,
> NL80211_BSS_SIGNAL_UNSPEC,
> NL80211_BSS_STATUS,
> + NL80211_BSS_SEEN_MS_AGO,
>
> /* keep last */
> __NL80211_BSS_AFTER_LAST,
> --- linux-wl.orig/net/wireless/nl80211.c
> +++ linux-wl/net/wireless/nl80211.c
> @@ -3105,6 +3105,8 @@
> NLA_PUT_U16(msg, NL80211_BSS_BEACON_INTERVAL, res->beacon_interval);
> NLA_PUT_U16(msg, NL80211_BSS_CAPABILITY, res->capability);
> NLA_PUT_U32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq);
> + NLA_PUT_U32(msg, NL80211_BSS_SEEN_MS_AGO,
> + jiffies_to_msecs(jiffies - intbss->ts));
>
> switch (rdev->wiphy.signal_type) {
> case CFG80211_SIGNAL_TYPE_MBM:
>


Attachments:
signature.asc (801.00 B)
This is a digitally signed message part