hostapd: send a notification via ubus when CSA completed
authorJohn Crispin <john@phrozen.org>
Wed, 18 Sep 2024 13:05:34 +0000 (15:05 +0200)
committerJohn Crispin <john@phrozen.org>
Wed, 2 Oct 2024 13:19:42 +0000 (15:19 +0200)
Signed-off-by: John Crispin <john@phrozen.org>
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 fb3bfb012030bdd5e4cfc83d8fadd76a4caba0d2..256d1cfcc4bd9584ed27c02c19486b2856e8a0e7 100644 (file)
@@ -116,6 +116,14 @@ probe/assoc/auth requests via object subscribe.
  #ifdef CONFIG_P2P
        if (elems.p2p) {
                wpabuf_free(sta->p2p_ie);
+@@ -1369,6 +1379,7 @@ void hostapd_event_ch_switch(struct host
+               wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED
+                       "freq=%d dfs=%d", freq, is_dfs);
++              hostapd_ubus_notify_csa(hapd, freq);
+       } else if (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD) {
+               /* Complete AP configuration for the first bring up. */
+               if (is_dfs0 > 0 &&
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
 @@ -475,6 +475,7 @@ void hostapd_free_hapd_data(struct hosta
index 4dda2b0571e53e176e708b4f7b4c6dba0f85eb53..22567207556599fde8c324641ce5dda2b02e7ebc 100644 (file)
@@ -2024,3 +2024,16 @@ void hostapd_ubus_notify_apup_newpeer(
        ubus_notify(ctx, &hapd->ubus.obj, "apup-newpeer", b.head, -1);
 }
 #endif // def CONFIG_APUP
+
+void hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq)
+{
+       if (!hapd->ubus.obj.has_subscribers)
+               return;
+
+       blob_buf_init(&b, 0);
+       blobmsg_add_string(&b, "ifname", hapd->conf->iface);
+       blobmsg_add_u32(&b, "freq", freq);
+       blobmsg_printf(&b, "bssid", MACSTR, MAC2STR(hapd->conf->bssid));
+
+       ubus_notify(ctx, &hapd->ubus.obj, "channel-switch", b.head, -1);
+}
index 5c03cb90ad75b8c1841c96c1db0c8f39ea62a309..055a18c092fa60538eeb4f8964b9d6cb7f250ddd 100644 (file)
@@ -68,6 +68,7 @@ int hostapd_ubus_notify_bss_transition_query(
        const u8 *candidate_list, u16 candidate_list_len);
 void hostapd_ubus_notify_authorized(struct hostapd_data *hapd, struct sta_info *sta,
                                    const char *auth_alg);
+void hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq);
 
 #ifdef CONFIG_APUP
 void hostapd_ubus_notify_apup_newpeer(
@@ -155,6 +156,11 @@ hostapd_ubus_notify_authorized(struct hostapd_data *hapd, struct sta_info *sta,
 {
 }
 
+static inline void
+hostapd_ubus_notify_csa(struct hostapd_data *hapd, int freq)
+{
+}
+
 #endif
 
 #endif