Decode VHTCAP, VHTINFO and BSSLOAD.

BSSLOAD is based on work from Idwer Vollering.

Obtained from:	Idwer Vollering <vidwer@gmail.com> (bssload)
This commit is contained in:
Adrian Chadd 2016-03-18 03:55:57 +00:00
parent e426a812db
commit f6759842d9

View File

@ -2533,6 +2533,45 @@ printwmeinfo(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
}
}
static void
printvhtcap(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
{
printf("%s", tag);
if (verbose) {
const struct ieee80211_ie_vhtcap *vhtcap =
(const struct ieee80211_ie_vhtcap *) ie;
uint32_t vhtcap_info = LE_READ_4(&vhtcap->vht_cap_info);
printf("<cap 0x%08x", vhtcap_info);
printf(" rx_mcs_map 0x%x",
LE_READ_2(&vhtcap->supp_mcs.rx_mcs_map));
printf(" rx_highest %d",
LE_READ_2(&vhtcap->supp_mcs.rx_highest) & 0x1fff);
printf(" tx_mcs_map 0x%x",
LE_READ_2(&vhtcap->supp_mcs.tx_mcs_map));
printf(" tx_highest %d",
LE_READ_2(&vhtcap->supp_mcs.tx_highest) & 0x1fff);
printf(">");
}
}
static void
printvhtinfo(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
{
printf("%s", tag);
if (verbose) {
const struct ieee80211_ie_vht_operation *vhtinfo =
(const struct ieee80211_ie_vht_operation *) ie;
printf("<chw %d freq1_idx %d freq2_idx %d basic_mcs_set 0x%04x>",
vhtinfo->chan_width,
vhtinfo->center_freq_seg1_idx,
vhtinfo->center_freq_seg2_idx,
LE_READ_2(&vhtinfo->basic_mcs_set));
}
}
static void
printhtcap(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
{
@ -2674,6 +2713,20 @@ do { \
#undef MATCHOUI
}
static void
printbssload(const char *tag, const uint8_t *ie, size_t ielen, int maxlen)
{
printf("%s", tag);
if (verbose) {
const struct ieee80211_bss_load_ie *bssload =
(const struct ieee80211_bss_load_ie *) ie;
printf("<sta count %d, chan load %d, aac %d>",
LE_READ_2(&bssload->sta_count),
bssload->chan_load,
bssload->aac);
}
}
static const char *
wpa_cipher(const u_int8_t *sel)
{
@ -3154,6 +3207,15 @@ printies(const u_int8_t *vp, int ielen, int maxcols)
case IEEE80211_ELEMID_MESHCONF:
printmeshconf(" MESHCONF", vp, 2+vp[1], maxcols);
break;
case IEEE80211_ELEMID_VHT_CAP:
printvhtcap(" VHTCAP", vp, 2+vp[1], maxcols);
break;
case IEEE80211_ELEMID_VHT_OPMODE:
printvhtinfo(" VHTOPMODE", vp, 2+vp[1], maxcols);
break;
case IEEE80211_ELEMID_BSSLOAD:
printbssload(" BSSLOAD", vp, 2+vp[1], maxcols);
break;
default:
if (verbose)
printie(iename(vp[0]), vp, 2+vp[1], maxcols);