aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bauer <mail@david-bauer.net>2020-09-18 01:11:13 +0200
committerDavid Bauer <mail@david-bauer.net>2020-09-21 21:26:12 +0200
commit6254af0c379901c1b975373bb090fca169e49fa2 (patch)
treedcd634c5f9264511ea4118a542171951d47d4681
parentec80139629f1087d67f5956caf92b2320c5b54e9 (diff)
downloadupstream-6254af0c379901c1b975373bb090fca169e49fa2.tar.gz
upstream-6254af0c379901c1b975373bb090fca169e49fa2.tar.bz2
upstream-6254af0c379901c1b975373bb090fca169e49fa2.zip
hostapd: send ubus event on BSS update
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@david-bauer.net>
-rw-r--r--package/network/services/hostapd/Makefile2
-rw-r--r--package/network/services/hostapd/src/src/ap/ubus.c24
2 files changed, 24 insertions, 2 deletions
diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index 8c264854d7..e273e9e7d3 100644
--- a/package/network/services/hostapd/Makefile
+++ b/package/network/services/hostapd/Makefile
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hostapd
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE_URL:=http://w1.fi/hostap.git
PKG_SOURCE_PROTO:=git
diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c
index aeea310594..4753ff4388 100644
--- a/package/network/services/hostapd/src/src/ap/ubus.c
+++ b/package/network/services/hostapd/src/src/ap/ubus.c
@@ -108,6 +108,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)
{
@@ -152,7 +167,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
@@ -1086,6 +1104,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)
@@ -1096,6 +1116,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();