[OpenWrt-Devel] [PATCH 1/3] iwinfo, nl80211: add support for vendor_elements

Roman Yeryomin leroi.lists at gmail.com
Wed May 13 07:56:56 EDT 2015


Signed-off-by: Roman Yeryomin <roman at advem.lv>
---
 include/iwinfo.h | 9 +++++++++
 iwinfo_cli.c     | 2 +-
 iwinfo_nl80211.c | 7 +++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/include/iwinfo.h b/include/iwinfo.h
index 95020a4..856525e 100644
--- a/include/iwinfo.h
+++ b/include/iwinfo.h
@@ -21,7 +21,9 @@
 
 
 #define IWINFO_BUFSIZE	24 * 1024
+#define IWINFO_MAX_APS		100
 #define IWINFO_ESSID_MAX_SIZE	32
+#define IWINFO_VE_MAX		10
 
 #define IWINFO_80211_A       (1 << 0)
 #define IWINFO_80211_B       (1 << 1)
@@ -119,6 +121,12 @@ struct iwinfo_crypto_entry {
 	uint8_t auth_algs;
 };
 
+struct iwinfo_ve_entry {
+	uint8_t len;
+	uint8_t oui[3];
+	uint8_t data[255];
+};
+
 struct iwinfo_scanlist_entry {
 	uint8_t mac[6];
 	uint8_t ssid[IWINFO_ESSID_MAX_SIZE+1];
@@ -128,6 +136,7 @@ struct iwinfo_scanlist_entry {
 	uint8_t quality;
 	uint8_t quality_max;
 	struct iwinfo_crypto_entry crypto;
+	struct iwinfo_ve_entry ve[IWINFO_VE_MAX];
 };
 
 struct iwinfo_country_entry {
diff --git a/iwinfo_cli.c b/iwinfo_cli.c
index ed6be54..85f232a 100644
--- a/iwinfo_cli.c
+++ b/iwinfo_cli.c
@@ -565,7 +565,7 @@ static void print_info(const struct iwinfo_ops *iw, const char *ifname)
 static void print_scanlist(const struct iwinfo_ops *iw, const char *ifname)
 {
 	int i, x, len;
-	char buf[IWINFO_BUFSIZE];
+	char buf[IWINFO_MAX_APS * sizeof(struct iwinfo_scanlist_entry)];
 	struct iwinfo_scanlist_entry *e;
 
 	if (iw->scanlist(ifname, buf, &len))
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index efc58e6..8c595cd 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -1859,6 +1859,7 @@ static void nl80211_get_scanlist_ie(struct nlattr **bss,
 	unsigned char *ie = nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]);
 	static unsigned char ms_oui[3] = { 0x00, 0x50, 0xf2 };
 	int len;
+	int vei = 0;
 
 	while (ielen >= 2 && ielen >= ie[1])
 	{
@@ -1876,6 +1877,12 @@ static void nl80211_get_scanlist_ie(struct nlattr **bss,
 			break;
 
 		case 221: /* Vendor */
+			if (ie[1] >= 4 && vei < IWINFO_VE_MAX) {
+				e->ve[vei].len = ie[1];
+				memcpy(e->ve[vei].oui, ie + 2, 3);
+				memcpy(e->ve[vei].data, ie + 5, ie[1] - 3);
+				vei++;
+			}
 			if (ie[1] >= 4 && !memcmp(ie + 2, ms_oui, 3) && ie[5] == 1)
 				iwinfo_parse_rsn(&e->crypto, ie + 6, ie[1] - 4,
 				                 IWINFO_CIPHER_TKIP, IWINFO_KMGMT_PSK);
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list