mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-03 03:47:50 +00:00
wifi-6062: Fix for CAC timer running twice
In case of full config push, do not send CSA as hostapd is anyway going to reload with reload_config script detecting the UCI change. This would help avoid double channel switch. Signed-off-by: Yashvardhan <yashvardhan@netexperience.com>
This commit is contained in:
@@ -41,6 +41,7 @@ ovsdb_table_t table_Wifi_VIF_Config;
|
|||||||
ovsdb_table_t table_Wifi_Inet_Config;
|
ovsdb_table_t table_Wifi_Inet_Config;
|
||||||
ovsdb_table_t table_Node_Config;
|
ovsdb_table_t table_Node_Config;
|
||||||
|
|
||||||
|
static bool full_config = false;
|
||||||
unsigned int radproxy_apc = 0;
|
unsigned int radproxy_apc = 0;
|
||||||
|
|
||||||
static struct uci_package *wireless;
|
static struct uci_package *wireless;
|
||||||
@@ -460,32 +461,34 @@ bool target_radio_config_set2(const struct schema_Wifi_Radio_Config *rconf,
|
|||||||
{
|
{
|
||||||
blob_buf_init(&b, 0);
|
blob_buf_init(&b, 0);
|
||||||
blob_buf_init(&del, 0);
|
blob_buf_init(&del, 0);
|
||||||
|
|
||||||
char phy[6];
|
char phy[6];
|
||||||
char ifname[8];
|
char ifname[8];
|
||||||
int freq = 0;
|
|
||||||
char *mode = NULL;
|
|
||||||
struct mode_map *m;
|
struct mode_map *m;
|
||||||
|
|
||||||
strncpy(ifname, rconf->if_name, sizeof(ifname));
|
strncpy(ifname, rconf->if_name, sizeof(ifname));
|
||||||
strncpy(phy, target_map_ifname(ifname), sizeof(phy));
|
strncpy(phy, target_map_ifname(ifname), sizeof(phy));
|
||||||
|
|
||||||
|
if (full_config && !changed->channel)
|
||||||
|
full_config = false;
|
||||||
|
|
||||||
if (changed->channel && rconf->channel) {
|
if (changed->channel && rconf->channel) {
|
||||||
/* If radio channel config has changed then rebalance channel,
|
/* If radio channel config has changed then rebalance channel,
|
||||||
* if not, that means the channel state changed due to a
|
* if not, that means the channel state changed due to a
|
||||||
* radar detection and shall remain in the backup channel */
|
* radar detection and shall remain in the backup channel */
|
||||||
if (is_cloud_channel_change(rconf) == 0) {
|
if (is_cloud_channel_change(rconf) == 0) {
|
||||||
if(rrm_radio_rebalance_channel(rconf) == 0) {
|
/* In case of full config push, do not send CSA as hostapd
|
||||||
|
* is anyway going to reload with reload_config script detecting
|
||||||
|
* the UCI change. This would help avoid back to back channel switch.
|
||||||
|
*/
|
||||||
|
if (full_config) {
|
||||||
|
LOGD("channel change due to full config push. New channel is %d", rconf->channel);
|
||||||
|
blobmsg_add_u32(&b, "channel", rconf->channel);
|
||||||
|
radio_fixup_set_primary_chan(rconf->if_name, rconf->channel);
|
||||||
|
full_config = false;
|
||||||
|
} else if (rrm_radio_rebalance_channel(rconf) == 0) {
|
||||||
|
LOGD("channel change due to RRM rebalancing. New channel is %d", rconf->channel);
|
||||||
blobmsg_add_u32(&b, "channel", rconf->channel);
|
blobmsg_add_u32(&b, "channel", rconf->channel);
|
||||||
radio_fixup_set_primary_chan(rconf->if_name, rconf->channel);
|
radio_fixup_set_primary_chan(rconf->if_name, rconf->channel);
|
||||||
|
|
||||||
/* Update the ht_mode in UCI if we downgraded due to channel change */
|
|
||||||
freq = ieee80211_channel_to_frequency(rconf->channel);
|
|
||||||
mode = get_max_channel_bw_channel(freq, rconf->ht_mode);
|
|
||||||
if (strncmp(mode, rconf->ht_mode, 4)) {
|
|
||||||
m = mode_map_get_uci(rconf->freq_band, mode, rconf->hw_mode);
|
|
||||||
blobmsg_add_string(&b, "htmode", m->ucihtmode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -554,7 +557,7 @@ bool target_radio_config_set2(const struct schema_Wifi_Radio_Config *rconf,
|
|||||||
blobmsg_add_u32(&b, "beacon_int", beacon_int);
|
blobmsg_add_u32(&b, "beacon_int", beacon_int);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((changed->ht_mode) || (changed->hw_mode) || (changed->freq_band)) {
|
if ((changed->channel || changed->ht_mode) || (changed->hw_mode) || (changed->freq_band)) {
|
||||||
int channel_freq;
|
int channel_freq;
|
||||||
char buffer[8];
|
char buffer[8];
|
||||||
FILE *confFile_p;
|
FILE *confFile_p;
|
||||||
@@ -1236,6 +1239,7 @@ static void callback_Wifi_Inet_Config(ovsdb_update_monitor_t *mon,
|
|||||||
struct schema_Wifi_Inet_Config *old_rec,
|
struct schema_Wifi_Inet_Config *old_rec,
|
||||||
struct schema_Wifi_Inet_Config *iconf)
|
struct schema_Wifi_Inet_Config *iconf)
|
||||||
{
|
{
|
||||||
|
full_config = true;
|
||||||
set_config_apply_timeout(mon);
|
set_config_apply_timeout(mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user