Hi, Sorry this took forever to bubble up on my list again ... > +static void print_eht_capa(const uint8_t type, uint8_t len, const uint8_t *data, > + const struct print_ies_data *ie_buffer) > +{ > + bool is_he = false; > + const __u16 he_phy_cap[6] = { 0 }; > + unsigned char *ie = ie_buffer->ie; > + int ielen = ie_buffer->ielen; > + > + while (ielen >= 2 && ielen >= ie[1]) { > + if (ie[0] == 255 && ie[2] == 35) { > + is_he = true; > + break; > + } > + ielen -= ie[1] + 2; > + ie += ie[1] + 2; > + } > + > + if (is_he) { > + memcpy(&((__u8 *)he_phy_cap)[0], > + ie + 9, 12); > + } Hm, at the very least, that could be a helper; at first I was wondering what you even did there :) Also, even if I see that this exists in print_capabilities(), I'm really not convinced this is a good idea. In the print_capabilities() case it should probably just print max A-MSDU anyway (or "(reserved for non- VHT)" with it perhaps). Either way, we end up double-parsing this which isn't great... Also, you go to great lengths to get it, and then comment out the usage of it below? Not really sure what we should do instead - perhaps more 'elems' style parsing like mac80211 does, and then print that way. Clearly we can't simply iterate any more. > @@ -2639,8 +2667,7 @@ static int print_bss_handler(struct nl_msg *msg, void *arg) > nla_len(ies))))) > printf("\tInformation elements from Probe Response " > "frame:\n"); > - print_ies(nla_data(ies), nla_len(ies), > - params->unknown, params->type); > + print_ies(nla_data(ies), nla_len(ies), params->unknown, params->type); why? > - if (!(he_phy_cap[0] & ((BIT(2) | BIT(3) | BIT(4)) << 8))){ > + /*if (!(he_phy_cap[0] & ((BIT(2) | BIT(3) | BIT(4)) << 8))){ Don't leave commented out stuff. johannes