hostapd: Add config option chanlist for DFS channels

Different channels allow different transmission power, at least in ETSI
countries. Also, ETSI requires a "channel plan" for DFS operation, and
channels should be randomly choosen from these channels.

Add a channel list configuration option for users to add channels
hostapd may pick from.

Signed-hostap: Simon Wunderlich <sw@simonwunderlich.de>
This commit is contained in:
Simon Wunderlich 2014-02-06 19:30:37 +01:00 committed by Jouni Malinen
parent 2ca47da4f7
commit 70ee1be248
5 changed files with 36 additions and 0 deletions

View file

@ -562,6 +562,7 @@ void hostapd_config_free(struct hostapd_config *conf)
os_free(conf->bss);
os_free(conf->supported_rates);
os_free(conf->basic_rates);
os_free(conf->chanlist);
os_free(conf);
}

View file

@ -525,6 +525,7 @@ struct hostapd_config {
int fragm_threshold;
u8 send_probe_response;
u8 channel;
int *chanlist;
enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */
enum {
LONG_PREAMBLE = 0,

View file

@ -139,6 +139,22 @@ static int dfs_chan_range_available(struct hostapd_hw_modes *mode,
}
static int is_in_chanlist(struct hostapd_iface *iface,
struct hostapd_channel_data *chan)
{
int *entry;
if (!iface->conf->chanlist)
return 1;
for (entry = iface->conf->chanlist; *entry != -1; entry++) {
if (*entry == chan->chan)
return 1;
}
return 0;
}
/*
* The function assumes HT40+ operation.
* Make sure to adjust the following variables after calling this:
@ -171,6 +187,9 @@ static int dfs_find_channel(struct hostapd_iface *iface,
if (!dfs_chan_range_available(mode, i, n_chans, skip_radar))
continue;
if (!is_in_chanlist(iface, chan))
continue;
if (ret_chan && idx == channel_idx) {
wpa_printf(MSG_DEBUG, "Selected ch. #%d", chan->chan);
*ret_chan = chan;