2020-07-23 17:34:00 +00:00
|
|
|
From ab6995f15aae17af93507dd2344615f91672a31a Mon Sep 17 00:00:00 2001
|
2020-05-21 09:15:46 +00:00
|
|
|
From: Peter Oh <peter.oh@bowerswilkins.com>
|
2020-07-23 17:34:00 +00:00
|
|
|
Date: Tue, 30 Jun 2020 14:19:00 +0200
|
|
|
|
Subject: [PATCH 12/19] mesh: fix channel switch error during CAC
|
2020-05-21 09:15:46 +00:00
|
|
|
|
|
|
|
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>
|
|
|
|
---
|
2020-07-23 17:34:00 +00:00
|
|
|
wpa_supplicant/mesh.c | 34 ++++++++++++++++++++++++++++++++++
|
|
|
|
1 file changed, 34 insertions(+)
|
2020-05-21 09:15:46 +00:00
|
|
|
|
|
|
|
--- 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"
|
2020-07-23 17:34:00 +00:00
|
|
|
@@ -206,6 +207,39 @@ static int wpas_mesh_complete(struct wpa
|
|
|
|
return -1;
|
2020-05-21 09:15:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * 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;
|
2020-07-23 17:34:00 +00:00
|
|
|
+ struct he_capabilities *he_capab = NULL;
|
|
|
|
+
|
|
|
|
+ if (ifmsh->current_mode)
|
|
|
|
+ he_capab = &ifmsh->current_mode->he_capab[IEEE80211_MODE_MESH];
|
|
|
|
+
|
2020-05-21 09:15:46 +00:00
|
|
|
+ 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),
|
2020-07-23 17:34:00 +00:00
|
|
|
+ ifmsh->conf->vht_capab,
|
|
|
|
+ he_capab)) {
|
2020-05-21 09:15:46 +00:00
|
|
|
+ wpa_printf(MSG_ERROR, "Error updating mesh frequency params.");
|
|
|
|
+ wpa_supplicant_mesh_deinit(wpa_s);
|
2020-07-23 17:34:00 +00:00
|
|
|
+ return -1;
|
2020-05-21 09:15:46 +00:00
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if (ifmsh->mconf->security != MESH_CONF_SEC_NONE &&
|
|
|
|
wpas_mesh_init_rsn(wpa_s)) {
|
|
|
|
wpa_printf(MSG_ERROR,
|