AP: Add op_class config item to specify 6 GHz channels uniquely
Add hostapd config option "op_class" for fixed channel selection along with existing "channel" option. "op_class" and "channel" config options together can specify channels across 2.4 GHz, 5 GHz, and 6 GHz bands uniquely. Signed-off-by: Liangwei Dong <liangwei@codeaurora.org> Signed-off-by: Vamsi Krishna <vamsin@codeaurora.org>
This commit is contained in:
parent
89450024a8
commit
a5b2faa714
4 changed files with 15 additions and 0 deletions
|
@ -3136,6 +3136,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
}
|
}
|
||||||
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
|
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
|
||||||
conf->acs_exclude_dfs = atoi(pos);
|
conf->acs_exclude_dfs = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "op_class") == 0) {
|
||||||
|
conf->op_class = 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
|
||||||
|
|
|
@ -163,6 +163,12 @@ hw_mode=g
|
||||||
# which will enable the ACS survey based algorithm.
|
# which will enable the ACS survey based algorithm.
|
||||||
channel=1
|
channel=1
|
||||||
|
|
||||||
|
# Global operating class (IEEE 802.11, Annex E, Table E-4)
|
||||||
|
# This option allows hostapd to specify the operating class of the channel
|
||||||
|
# configured with the channel parameter. channel and op_class together can
|
||||||
|
# uniquely identify channels across different bands, including the 6 GHz band.
|
||||||
|
#op_class=131
|
||||||
|
|
||||||
# ACS tuning - Automatic Channel Selection
|
# ACS tuning - Automatic Channel Selection
|
||||||
# See: http://wireless.kernel.org/en/users/Documentation/acs
|
# See: http://wireless.kernel.org/en/users/Documentation/acs
|
||||||
#
|
#
|
||||||
|
|
|
@ -875,6 +875,7 @@ struct hostapd_config {
|
||||||
u16 beacon_int;
|
u16 beacon_int;
|
||||||
int rts_threshold;
|
int rts_threshold;
|
||||||
int fragm_threshold;
|
int fragm_threshold;
|
||||||
|
u8 op_class;
|
||||||
u8 channel;
|
u8 channel;
|
||||||
int enable_edmg;
|
int enable_edmg;
|
||||||
u8 edmg_channel;
|
u8 edmg_channel;
|
||||||
|
|
|
@ -961,6 +961,7 @@ out:
|
||||||
int hostapd_select_hw_mode(struct hostapd_iface *iface)
|
int hostapd_select_hw_mode(struct hostapd_iface *iface)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int freq = -1;
|
||||||
|
|
||||||
if (iface->num_hw_features < 1)
|
if (iface->num_hw_features < 1)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -977,9 +978,14 @@ int hostapd_select_hw_mode(struct hostapd_iface *iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
iface->current_mode = NULL;
|
iface->current_mode = NULL;
|
||||||
|
if (iface->conf->channel && iface->conf->op_class)
|
||||||
|
freq = ieee80211_chan_to_freq(NULL, iface->conf->op_class,
|
||||||
|
iface->conf->channel);
|
||||||
for (i = 0; i < iface->num_hw_features; i++) {
|
for (i = 0; i < iface->num_hw_features; i++) {
|
||||||
struct hostapd_hw_modes *mode = &iface->hw_features[i];
|
struct hostapd_hw_modes *mode = &iface->hw_features[i];
|
||||||
if (mode->mode == iface->conf->hw_mode) {
|
if (mode->mode == iface->conf->hw_mode) {
|
||||||
|
if (freq > 0 && !hw_get_chan(mode, freq))
|
||||||
|
continue;
|
||||||
iface->current_mode = mode;
|
iface->current_mode = mode;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue