[OpenWrt-Devel] [PATCH] iwinfo: add BSS load element to scan result
Steve Brown
sbrown at ewol.com
Wed Feb 5 08:48:35 EST 2020
Hi David,
On Fri, 2020-01-31 at 14:45 +0100, David Bauer wrote:
> This adds support for the BSS load information element. With this
> patch,
> the BSS load information is visible when using the CLI as well as
> when
> accessing scan results using the LUA binding.
>
> Signed-off-by: David Bauer <mail at david-bauer.net>
> ---
> include/iwinfo.h | 6 ++++++
> include/iwinfo/utils.h | 2 ++
> iwinfo_cli.c | 11 ++++++++++-
> iwinfo_lua.c | 12 ++++++++++++
> iwinfo_nl80211.c | 4 ++++
> iwinfo_utils.c | 8 ++++++++
> 6 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/include/iwinfo.h b/include/iwinfo.h
> index 5e64294..b07820d 100644
> --- a/include/iwinfo.h
> +++ b/include/iwinfo.h
> @@ -179,6 +179,12 @@ struct iwinfo_scanlist_entry {
> uint8_t quality;
> uint8_t quality_max;
> struct iwinfo_crypto_entry crypto;
> +
> + /* BSS Load */
> + uint8_t has_bss_load;
> + uint8_t station_count;
> + uint8_t channel_utilization;
> + uint8_t admission_capacity;
> };
>
> struct iwinfo_country_entry {
> diff --git a/include/iwinfo/utils.h b/include/iwinfo/utils.h
> index 98b9c89..a71bc9b 100644
> --- a/include/iwinfo/utils.h
> +++ b/include/iwinfo/utils.h
> @@ -53,6 +53,8 @@ struct iwinfo_hardware_entry *
> iwinfo_hardware(struct iwinfo_hardware_id *id);
>
> int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id);
>
> +void iwinfo_parse_bss_load(struct iwinfo_scanlist_entry *e, uint8_t
> *data);
> +
> void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data,
> uint8_t len,
> uint8_t defcipher, uint8_t
> defauth);
>
> diff --git a/iwinfo_cli.c b/iwinfo_cli.c
> index 0332bc2..5949004 100644
> --- a/iwinfo_cli.c
> +++ b/iwinfo_cli.c
> @@ -612,8 +612,17 @@ static void print_scanlist(const struct
> iwinfo_ops *iw, const char *ifname)
> format_signal(e->signal - 0x100),
> format_quality(e->quality),
> format_quality_max(e->quality_max));
> - printf(" Encryption: %s\n\n",
> + printf(" Encryption: %s\n",
> format_encryption(&e->crypto));
> + if (e->has_bss_load) {
> + printf(" Station count: %u\n",
> + e->station_count);
> + printf(" Channel utilization:
> %u/255\n",
> + e->channel_utilization);
> + printf(" Available admission capacity:
> %u (*32us)\n",
> + e->admission_capacity);
> + }
> + printf("\n");
> }
> }
>
> diff --git a/iwinfo_lua.c b/iwinfo_lua.c
> index 58a5537..76160b6 100644
> --- a/iwinfo_lua.c
> +++ b/iwinfo_lua.c
> @@ -434,6 +434,18 @@ static int iwinfo_L_scanlist(lua_State *L, int
> (*func)(const char *, char *, int
> lua_pushnumber(L, (e->signal - 0x100));
> lua_setfield(L, -2, "signal");
>
> + /* BSS load */
> + if (e->has_bss_load) {
> + lua_pushnumber(L, e->station_count);
> + lua_setfield(L, -2, "station_count");
> +
> + lua_pushnumber(L, e-
> >channel_utilization);
> + lua_setfield(L, -2,
> "channel_utilization");
> +
> + lua_pushnumber(L, e-
> >admission_capacity);
> + lua_setfield(L, -2,
> "admission_capacity");
> + }
> +
> /* Crypto */
> iwinfo_L_cryptotable(L, &e->crypto);
> lua_setfield(L, -2, "encryption");
> diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
> index 2b2a043..7463fc7 100644
> --- a/iwinfo_nl80211.c
> +++ b/iwinfo_nl80211.c
> @@ -2296,6 +2296,10 @@ static void nl80211_get_scanlist_ie(struct
> nlattr **bss,
> }
> break;
>
> + case 11: /* BSS Load */
> + iwinfo_parse_bss_load(e, ie + 2);
> + break;
> +
> case 48: /* RSN */
> iwinfo_parse_rsn(&e->crypto, ie + 2, ie[1],
> IWINFO_CIPHER_CCMP,
> IWINFO_KMGMT_8021x);
> diff --git a/iwinfo_utils.c b/iwinfo_utils.c
> index b4f98a9..425492e 100644
> --- a/iwinfo_utils.c
> +++ b/iwinfo_utils.c
> @@ -324,6 +324,14 @@ static void iwinfo_parse_rsn_cipher(uint8_t idx,
> uint8_t *ciphers)
> }
> }
>
> +void iwinfo_parse_bss_load(struct iwinfo_scanlist_entry *e, uint8_t
> *data)
> +{
> + e->has_bss_load = 1;
> + e->station_count = ((data[1] << 8) | data[0]);
> + e->channel_utilization = data[2];
> + e->admission_capacity = ((data[4] << 8) | data[3]);
> +}
> +
> void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data,
> uint8_t len,
> uint8_t defcipher, uint8_t
> defauth)
> {
I get spurious scan results on my tplink a7v5. Reverting 96424c143,
restores normal operation.
Attached is a pdf of the scan panel.
Steve
-------------- next part --------------
A non-text attachment was scrubbed...
Name: scan.pdf
Type: application/pdf
Size: 352155 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20200205/e20b68bb/attachment.pdf>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list