[PATCH] supplicant: skip NOP channels
Janusz Dziedzic
janusz.dziedzic at gmail.com
Sun Feb 22 01:36:50 PST 2026
In case we have AP run:
- on same phy that supplicant
- on different phy in current system
respect unavailable (NOP) channels and
don't try to assoc using this channel,
after AP will detect RADAR on such channel.
Signed-off-by: Janusz Dziedzic <janusz.dziedzic at gmail.com>
---
wpa_supplicant/events.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 4372e24a8..9e5496d92 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -1207,8 +1207,13 @@ int disabled_freq(struct wpa_supplicant *wpa_s, int freq)
for (i = 0; i < mode->num_channels; i++) {
struct hostapd_channel_data *chan = &mode->channels[i];
- if (chan->freq == freq)
- return !!(chan->flag & HOSTAPD_CHAN_DISABLED);
+ if (chan->freq == freq) {
+ if (chan->flag & HOSTAPD_CHAN_DISABLED)
+ return 1;
+ if ((chan->flag & HOSTAPD_CHAN_DFS_MASK) == HOSTAPD_CHAN_DFS_UNAVAILABLE)
+ return 2;
+ return 0;
+ }
}
}
@@ -1628,6 +1633,7 @@ struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
const u8 *match_ssid;
size_t match_ssid_len;
int bssid_ignore_count;
+ int ret;
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
wpa_ie_len = ie ? ie[1] : 0;
@@ -1695,9 +1701,9 @@ struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
return NULL;
}
- if (disabled_freq(wpa_s, bss->freq)) {
+ if ((ret = disabled_freq(wpa_s, bss->freq))) {
if (debug_print)
- wpa_dbg(wpa_s, MSG_DEBUG, " skip - channel disabled");
+ wpa_dbg(wpa_s, MSG_DEBUG, " skip - channel %s", ret == 2 ? "unavailable (NOP)" : "disabled");
return NULL;
}
@@ -6941,20 +6947,26 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_CS);
wnm_clear_coloc_intf_reporting(wpa_s);
break;
+ case EVENT_DFS_RADAR_DETECTED:
#ifdef CONFIG_AP
#ifdef NEED_AP_MLME
- case EVENT_DFS_RADAR_DETECTED:
if (data)
wpas_ap_event_dfs_radar_detected(wpa_s,
&data->dfs_event);
+#endif /* NEED_AP_MLME */
+#endif /* CONFIG_AP */
+ wpa_supplicant_update_channel_list(wpa_s, NULL);
break;
case EVENT_DFS_NOP_FINISHED:
+#ifdef CONFIG_AP
+#ifdef NEED_AP_MLME
if (data)
wpas_ap_event_dfs_cac_nop_finished(wpa_s,
&data->dfs_event);
- break;
#endif /* NEED_AP_MLME */
#endif /* CONFIG_AP */
+ wpa_supplicant_update_channel_list(wpa_s, NULL);
+ break;
case EVENT_DFS_CAC_STARTED:
if (data)
wpas_event_dfs_cac_started(wpa_s, &data->dfs_event);
--
2.43.0
More information about the Hostap
mailing list