diff options
Diffstat (limited to 'package/network/services/hostapd/patches/012-mesh-fix-channel-switch-error-during-CAC.patch')
-rw-r--r-- | package/network/services/hostapd/patches/012-mesh-fix-channel-switch-error-during-CAC.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/012-mesh-fix-channel-switch-error-during-CAC.patch b/package/network/services/hostapd/patches/012-mesh-fix-channel-switch-error-during-CAC.patch new file mode 100644 index 0000000000..f324d81ae3 --- /dev/null +++ b/package/network/services/hostapd/patches/012-mesh-fix-channel-switch-error-during-CAC.patch @@ -0,0 +1,66 @@ +From ab6995f15aae17af93507dd2344615f91672a31a Mon Sep 17 00:00:00 2001 +From: Peter Oh <peter.oh@bowerswilkins.com> +Date: Tue, 30 Jun 2020 14:19:00 +0200 +Subject: [PATCH 12/19] mesh: fix channel switch error during CAC + +Mesh interface has used its channel parameters that configured +during its initialization even after channel switched due to +DFS radar detection during CAC which caused channel switch error. +This change fixes the error by updating its channel parameters +when channel's been changed from initial one. + +Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> +--- + wpa_supplicant/mesh.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +--- a/wpa_supplicant/mesh.c ++++ b/wpa_supplicant/mesh.c +@@ -13,6 +13,7 @@ + #include "utils/uuid.h" + #include "common/ieee802_11_defs.h" + #include "common/wpa_ctrl.h" ++#include "common/hw_features_common.h" + #include "ap/sta_info.h" + #include "ap/hostapd.h" + #include "ap/ieee802_11.h" +@@ -206,6 +207,39 @@ static int wpas_mesh_complete(struct wpa + return -1; + } + ++ /* ++ * inspect if channel's been changed since initialized. ++ * i.e. DFS radar detection ++ */ ++ if (ifmsh->freq != params->freq.freq) { ++ wpa_s->assoc_freq = ifmsh->freq; ++ ssid->frequency = ifmsh->freq; ++ struct he_capabilities *he_capab = NULL; ++ ++ if (ifmsh->current_mode) ++ he_capab = &ifmsh->current_mode->he_capab[IEEE80211_MODE_MESH]; ++ ++ if (hostapd_set_freq_params(¶ms->freq, ++ ifmsh->conf->hw_mode, ++ ifmsh->freq, ++ ifmsh->conf->channel, ++ ifmsh->conf->enable_edmg, ++ ifmsh->conf->edmg_channel, ++ ifmsh->conf->ieee80211n, ++ ifmsh->conf->ieee80211ac, ++ ifmsh->conf->ieee80211ax, ++ ifmsh->conf->secondary_channel, ++ hostapd_get_oper_chwidth(ifmsh->conf), ++ hostapd_get_oper_centr_freq_seg0_idx(ifmsh->conf), ++ hostapd_get_oper_centr_freq_seg1_idx(ifmsh->conf), ++ ifmsh->conf->vht_capab, ++ he_capab)) { ++ wpa_printf(MSG_ERROR, "Error updating mesh frequency params."); ++ wpa_supplicant_mesh_deinit(wpa_s); ++ return -1; ++ } ++ } ++ + if (ifmsh->mconf->security != MESH_CONF_SEC_NONE && + wpas_mesh_init_rsn(wpa_s)) { + wpa_printf(MSG_ERROR, |