mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 18:07:52 +00:00
hostapd: fix opclass during CSA with DFS channels
During CSA with DFS channels, disable, enable interface is a part of the algorithm. When interface was enabled old operating class before switch and new channel were used causing mismatch in configured_fixed_chan_to_freq function. Example of log when switch from channel 157 to 108 was triggered: "Could not convert op_class 124 channel 108 to operating frequency" Fixes: WIFI-13385 Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
This commit is contained in:
committed by
John Crispin
parent
b1474acf2f
commit
f74dd74cef
@@ -0,0 +1,25 @@
|
||||
Index: hostapd-2021-02-20-59e9794c/src/ap/hostapd.c
|
||||
===================================================================
|
||||
--- hostapd-2021-02-20-59e9794c.orig/src/ap/hostapd.c
|
||||
+++ hostapd-2021-02-20-59e9794c/src/ap/hostapd.c
|
||||
@@ -3814,6 +3814,8 @@ hostapd_switch_channel_fallback(struct h
|
||||
const struct hostapd_freq_params *freq_params)
|
||||
{
|
||||
int seg0_idx = 0, seg1_idx = 0, bw = CHANWIDTH_USE_HT;
|
||||
+ u8 op_class;
|
||||
+ u8 chan;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "Restarting all CSA-related BSSes");
|
||||
|
||||
@@ -3846,6 +3848,11 @@ hostapd_switch_channel_fallback(struct h
|
||||
iface->freq = freq_params->freq;
|
||||
iface->conf->channel = freq_params->channel;
|
||||
iface->conf->secondary_channel = freq_params->sec_channel_offset;
|
||||
+ ieee80211_freq_to_channel_ext(freq_params->freq, freq_params->sec_channel_offset, bw, &op_class, &chan);
|
||||
+ if (chan != freq_params->channel)
|
||||
+ wpa_printf(MSG_ERROR, "Channel mismatch: %d -> %d", freq_params->channel, chan);
|
||||
+
|
||||
+ iface->conf->op_class = op_class;
|
||||
hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx);
|
||||
hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx);
|
||||
hostapd_set_oper_chwidth(iface->conf, bw);
|
||||
@@ -0,0 +1,25 @@
|
||||
Index: hostapd-2021-02-20-59e9794c/src/ap/hostapd.c
|
||||
===================================================================
|
||||
--- hostapd-2021-02-20-59e9794c.orig/src/ap/hostapd.c
|
||||
+++ hostapd-2021-02-20-59e9794c/src/ap/hostapd.c
|
||||
@@ -3814,6 +3814,8 @@ hostapd_switch_channel_fallback(struct h
|
||||
const struct hostapd_freq_params *freq_params)
|
||||
{
|
||||
int seg0_idx = 0, seg1_idx = 0, bw = CHANWIDTH_USE_HT;
|
||||
+ u8 op_class;
|
||||
+ u8 chan;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "Restarting all CSA-related BSSes");
|
||||
|
||||
@@ -3846,6 +3848,11 @@ hostapd_switch_channel_fallback(struct h
|
||||
iface->freq = freq_params->freq;
|
||||
iface->conf->channel = freq_params->channel;
|
||||
iface->conf->secondary_channel = freq_params->sec_channel_offset;
|
||||
+ ieee80211_freq_to_channel_ext(freq_params->freq, freq_params->sec_channel_offset, bw, &op_class, &chan);
|
||||
+ if (chan != freq_params->channel)
|
||||
+ wpa_printf(MSG_ERROR, "Channel mismatch: %d -> %d", freq_params->channel, chan);
|
||||
+
|
||||
+ iface->conf->op_class = op_class;
|
||||
hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx);
|
||||
hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx);
|
||||
hostapd_set_oper_chwidth(iface->conf, bw);
|
||||
Reference in New Issue
Block a user