summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2024-11-08 09:07:32 +0000
committerFelix Fietkau2024-11-08 09:07:33 +0000
commit992d33cb42a6e70d98a65f55fb9d000de0fd613b (patch)
tree6a7984a5b2ada3656114169bf21217118814c404
parent4fe997b61d7db047d0c4757202b4e8025debc4d1 (diff)
downloadnetifd-992d33cb42a6e70d98a65f55fb9d000de0fd613b.tar.gz
ubus: add notifications on wireless device state changes
Provide notifications similar to interface state changes Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--ubus.c10
-rw-r--r--ubus.h2
-rw-r--r--wireless.c2
3 files changed, 14 insertions, 0 deletions
diff --git a/ubus.c b/ubus.c
index e46b83d..3c3a7dc 100644
--- a/ubus.c
+++ b/ubus.c
@@ -1417,6 +1417,16 @@ netifd_ubus_interface_notify(struct interface *iface, bool up)
}
void
+netifd_ubus_wireless_notify(struct wireless_device *wdev, bool up)
+{
+ const char *event = (up) ? "wireless.update" : "wireless.down";
+
+ blob_buf_init(&b, 0);
+ wireless_device_status(wdev, &b);
+ ubus_notify(ubus_ctx, &wireless_object, event, b.head, -1);
+}
+
+void
netifd_ubus_add_interface(struct interface *iface)
{
struct ubus_object *obj = &iface->ubus;
diff --git a/ubus.h b/ubus.h
index b9b4b69..89534a7 100644
--- a/ubus.h
+++ b/ubus.h
@@ -14,6 +14,7 @@
#ifndef __NETIFD_UBUS_H
#define __NETIFD_UBUS_H
+struct wireless_device;
typedef void (*procd_data_cb)(struct blob_attr *data);
extern struct ubus_context *ubus_ctx;
@@ -29,5 +30,6 @@ void netifd_ubus_interface_event(struct interface *iface, bool up);
void netifd_ubus_interface_notify(struct interface *iface, bool up);
void netifd_ubus_device_notify(const char *event, struct blob_attr *data, int timeout);
void netifd_ubus_get_procd_data(const char *type, procd_data_cb cb);
+void netifd_ubus_wireless_notify(struct wireless_device *wdev, bool up);
#endif
diff --git a/wireless.c b/wireless.c
index c8b8945..c05bf7d 100644
--- a/wireless.c
+++ b/wireless.c
@@ -602,6 +602,7 @@ wireless_device_mark_down(struct wireless_device *wdev)
wdev->state = IFS_DOWN;
wireless_device_free_state(wdev);
wdev_handle_config_change(wdev);
+ netifd_ubus_wireless_notify(wdev, false);
}
/* timeout callback to protect the tear down */
@@ -671,6 +672,7 @@ wireless_device_mark_up(struct wireless_device *wdev)
vlist_for_each_element(&vif->vlans, vlan, node)
wireless_vlan_handle_link(vlan, true);
}
+ netifd_ubus_wireless_notify(wdev, true);
}
static void