hostapd: ubus: send notification instead of event
authorDavid Bauer <mail@david-bauer.net>
Tue, 22 Sep 2020 13:25:57 +0000 (15:25 +0200)
committerDavid Bauer <mail@david-bauer.net>
Tue, 22 Sep 2020 15:40:08 +0000 (17:40 +0200)
Rafal Milecki pointed out that ubus events are meant for low-level ubus
events only (e.g. addition or removal of an object). Higher level
events should happen as notifications on the ubus object itself.

Dispatch BSS events on the main hostapd ubus object instead of
publishing them as ubus events.

Signed-off-by: David Bauer <mail@david-bauer.net>
package/network/services/hostapd/Makefile
package/network/services/hostapd/src/src/ap/ubus.c

index ceb6014c4beac509ca4da0d8f1dd35d992f06d8e..372539bd06f73446d378baa8d2fa4619e0093a70 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_RELEASE:=9
+PKG_RELEASE:=10
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
index 9dd263837f48549f7b9154006b894bec75b2bffb..9e407538f7f26368b4240bf9df5b9eecf52529e1 100644 (file)
@@ -108,19 +108,20 @@ void hostapd_ubus_free_iface(struct hostapd_iface *iface)
                return;
 }
 
-static void hostapd_send_ubus_event(char *bssname, char *event)
+static void hostapd_notify_ubus(struct ubus_object *obj, char *bssname, char *event)
 {
-       char *name;
+       char *event_type;
 
-       if (!ctx)
+       if (!ctx || !obj)
                return;
 
-       if (asprintf(&name, "hostapd.%s.%s", bssname, event) < 0)
+       if (asprintf(&event_type, "bss.%s", event) < 0)
                return;
 
        blob_buf_init(&b, 0);
-       ubus_send_event(ctx, name, b.head);
-       free(name);
+       blobmsg_add_string(&b, "name", bssname);
+       ubus_notify(ctx, obj, event_type, b.head, -1);
+       free(event_type);
 }
 
 static void hostapd_send_procd_event(char *bssname, char *event)
@@ -149,10 +150,10 @@ static void hostapd_send_procd_event(char *bssname, char *event)
        free(name);
 }
 
-static void hostapd_send_shared_event(char *bssname, char *event)
+static void hostapd_send_shared_event(struct ubus_object *obj, char *bssname, char *event)
 {
        hostapd_send_procd_event(bssname, event);
-       hostapd_send_ubus_event(bssname, event);
+       hostapd_notify_ubus(obj, bssname, event);
 }
 
 static void
@@ -201,7 +202,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_shared_event(hapd->conf->iface, "reload");
+       hostapd_send_shared_event(&hapd->iface->interfaces->ubus, hapd->conf->iface, "reload");
        return ret;
 }
 
@@ -1136,7 +1137,7 @@ void hostapd_ubus_add_bss(struct hostapd_data *hapd)
        ret = ubus_add_object(ctx, obj);
        hostapd_ubus_ref_inc();
 
-       hostapd_send_shared_event(hapd->conf->iface, "add");
+       hostapd_send_shared_event(&hapd->iface->interfaces->ubus, hapd->conf->iface, "add");
 }
 
 void hostapd_ubus_free_bss(struct hostapd_data *hapd)
@@ -1147,7 +1148,7 @@ void hostapd_ubus_free_bss(struct hostapd_data *hapd)
        if (!ctx)
                return;
 
-       hostapd_send_shared_event(hapd->conf->iface, "remove");
+       hostapd_send_shared_event(&hapd->iface->interfaces->ubus, hapd->conf->iface, "remove");
 
        if (obj->id) {
                ubus_remove_object(ctx, obj);