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 {
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);
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");
}
}
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");
}
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);
}
}
+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)
{