From 4d0b24cd72cb998cefc0691b56213bc8104e524c Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 16 Oct 2020 23:42:35 +0200 Subject: [PATCH] hostapd: ubus: pass raw IEs to ubus --- .../services/hostapd/patches/600-ubus_support.patch | 12 +++++++++++- package/network/services/hostapd/src/src/ap/ubus.c | 10 ++++++++++ package/network/services/hostapd/src/src/ap/ubus.h | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch index 7c6c5e3814..517bdca307 100644 --- a/package/network/services/hostapd/patches/600-ubus_support.patch +++ b/package/network/services/hostapd/patches/600-ubus_support.patch @@ -193,7 +193,17 @@ if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && ssi_signal < hapd->iconf->rssi_ignore_probe_request) -@@ -1105,6 +1111,12 @@ void handle_probe_req(struct hostapd_dat +@@ -882,6 +888,9 @@ void handle_probe_req(struct hostapd_dat + if (!hapd->conf->send_probe_response) + return; + ++ req.raw_elems = ie; ++ req.raw_elems_len = ie_len; ++ + if (ieee802_11_parse_elems(ie, ie_len, &elems, 0) == ParseFailed) { + wpa_printf(MSG_DEBUG, "Could not parse ProbeReq from " MACSTR, + MAC2STR(mgmt->sa)); +@@ -1038,6 +1047,12 @@ void handle_probe_req(struct hostapd_dat } #endif /* CONFIG_P2P */ diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c index 622eab8838..9ecae05e99 100644 --- a/package/network/services/hostapd/src/src/ap/ubus.c +++ b/package/network/services/hostapd/src/src/ap/ubus.c @@ -1887,6 +1887,8 @@ int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct hostapd_ubus_req const char *type = "mgmt"; struct ubus_event_req ureq = {}; const u8 *addr; + char *ie_str; + int i; if (req->mgmt_frame) addr = req->mgmt_frame->sa; @@ -1910,6 +1912,14 @@ int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct hostapd_ubus_req if (req->ssi_signal) blobmsg_add_u32(&b, "signal", req->ssi_signal); blobmsg_add_u32(&b, "freq", hapd->iface->freq); + + /* Add raw IEs */ + if (req->raw_elems_len > 0) { + ie_str = blobmsg_alloc_string_buffer(&b, "information_elements", req->raw_elems_len * 2 + 1); + for (i = 0; i < req->raw_elems_len; i++) + snprintf(&ie_str[i*2], 3, "%02X", (unsigned char)req->raw_elems[i]); + blobmsg_add_string_buffer(&b); + } if (req->elems) { if(req->elems->ht_capabilities) diff --git a/package/network/services/hostapd/src/src/ap/ubus.h b/package/network/services/hostapd/src/src/ap/ubus.h index 5a33b624d0..0942180d82 100644 --- a/package/network/services/hostapd/src/src/ap/ubus.h +++ b/package/network/services/hostapd/src/src/ap/ubus.h @@ -19,6 +19,8 @@ struct hostapd_ubus_request { enum hostapd_ubus_event_type type; const struct ieee80211_mgmt *mgmt_frame; const struct ieee802_11_elems *elems; + size_t raw_elems_len; + const u8 *raw_elems; int ssi_signal; /* dBm */ const u8 *addr; }; -- 2.30.2