From: Felix Fietkau Date: Thu, 24 Aug 2023 16:27:51 +0000 (+0200) Subject: hostapd: fix bringing up AP+STA when the new channel is on a DFS channel X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=22ca6fdeeb8fda642a8d50fc93b95781392ea97e;p=openwrt%2Fstaging%2Fdangole.git hostapd: fix bringing up AP+STA when the new channel is on a DFS channel If a CAC is needed because the channel is not available yet, a full AP interface restart is needed Signed-off-by: Felix Fietkau --- diff --git a/package/network/services/hostapd/src/src/ap/ucode.c b/package/network/services/hostapd/src/src/ap/ucode.c index 053171b142..080fe48b11 100644 --- a/package/network/services/hostapd/src/src/ap/ucode.c +++ b/package/network/services/hostapd/src/src/ap/ucode.c @@ -7,6 +7,7 @@ #include "beacon.h" #include "hw_features.h" #include "ap_drv_ops.h" +#include "dfs.h" #include 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;