[OpenWrt-Devel] [PATCH 2/3] rpcd, iwinfo: add support for vendor_elements

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


Signed-off-by: Roman Yeryomin <roman at advem.lv>
---
 iwinfo.c | 41 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/iwinfo.c b/iwinfo.c
index 325c07a..6e34ea1 100644
--- a/iwinfo.c
+++ b/iwinfo.c
@@ -317,6 +317,41 @@ rpc_iwinfo_info(struct ubus_context *ctx, struct ubus_object *obj,
 	return UBUS_STATUS_OK;
 }
 
+static void
+rpc_iwinfo_add_ve(const char *name, struct iwinfo_scanlist_entry *e)
+{
+	void *c, *d;
+	char oui[7];
+	char *data = NULL;
+	int datalen, i, di;
+
+	d = blobmsg_open_array(&buf, name);
+	for (i = 0; i < IWINFO_VE_MAX; i++) {
+		if (e->ve[i].len < 1)
+			break;
+		c = blobmsg_open_table(&buf, NULL);
+
+		snprintf(oui, sizeof(oui), "%02x%02x%02x", e->ve[i].oui[0],
+							   e->ve[i].oui[1],
+							   e->ve[i].oui[2]);
+		blobmsg_add_string(&buf, "oui", oui);
+
+		datalen = e->ve[i].len * 2;
+		data = (char *)malloc(datalen + 1);
+		if (!data) {
+			blobmsg_close_table(&buf, c);
+			break;
+		}
+		for (di = 0; di < e->ve[i].len - sizeof(e->ve[i].oui); di++)
+			snprintf(data + di * 2, 3, "%02x", e->ve[i].data[di]);
+		blobmsg_add_string(&buf, "data", data);
+		free(data);
+
+		blobmsg_close_table(&buf, c);
+	}
+	blobmsg_close_array(&buf, d);
+}
+
 static int
 rpc_iwinfo_scan(struct ubus_context *ctx, struct ubus_object *obj,
                 struct ubus_request_data *req, const char *method,
@@ -325,7 +360,7 @@ rpc_iwinfo_scan(struct ubus_context *ctx, struct ubus_object *obj,
 	int i, rv, len;
 	void *c, *d;
 	char mac[18];
-	char res[IWINFO_BUFSIZE];
+	char res[IWINFO_MAX_APS * sizeof(struct iwinfo_scanlist_entry)];
 	struct iwinfo_scanlist_entry *e;
 
 	rv = rpc_iwinfo_open(msg);
@@ -363,6 +398,10 @@ rpc_iwinfo_scan(struct ubus_context *ctx, struct ubus_object *obj,
 
 			rpc_iwinfo_add_encryption("encryption", &e->crypto);
 
+			/* add vendor elements if exist */
+			if (e->ve[0].len)
+				rpc_iwinfo_add_ve("vendor_elements", e);
+
 			blobmsg_close_table(&buf, d);
 		}
 	}
-- 
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