[PATCH] hostapd: send ubus event on BSS update

David Bauer mail at david-bauer.net
Fri Sep 18 07:57:19 EDT 2020


hostapd will emit a ubus event with the eventname hostapd.<ifname>.<event>
when adding, removing or reloading a BSS.

This way, services which install state (for example the RMM neighbor
list) can on-demand reinstall this information for the BSS without
polling this state.

Signed-off-by: David Bauer <mail at david-bauer.net>
---
 .../services/hostapd/src/src/ap/ubus.c        | 24 ++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c
index d27ece7366..bfce641a75 100644
--- a/package/network/services/hostapd/src/src/ap/ubus.c
+++ b/package/network/services/hostapd/src/src/ap/ubus.c
@@ -111,6 +111,21 @@ void hostapd_ubus_free_iface(struct hostapd_iface *iface)
 		return;
 }
 
+static void hostapd_send_ubus_event(char *bssname, char *event)
+{
+	char *name;
+
+	if (!ctx)
+		return;
+
+	if (asprintf(&name, "hostapd.%s.%s", bssname, event) < 0)
+		return;
+
+	blob_buf_init(&b, 0);
+	ubus_send_event(ctx, name, b.head);
+	free(name);
+}
+
 static void
 hostapd_bss_del_ban(void *eloop_data, void *user_ctx)
 {
@@ -155,7 +170,10 @@ hostapd_bss_reload(struct ubus_context *ctx, struct ubus_object *obj,
 		   struct blob_attr *msg)
 {
 	struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
-	return hostapd_reload_config(hapd->iface, 1);
+	int ret = hostapd_reload_config(hapd->iface, 1);
+
+	hostapd_send_ubus_event(hapd->conf->iface, "reload");
+	return ret;
 }
 
 static int
@@ -1181,6 +1199,8 @@ void hostapd_ubus_add_bss(struct hostapd_data *hapd)
 	obj->n_methods = bss_object_type.n_methods;
 	ret = ubus_add_object(ctx, obj);
 	hostapd_ubus_ref_inc();
+
+	hostapd_send_ubus_event(hapd->conf->iface, "add");
 }
 
 void hostapd_ubus_free_bss(struct hostapd_data *hapd)
@@ -1191,6 +1211,8 @@ void hostapd_ubus_free_bss(struct hostapd_data *hapd)
 	if (!ctx)
 		return;
 
+	hostapd_send_ubus_event(hapd->conf->iface, "remove");
+
 	if (obj->id) {
 		ubus_remove_object(ctx, obj);
 		hostapd_ubus_ref_dec();
-- 
2.28.0




More information about the openwrt-devel mailing list