hostapd: report radar detected events via ubus
authorFelix Fietkau <nbd@nbd.name>
Tue, 18 May 2021 14:08:59 +0000 (16:08 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 26 May 2021 09:48:14 +0000 (11:48 +0200)
Events are reported on all BSS interfaces

Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/network/services/hostapd/patches/600-ubus_support.patch
package/network/services/hostapd/src/src/ap/ubus.c
package/network/services/hostapd/src/src/ap/ubus.h

index 0d1cb2c3e48b8139e3acb6b0d30147cc4b5cdf85..8d9d3eb7c157985e53a15049449d70faf092111d 100644 (file)
        return hostapd_vlan_if_remove(hapd, vlan->ifname);
  }
  
+--- a/src/ap/dfs.c
++++ b/src/ap/dfs.c
+@@ -1179,6 +1179,8 @@ int hostapd_dfs_radar_detected(struct ho
+               "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
+               freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
++      hostapd_ubus_notify_radar_detected(iface, freq, chan_width, cf1, cf2);
++
+       /* Proceed only if DFS is not offloaded to the driver */
+       if (iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD)
+               return 0;
index bfa44e291539b5f9395062024fdca2744bd8d587..7cc2059fc1574b5d899e6a33b4672e8d086bd7ea 100644 (file)
@@ -1593,3 +1593,24 @@ void hostapd_ubus_notify_beacon_report(
 
        ubus_notify(ctx, &hapd->ubus.obj, "beacon-report", b.head, -1);
 }
+
+void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency,
+                                       int chan_width, int cf1, int cf2)
+{
+       struct hostapd_data *hapd;
+       int i;
+
+       if (!hapd->ubus.obj.has_subscribers)
+               return;
+
+       blob_buf_init(&b, 0);
+       blobmsg_add_u16(&b, "frequency", frequency);
+       blobmsg_add_u16(&b, "width", chan_width);
+       blobmsg_add_u16(&b, "center1", cf1);
+       blobmsg_add_u16(&b, "center2", cf2);
+
+       for (i = 0; i < iface->num_bss; i++) {
+               hapd = iface->bss[i];
+               ubus_notify(ctx, &hapd->ubus.obj, "radar-detected", b.head, -1);
+       }
+}
index f746c86e4fee8e06e145b18a83fbd10b9e483d04..acdac74360301160e5263d66465e0017d3a00bd8 100644 (file)
@@ -52,6 +52,8 @@ void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd,
                                       const u8 *addr, u8 token, u8 rep_mode,
                                       struct rrm_measurement_beacon_report *rep,
                                       size_t len);
+void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency,
+                                       int chan_width, int cf1, int cf2);
 
 void hostapd_ubus_add(struct hapd_interfaces *interfaces);
 void hostapd_ubus_free(struct hapd_interfaces *interfaces);
@@ -100,6 +102,10 @@ static inline void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd,
                                                     size_t len)
 {
 }
+static inline void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequency,
+                                                     int chan_width, int cf1, int cf2)
+{
+}
 
 static inline void hostapd_ubus_add(struct hapd_interfaces *interfaces)
 {