diff options
author | David Bauer <mail@david-bauer.net> | 2020-09-18 01:11:13 +0200 |
---|---|---|
committer | David Bauer <mail@david-bauer.net> | 2020-09-21 21:26:12 +0200 |
commit | 6254af0c379901c1b975373bb090fca169e49fa2 (patch) | |
tree | dcd634c5f9264511ea4118a542171951d47d4681 /package/network/services/hostapd/src | |
parent | ec80139629f1087d67f5956caf92b2320c5b54e9 (diff) | |
download | upstream-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>
Diffstat (limited to 'package/network/services/hostapd/src')
-rw-r--r-- | package/network/services/hostapd/src/src/ap/ubus.c | 24 |
1 files changed, 23 insertions, 1 deletions
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(); |