hostapd: fix bringing up AP+STA when the new channel is on a DFS channel
authorFelix Fietkau <nbd@nbd.name>
Thu, 24 Aug 2023 16:27:51 +0000 (18:27 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Aug 2023 16:29:36 +0000 (18:29 +0200)
If a CAC is needed because the channel is not available yet, a full AP
interface restart is needed

Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/network/services/hostapd/src/src/ap/ucode.c

index 053171b1429ffb12e609734abd5deb0f35d2df50..080fe48b11ac7db03d182d43a3596ee9e5558dc3 100644 (file)
@@ -7,6 +7,7 @@
 #include "beacon.h"
 #include "hw_features.h"
 #include "ap_drv_ops.h"
+#include "dfs.h"
 #include <libubox/uloop.h>
 
 static uc_resource_type_t *global_type, *bss_type, *iface_type;
@@ -367,6 +368,13 @@ out:
        if (conf->channel)
                iface->freq = hostapd_hw_get_freq(iface->bss[0], conf->channel);
 
+       if (hostapd_is_dfs_required(iface) && !hostapd_is_dfs_chan_available(iface)) {
+               wpa_printf(MSG_INFO, "DFS CAC required on new channel, restart interface");
+               hostapd_disable_iface(iface);
+               hostapd_enable_iface(iface);
+               return ucv_boolean_new(true);
+       }
+
        for (i = 0; i < iface->num_bss; i++) {
                struct hostapd_data *hapd = iface->bss[i];
                int ret;