From 7ed17eee3adaf96ff2104aeb21554110c9654f9d Mon Sep 17 00:00:00 2001 From: David Bauer Date: Sun, 11 Sep 2022 18:41:12 +0200 Subject: [PATCH] ACS: Don't select indoor channel on outdoor operation Don't select channels designated for exclusive indoor use when the country string is set for outdoor operation (country3=0x4f, i.e., the third character of the country string is 'O'). Signed-off-by: David Bauer --- src/ap/acs.c | 12 ++++++++++++ src/ap/dfs.c | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/src/ap/acs.c b/src/ap/acs.c index 7708bc283..7ca87960c 100644 --- a/src/ap/acs.c +++ b/src/ap/acs.c @@ -553,6 +553,10 @@ static void acs_survey_mode_interference_factor( if (chan->max_tx_power < iface->conf->min_tx_power) continue; + if ((chan->flag & HOSTAPD_CHAN_INDOOR_ONLY) && + iface->conf->country[2] == 0x4f) + continue; + wpa_printf(MSG_DEBUG, "ACS: Survey analysis for channel %d (%d MHz)", chan->chan, chan->freq); @@ -687,6 +691,10 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, if (chan->max_tx_power < iface->conf->min_tx_power) continue; + if ((chan->flag & HOSTAPD_CHAN_INDOOR_ONLY) && + iface->conf->country[2] == 0x4f) + continue; + if (!chan_bw_allowed(chan, bw, 1, 1)) { wpa_printf(MSG_DEBUG, "ACS: Channel %d: BW %u is not supported", @@ -1068,6 +1076,10 @@ static int * acs_request_scan_add_freqs(struct hostapd_iface *iface, if (chan->max_tx_power < iface->conf->min_tx_power) continue; + if ((chan->flag & HOSTAPD_CHAN_INDOOR_ONLY) && + iface->conf->country[2] == 0x4f) + continue; + *freq++ = chan->freq; } diff --git a/src/ap/dfs.c b/src/ap/dfs.c index 146dd1ada..7f31f283d 100644 --- a/src/ap/dfs.c +++ b/src/ap/dfs.c @@ -281,6 +281,10 @@ static int dfs_find_channel(struct hostapd_iface *iface, if (chan->max_tx_power < iface->conf->min_tx_power) continue; + if ((chan->flag & HOSTAPD_CHAN_INDOOR_ONLY) && + iface->conf->country[2] == 0x4f) + continue; + if (ret_chan && idx == channel_idx) { wpa_printf(MSG_DEBUG, "Selected channel %d (%d)", chan->freq, chan->chan);