[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