In case of .11ac device the hwmode was not properly displayed.
This patch fixes it.

Signed-off-by: Marek Kwaczynski <marek.kwaczyn...@tieto.com>
Signed-off-by: Bartosz Markowski <bartosz.markow...@tieto.com>
---
 package/network/utils/iwinfo/src/include/iwinfo.h |    1 +
 package/network/utils/iwinfo/src/iwinfo_cli.c     |    5 +++--
 package/network/utils/iwinfo/src/iwinfo_nl80211.c |   10 +++++++++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/package/network/utils/iwinfo/src/include/iwinfo.h 
b/package/network/utils/iwinfo/src/include/iwinfo.h
index ebea319..f5f04f5 100644
--- a/package/network/utils/iwinfo/src/include/iwinfo.h
+++ b/package/network/utils/iwinfo/src/include/iwinfo.h
@@ -27,6 +27,7 @@
 #define IWINFO_80211_B       (1 << 1)
 #define IWINFO_80211_G       (1 << 2)
 #define IWINFO_80211_N       (1 << 3)
+#define IWINFO_80211_AC      (1 << 4)
 
 #define IWINFO_CIPHER_NONE   (1 << 0)
 #define IWINFO_CIPHER_WEP40  (1 << 1)
diff --git a/package/network/utils/iwinfo/src/iwinfo_cli.c 
b/package/network/utils/iwinfo/src/iwinfo_cli.c
index 87cc10f..891f77e 100644
--- a/package/network/utils/iwinfo/src/iwinfo_cli.c
+++ b/package/network/utils/iwinfo/src/iwinfo_cli.c
@@ -268,11 +268,12 @@ static char * format_hwmodes(int modes)
        if (modes <= 0)
                snprintf(buf, sizeof(buf), "unknown");
        else
-               snprintf(buf, sizeof(buf), "802.11%s%s%s%s",
+               snprintf(buf, sizeof(buf), "802.11%s%s%s%s%s",
                        (modes & IWINFO_80211_A) ? "a" : "",
                        (modes & IWINFO_80211_B) ? "b" : "",
                        (modes & IWINFO_80211_G) ? "g" : "",
-                       (modes & IWINFO_80211_N) ? "n" : "");
+                       (modes & IWINFO_80211_N) ? "n" : "",
+                       (modes & IWINFO_80211_AC) ? "ac" : "");
 
        return buf;
 }
diff --git a/package/network/utils/iwinfo/src/iwinfo_nl80211.c 
b/package/network/utils/iwinfo/src/iwinfo_nl80211.c
index a258d2f..233c1de 100644
--- a/package/network/utils/iwinfo/src/iwinfo_nl80211.c
+++ b/package/network/utils/iwinfo/src/iwinfo_nl80211.c
@@ -2152,6 +2152,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];
@@ -2173,6 +2174,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)
                        {
@@ -2187,7 +2195,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;
                                }
-- 
1.7.10
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to