Add a config parameter to exclude DFS channels from ACS
The new acs_exclude_dfs=1 parameter can be used to request hostapd to exclude all DFS channels from ACS consideration. This is mainly of use for cases where the driver supports DFS channels, but for some reason a non-DFS channel is desired when using automatic channel selection. Previously, the chanlist parameter could have been used for this, but that required listing all the acceptable channels. The new parameter allows this to be done without such a list. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
3c2bd55f03
commit
2d18ab4082
4 changed files with 14 additions and 1 deletions
|
@ -2745,6 +2745,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
line, pos);
|
line, pos);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
|
||||||
|
conf->acs_exclude_dfs = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "channel") == 0) {
|
} else if (os_strcmp(buf, "channel") == 0) {
|
||||||
if (os_strcmp(pos, "acs_survey") == 0) {
|
if (os_strcmp(pos, "acs_survey") == 0) {
|
||||||
#ifndef CONFIG_ACS
|
#ifndef CONFIG_ACS
|
||||||
|
|
|
@ -199,6 +199,11 @@ channel=1
|
||||||
#chanlist=100 104 108 112 116
|
#chanlist=100 104 108 112 116
|
||||||
#chanlist=1 6 11-13
|
#chanlist=1 6 11-13
|
||||||
|
|
||||||
|
# Exclude DFS channels from ACS
|
||||||
|
# This option can be used to exclude all DFS channels from the ACS channel list
|
||||||
|
# in cases where the driver supports DFS channels.
|
||||||
|
#acs_exclude_dfs=1
|
||||||
|
|
||||||
# Beacon interval in kus (1.024 ms) (default: 100; range 15..65535)
|
# Beacon interval in kus (1.024 ms) (default: 100; range 15..65535)
|
||||||
beacon_int=100
|
beacon_int=100
|
||||||
|
|
||||||
|
|
|
@ -660,6 +660,7 @@ struct hostapd_config {
|
||||||
u8 channel;
|
u8 channel;
|
||||||
u8 acs;
|
u8 acs;
|
||||||
struct wpa_freq_range_list acs_ch_list;
|
struct wpa_freq_range_list acs_ch_list;
|
||||||
|
int acs_exclude_dfs;
|
||||||
enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */
|
enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */
|
||||||
enum {
|
enum {
|
||||||
LONG_PREAMBLE = 0,
|
LONG_PREAMBLE = 0,
|
||||||
|
|
|
@ -816,7 +816,9 @@ static void hostapd_get_hw_mode_any_channels(struct hostapd_data *hapd,
|
||||||
if ((acs_ch_list_all ||
|
if ((acs_ch_list_all ||
|
||||||
freq_range_list_includes(&hapd->iface->conf->acs_ch_list,
|
freq_range_list_includes(&hapd->iface->conf->acs_ch_list,
|
||||||
chan->chan)) &&
|
chan->chan)) &&
|
||||||
!(chan->flag & HOSTAPD_CHAN_DISABLED))
|
!(chan->flag & HOSTAPD_CHAN_DISABLED) &&
|
||||||
|
!(hapd->iface->conf->acs_exclude_dfs &&
|
||||||
|
(chan->flag & HOSTAPD_CHAN_RADAR)))
|
||||||
int_array_add_unique(freq_list, chan->freq);
|
int_array_add_unique(freq_list, chan->freq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -871,6 +873,9 @@ int hostapd_drv_do_acs(struct hostapd_data *hapd)
|
||||||
&hapd->iface->conf->acs_ch_list,
|
&hapd->iface->conf->acs_ch_list,
|
||||||
chan->chan))
|
chan->chan))
|
||||||
continue;
|
continue;
|
||||||
|
if (hapd->iface->conf->acs_exclude_dfs &&
|
||||||
|
(chan->flag & HOSTAPD_CHAN_RADAR))
|
||||||
|
continue;
|
||||||
if (!(chan->flag & HOSTAPD_CHAN_DISABLED)) {
|
if (!(chan->flag & HOSTAPD_CHAN_DISABLED)) {
|
||||||
channels[num_channels++] = chan->chan;
|
channels[num_channels++] = chan->chan;
|
||||||
int_array_add_unique(&freq_list, chan->freq);
|
int_array_add_unique(&freq_list, chan->freq);
|
||||||
|
|
Loading…
Reference in a new issue