diff options
| author | Felix Fietkau | 2024-11-08 09:07:32 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2024-11-08 09:07:33 +0000 |
| commit | 992d33cb42a6e70d98a65f55fb9d000de0fd613b (patch) | |
| tree | 6a7984a5b2ada3656114169bf21217118814c404 | |
| parent | 4fe997b61d7db047d0c4757202b4e8025debc4d1 (diff) | |
| download | netifd-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.c | 10 | ||||
| -rw-r--r-- | ubus.h | 2 | ||||
| -rw-r--r-- | wireless.c | 2 |
3 files changed, 14 insertions, 0 deletions
@@ -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; @@ -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 @@ -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 |