1
0
mirror of https://git.openwrt.org/openwrt/openwrt.git synced 2024-10-19 22:18:16 +02:00

hostapd: send procd event on BSS update

Dispatch ubus events also to procd in order to trigger service reloads
on hostapd updates.

Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
David Bauer 2020-09-18 15:53:16 +02:00
parent 6254af0c37
commit 8e7aa739fb
2 changed files with 36 additions and 4 deletions

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hostapd
PKG_RELEASE:=7
PKG_RELEASE:=8
PKG_SOURCE_URL:=http://w1.fi/hostap.git
PKG_SOURCE_PROTO:=git

@ -123,6 +123,38 @@ static void hostapd_send_ubus_event(char *bssname, char *event)
free(name);
}
static void hostapd_send_procd_event(char *bssname, char *event)
{
char *name, *s;
uint32_t id;
void *v;
if (!ctx || ubus_lookup_id(ctx, "service", &id))
return;
if (asprintf(&name, "hostapd.%s.%s", bssname, event) < 0)
return;
blob_buf_init(&b, 0);
s = blobmsg_alloc_string_buffer(&b, "type", strlen(name) + 1);
sprintf(s, "%s", name);
blobmsg_add_string_buffer(&b);
v = blobmsg_open_table(&b, "data");
blobmsg_close_table(&b, v);
ubus_invoke(ctx, id, "event", b.head, NULL, NULL, 1000);
free(name);
}
static void hostapd_send_shared_event(char *bssname, char *event)
{
hostapd_send_procd_event(bssname, event);
hostapd_send_ubus_event(bssname, event);
}
static void
hostapd_bss_del_ban(void *eloop_data, void *user_ctx)
{
@ -169,7 +201,7 @@ hostapd_bss_reload(struct ubus_context *ctx, struct ubus_object *obj,
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
int ret = hostapd_reload_config(hapd->iface, 1);
hostapd_send_ubus_event(hapd->conf->iface, "reload");
hostapd_send_shared_event(hapd->conf->iface, "reload");
return ret;
}
@ -1105,7 +1137,7 @@ void hostapd_ubus_add_bss(struct hostapd_data *hapd)
ret = ubus_add_object(ctx, obj);
hostapd_ubus_ref_inc();
hostapd_send_ubus_event(hapd->conf->iface, "add");
hostapd_send_shared_event(hapd->conf->iface, "add");
}
void hostapd_ubus_free_bss(struct hostapd_data *hapd)
@ -1116,7 +1148,7 @@ void hostapd_ubus_free_bss(struct hostapd_data *hapd)
if (!ctx)
return;
hostapd_send_ubus_event(hapd->conf->iface, "remove");
hostapd_send_shared_event(hapd->conf->iface, "remove");
if (obj->id) {
ubus_remove_object(ctx, obj);