aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/src
diff options
context:
space:
mode:
authorDavid Bauer <mail@david-bauer.net>2022-03-31 22:39:04 +0200
committerDavid Bauer <mail@david-bauer.net>2022-04-08 01:19:29 +0200
commitf6445cfa1acb32676723c49da3e3158b64a4b3d2 (patch)
treeda7f507fa3a96e5d64e945164ea807b18b3aa1cd /package/network/services/hostapd/src
parent965aa33a18c76bb2d5a1eeb0cfa01501b08e784a (diff)
downloadupstream-f6445cfa1acb32676723c49da3e3158b64a4b3d2.tar.gz
upstream-f6445cfa1acb32676723c49da3e3158b64a4b3d2.tar.bz2
upstream-f6445cfa1acb32676723c49da3e3158b64a4b3d2.zip
hostapd: add ubus link-measurements notifications
Notify external ubus subscribers of received link-measurement reports. Signed-off-by: David Bauer <mail@david-bauer.net>
Diffstat (limited to 'package/network/services/hostapd/src')
-rw-r--r--package/network/services/hostapd/src/src/ap/ubus.c28
-rw-r--r--package/network/services/hostapd/src/src/ap/ubus.h5
2 files changed, 33 insertions, 0 deletions
diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c
index 5aad5a7dd5..fa325ea6e5 100644
--- a/package/network/services/hostapd/src/src/ap/ubus.c
+++ b/package/network/services/hostapd/src/src/ap/ubus.c
@@ -1412,6 +1412,34 @@ hostapd_rrm_lm_req(struct ubus_context *ctx, struct ubus_object *obj,
}
+void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len)
+{
+ const struct ieee80211_mgmt *mgmt = (const struct ieee80211_mgmt *) data;
+ const u8 *pos, *end;
+ u8 token;
+
+ end = data + len;
+ token = mgmt->u.action.u.rrm.dialog_token;
+ pos = mgmt->u.action.u.rrm.variable;
+
+ if (end - pos < 8)
+ return;
+
+ if (!hapd->ubus.obj.has_subscribers)
+ return;
+
+ blob_buf_init(&b, 0);
+ blobmsg_add_macaddr(&b, "address", mgmt->sa);
+ blobmsg_add_u16(&b, "dialog-token", token);
+ blobmsg_add_u16(&b, "rx-antenna-id", pos[4]);
+ blobmsg_add_u16(&b, "tx-antenna-id", pos[5]);
+ blobmsg_add_u16(&b, "rcpi", pos[6]);
+ blobmsg_add_u16(&b, "rsni", pos[7]);
+
+ ubus_notify(ctx, &hapd->ubus.obj, "link-measurement-report", b.head, -1);
+}
+
+
#ifdef CONFIG_WNM_AP
static int
diff --git a/package/network/services/hostapd/src/src/ap/ubus.h b/package/network/services/hostapd/src/src/ap/ubus.h
index f1bc093e57..5a33b624d0 100644
--- a/package/network/services/hostapd/src/src/ap/ubus.h
+++ b/package/network/services/hostapd/src/src/ap/ubus.h
@@ -47,6 +47,7 @@ void hostapd_ubus_add_vlan(struct hostapd_data *hapd, struct hostapd_vlan *vlan)
void hostapd_ubus_remove_vlan(struct hostapd_data *hapd, struct hostapd_vlan *vlan);
int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct hostapd_ubus_request *req);
+void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len);
void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac);
void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd,
const u8 *addr, u8 token, u8 rep_mode,
@@ -98,6 +99,10 @@ static inline int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct ho
return 0;
}
+static inline void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len)
+{
+}
+
static inline void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac)
{
}