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>
uint8_t quality;
uint8_t quality_max;
struct iwinfo_crypto_entry crypto;
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 {
};
struct iwinfo_country_entry {
int iwinfo_hardware_id_from_mtd(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);
void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data, uint8_t len,
uint8_t defcipher, uint8_t defauth);
format_signal(e->signal - 0x100),
format_quality(e->quality),
format_quality_max(e->quality_max));
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));
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");
lua_pushnumber(L, (e->signal - 0x100));
lua_setfield(L, -2, "signal");
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");
/* Crypto */
iwinfo_L_cryptotable(L, &e->crypto);
lua_setfield(L, -2, "encryption");
+ 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);
case 48: /* RSN */
iwinfo_parse_rsn(&e->crypto, ie + 2, ie[1],
IWINFO_CIPHER_CCMP, IWINFO_KMGMT_8021x);
+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)
{
void iwinfo_parse_rsn(struct iwinfo_crypto_entry *c, uint8_t *data, uint8_t len,
uint8_t defcipher, uint8_t defauth)
{