iwinfo: add 802.11ac hwmode support
[openwrt.git] / package / network / utils / iwinfo / src / iwinfo_nl80211.c
index 8e58589..4a52d5c 100644 (file)
@@ -2159,6 +2159,7 @@ static int nl80211_get_hwmodelist_cb(struct nl_msg *msg, void *arg)
        int *modes = arg;
        int bands_remain, freqs_remain;
        uint16_t caps = 0;
+       uint32_t vht_caps = 0;
        struct nlattr **attr = nl80211_parse(msg);
        struct nlattr *bands[NL80211_BAND_ATTR_MAX + 1];
        struct nlattr *freqs[NL80211_FREQUENCY_ATTR_MAX + 1];
@@ -2180,6 +2181,13 @@ static int nl80211_get_hwmodelist_cb(struct nl_msg *msg, void *arg)
                        if (caps > 0)
                                *modes |= IWINFO_80211_N;
 
+                       if (bands[NL80211_BAND_ATTR_VHT_CAPA])
+                               vht_caps = nla_get_u32(bands[NL80211_BAND_ATTR_VHT_CAPA]);
+
+                       /* Treat any nonzero capability as 11ac */
+                       if (vht_caps > 0)
+                               *modes |= IWINFO_80211_AC;
+
                        nla_for_each_nested(freq, bands[NL80211_BAND_ATTR_FREQS],
                                            freqs_remain)
                        {
@@ -2194,7 +2202,7 @@ static int nl80211_get_hwmodelist_cb(struct nl_msg *msg, void *arg)
                                        *modes |= IWINFO_80211_B;
                                        *modes |= IWINFO_80211_G;
                                }
-                               else
+                               else if (!(*modes & IWINFO_80211_AC))
                                {
                                        *modes |= IWINFO_80211_A;
                                }