mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 07:22:33 +00:00
34705946e2
Drop outdated and by now broken patchset originally supplied by Peter Oh in August 2018 but never merged upstream. Instead add the more promissing rework recently submitted by Markus Theil who picked up Peter's patchset, fixed and completed it and added support for HE (802.11ax) in mesh mode. This is only compile tested and needs some real-life testing. Fixes: FS#3214 Fixes:167028b750
("hostapd: Update to version 2.9 (2019-08-08)") Fixes:0a3ec87a66
("hostapd: update to latest Git hostap_2_9-1238-gdd2daf0848ed") Fixes:017320ead3
("hostapd: bring back mesh patches") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
67 lines
2.1 KiB
Diff
67 lines
2.1 KiB
Diff
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,
|