iwinfo: add BSS load element to scan result
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@david-bauer.net>
This commit is contained in:
parent
bb21698295
commit
a6914dc0dc
6 changed files with 42 additions and 1 deletions
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
11
iwinfo_cli.c
11
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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
12
iwinfo_lua.c
12
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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue