Browse Source

iwinfo: add 802.11ac hwmode support

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

Signed-off-by: Marek Kwaczynski <[email protected]>
Signed-off-by: Bartosz Markowski <[email protected]>

SVN-Revision: 40953
John Crispin 11 years ago
parent
commit
f3aa8a8cf4

+ 1 - 0
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)

+ 3 - 2
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;
 }

+ 9 - 1
package/network/utils/iwinfo/src/iwinfo_nl80211.c

@@ -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;
 				}