ubus: notify on network updates
authorFelix Fietkau <nbd@nbd.name>
Fri, 16 Sep 2022 16:38:08 +0000 (18:38 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 16 Sep 2022 16:55:16 +0000 (18:55 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
network.c
ubus.c
ubus.h

index cb3e94b5e03e91931c497524fc3cad98d95fa279..44defdc56b750f98fcea634e841c9a4dc2444257 100644 (file)
--- a/network.c
+++ b/network.c
@@ -424,6 +424,7 @@ static void network_reload(struct uloop_timeout *t)
        unetd_write_hosts();
        network_do_update(net, true);
        network_pex_open(net);
+       unetd_ubus_notify(net);
 }
 
 void network_soft_reload(struct network *net)
diff --git a/ubus.c b/ubus.c
index df45a546adc68d5c804bc11bd3510fd0128ba466..4cac0842911e61959bef281ec75533c7162918dd 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -295,6 +295,13 @@ ubus_connect_handler(struct ubus_context *ctx)
                fprintf(stderr, "Failed to add object: %s\n", ubus_strerror(ret));
 }
 
+void unetd_ubus_notify(struct network *net)
+{
+       blob_buf_init(&b, 0);
+       blobmsg_add_string(&b, "network", network_name(net));
+       ubus_notify(&conn.ctx, &unetd_object, "network_update", b.head, -1);
+}
+
 void unetd_ubus_netifd_update(struct blob_attr *data)
 {
        uint32_t id;
diff --git a/ubus.h b/ubus.h
index dfc0fa1b87aa79f96c0166199d77f1a517680be7..e18eaa8f162a4439e9d1bec28f05ad850dbf1a83 100644 (file)
--- a/ubus.h
+++ b/ubus.h
@@ -7,12 +7,16 @@
 
 #ifdef UBUS_SUPPORT
 void unetd_ubus_init(void);
+void unetd_ubus_notify(struct network *net);
 void unetd_ubus_netifd_update(struct blob_attr *data);
 void unetd_ubus_netifd_add_route(struct network *net, union network_endpoint *ep);
 #else
 static inline void unetd_ubus_init(void)
 {
 }
+static inline void unetd_ubus_notify(struct network *net)
+{
+}
 static inline void unetd_ubus_netifd_update(struct blob_attr *data)
 {
 }