mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00

* mac80211: bump to 5.8-rc2 changelog: dfe0bc8 mac80211: allow ACS restriction with fixed channel 727685c mac80211: rt2x00: define RF5592 in init_eeprom routine cfd2f3b mac80211: create channel list for fixed channel operation d1100c7 mac80211: Update to version 5.7.5-1 ed2015c mac80211: Update to version 5.8-rc2-1 a956c14 mac80211: util: don't warn on missing sband iftype data 8b3e170 hostapd: fix incorrect service name 68bf5a9 mac80211: don't kill wireless daemon on teardown 25e0ae6 mac80211: make cfg80211 testmode support optional (and disabled by default) b7727a8 mac80211: fix AQL issues 3d731fc mac80211: merge performance improvement patches * mt76: update to 2020-07-22 Signed-off-by: Felix Fietkau <nbd@nbd.name> * mac80211: allow VHT on 2.4GHz Allow VHT rate on 2.4GHz in order to use 256-QAM Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn> * ath10k: allow VHT on 2.4GHz Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn> * hostapd: add vendor_vht option hostapd has vendor_vht option to enable VHT (256-QAM) on 2.4GHz Add this option to hostapd.sh so users can enable it via uci Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn> * ipq807x: Refresh kernel configuration Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> * ipq807x: Add WCSS bus This is needed to build ath11k. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> * mac80211: Add ath11k This adds the Qualcomm 802.11ax wireless chipset support. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Co-authored-by: Felix Fietkau <nbd@nbd.name> Co-authored-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn> Co-authored-by: Hauke Mehrtens <hauke@hauke-m.de>
197 lines
6.9 KiB
Diff
197 lines
6.9 KiB
Diff
From 91976250359b263a44861aebe553b20627fe487e Mon Sep 17 00:00:00 2001
|
|
From: Markus Theil <markus.theil@tu-ilmenau.de>
|
|
Date: Tue, 30 Jun 2020 13:53:17 +0200
|
|
Subject: [PATCH 01/19] HE/VHT: fix frequency setup with HE enabled
|
|
|
|
Some places in the code base were not using the
|
|
wrappers like hostapd_set_oper_centr_freq_seg0_idx
|
|
and friends. This could lead to errors, for example when
|
|
joining 80 MHz mesh networks. Fix this, by enforcing
|
|
usage of these wrappers.
|
|
|
|
wpa_supplicant_conf_ap_ht now checks for HE capability
|
|
before dealing with VHT in order for these wrappers to work,
|
|
as they first check HE support in the config.
|
|
|
|
While doing these changes, I've noticed that the extra
|
|
channel setup code for mesh networks in wpa_supplicant/mesh.c
|
|
should not be necessary anymore and dropped it.
|
|
wpa_supplicant_conf_ap_ht should handle this setup already.
|
|
|
|
Acked-by: John Crispin <john@phrozen.org>
|
|
Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
|
|
---
|
|
src/ap/dfs.c | 8 ++++----
|
|
wpa_supplicant/ap.c | 40 +++++++++++++++++++++++-----------------
|
|
wpa_supplicant/mesh.c | 24 ------------------------
|
|
3 files changed, 27 insertions(+), 45 deletions(-)
|
|
|
|
--- a/src/ap/dfs.c
|
|
+++ b/src/ap/dfs.c
|
|
@@ -1028,7 +1028,7 @@ static int hostapd_dfs_start_channel_swi
|
|
unsigned int i;
|
|
int err = 1;
|
|
struct hostapd_hw_modes *cmode = iface->current_mode;
|
|
- u8 current_vht_oper_chwidth = iface->conf->vht_oper_chwidth;
|
|
+ u8 current_vht_oper_chwidth = hostapd_get_oper_chwidth(iface->conf);
|
|
|
|
wpa_printf(MSG_DEBUG, "%s called (CAC active: %s, CSA active: %s)",
|
|
__func__, iface->cac_started ? "yes" : "no",
|
|
@@ -1089,8 +1089,8 @@ static int hostapd_dfs_start_channel_swi
|
|
"freq=%d chan=%d sec_chan=%d", channel->freq,
|
|
channel->chan, secondary_channel);
|
|
|
|
- new_vht_oper_chwidth = iface->conf->vht_oper_chwidth;
|
|
- iface->conf->vht_oper_chwidth = current_vht_oper_chwidth;
|
|
+ new_vht_oper_chwidth = hostapd_get_oper_chwidth(iface->conf);
|
|
+ hostapd_set_oper_chwidth(iface->conf, current_vht_oper_chwidth);
|
|
|
|
/* Setup CSA request */
|
|
os_memset(&csa_settings, 0, sizeof(csa_settings));
|
|
@@ -1130,7 +1130,7 @@ static int hostapd_dfs_start_channel_swi
|
|
iface->freq = channel->freq;
|
|
iface->conf->channel = channel->chan;
|
|
iface->conf->secondary_channel = secondary_channel;
|
|
- iface->conf->vht_oper_chwidth = new_vht_oper_chwidth;
|
|
+ hostapd_set_oper_chwidth(iface->conf, new_vht_oper_chwidth);
|
|
hostapd_set_oper_centr_freq_seg0_idx(iface->conf,
|
|
oper_centr_freq_seg0_idx);
|
|
hostapd_set_oper_centr_freq_seg1_idx(iface->conf,
|
|
--- a/wpa_supplicant/ap.c
|
|
+++ b/wpa_supplicant/ap.c
|
|
@@ -52,6 +52,7 @@ static void wpas_conf_ap_vht(struct wpa_
|
|
#ifdef CONFIG_P2P
|
|
u8 center_chan = 0;
|
|
u8 channel = conf->channel;
|
|
+ u8 freq_seg_idx;
|
|
#endif /* CONFIG_P2P */
|
|
|
|
if (!conf->secondary_channel)
|
|
@@ -59,19 +60,21 @@ static void wpas_conf_ap_vht(struct wpa_
|
|
|
|
/* Use the maximum oper channel width if it's given. */
|
|
if (ssid->max_oper_chwidth)
|
|
- conf->vht_oper_chwidth = ssid->max_oper_chwidth;
|
|
+ hostapd_set_oper_chwidth(conf, ssid->max_oper_chwidth);
|
|
|
|
ieee80211_freq_to_chan(ssid->vht_center_freq2,
|
|
- &conf->vht_oper_centr_freq_seg1_idx);
|
|
+ &freq_seg_idx);
|
|
+ hostapd_set_oper_centr_freq_seg1_idx(conf, freq_seg_idx);
|
|
|
|
if (!ssid->p2p_group) {
|
|
if (!ssid->vht_center_freq1 ||
|
|
- conf->vht_oper_chwidth == CHANWIDTH_USE_HT)
|
|
+ hostapd_get_oper_chwidth(conf) == CHANWIDTH_USE_HT)
|
|
goto no_vht;
|
|
ieee80211_freq_to_chan(ssid->vht_center_freq1,
|
|
- &conf->vht_oper_centr_freq_seg0_idx);
|
|
+ &freq_seg_idx);
|
|
+ hostapd_set_oper_centr_freq_seg0_idx(conf, freq_seg_idx);
|
|
wpa_printf(MSG_DEBUG, "VHT seg0 index %d for AP",
|
|
- conf->vht_oper_centr_freq_seg0_idx);
|
|
+ hostapd_get_oper_centr_freq_seg0_idx(conf));
|
|
return;
|
|
}
|
|
|
|
@@ -96,14 +99,14 @@ static void wpas_conf_ap_vht(struct wpa_
|
|
* try oper_cwidth 160 MHz first then VHT 80 MHz, if 160 MHz is
|
|
* not supported.
|
|
*/
|
|
- conf->vht_oper_chwidth = CHANWIDTH_160MHZ;
|
|
+ hostapd_set_oper_chwidth(conf, CHANWIDTH_160MHZ);
|
|
center_chan = wpas_p2p_get_vht160_center(wpa_s, mode, channel);
|
|
if (center_chan) {
|
|
wpa_printf(MSG_DEBUG,
|
|
"VHT center channel %u for auto-selected 160 MHz bandwidth",
|
|
center_chan);
|
|
} else {
|
|
- conf->vht_oper_chwidth = CHANWIDTH_80MHZ;
|
|
+ hostapd_set_oper_chwidth(conf, CHANWIDTH_80MHZ);
|
|
center_chan = wpas_p2p_get_vht80_center(wpa_s, mode,
|
|
channel);
|
|
wpa_printf(MSG_DEBUG,
|
|
@@ -115,9 +118,9 @@ static void wpas_conf_ap_vht(struct wpa_
|
|
if (!center_chan)
|
|
goto no_vht;
|
|
|
|
- conf->vht_oper_centr_freq_seg0_idx = center_chan;
|
|
+ hostapd_set_oper_centr_freq_seg0_idx(conf, center_chan);
|
|
wpa_printf(MSG_DEBUG, "VHT seg0 index %d for P2P GO",
|
|
- conf->vht_oper_centr_freq_seg0_idx);
|
|
+ hostapd_get_oper_centr_freq_seg0_idx(conf));
|
|
return;
|
|
#endif /* CONFIG_P2P */
|
|
|
|
@@ -125,9 +128,9 @@ no_vht:
|
|
wpa_printf(MSG_DEBUG,
|
|
"No VHT higher bandwidth support for the selected channel %d",
|
|
conf->channel);
|
|
- conf->vht_oper_centr_freq_seg0_idx =
|
|
- conf->channel + conf->secondary_channel * 2;
|
|
- conf->vht_oper_chwidth = CHANWIDTH_USE_HT;
|
|
+ hostapd_set_oper_centr_freq_seg0_idx(conf,
|
|
+ conf->channel + conf->secondary_channel * 2);
|
|
+ hostapd_set_oper_chwidth(conf, CHANWIDTH_USE_HT);
|
|
}
|
|
|
|
|
|
@@ -231,16 +234,19 @@ int wpa_supplicant_conf_ap_ht(struct wpa
|
|
HT_CAP_INFO_TX_STBC |
|
|
HT_CAP_INFO_MAX_AMSDU_SIZE);
|
|
|
|
+ /* check this before VHT, because setting oper chan
|
|
+ * width and friends is the same call for HE and VHT
|
|
+ * and checks if conf->ieee8021ax == 1 */
|
|
+ if (mode->he_capab[wpas_mode_to_ieee80211_mode(
|
|
+ ssid->mode)].he_supported &&
|
|
+ ssid->he)
|
|
+ conf->ieee80211ax = 1;
|
|
+
|
|
if (mode->vht_capab && ssid->vht) {
|
|
conf->ieee80211ac = 1;
|
|
conf->vht_capab |= mode->vht_capab;
|
|
wpas_conf_ap_vht(wpa_s, ssid, conf, mode);
|
|
}
|
|
-
|
|
- if (mode->he_capab[wpas_mode_to_ieee80211_mode(
|
|
- ssid->mode)].he_supported &&
|
|
- ssid->he)
|
|
- conf->ieee80211ax = 1;
|
|
}
|
|
}
|
|
|
|
--- a/wpa_supplicant/mesh.c
|
|
+++ b/wpa_supplicant/mesh.c
|
|
@@ -333,30 +333,6 @@ static int wpa_supplicant_mesh_init(stru
|
|
frequency);
|
|
goto out_free;
|
|
}
|
|
- if (ssid->ht40)
|
|
- conf->secondary_channel = ssid->ht40;
|
|
- if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
|
|
- if (ssid->max_oper_chwidth != DEFAULT_MAX_OPER_CHWIDTH)
|
|
- conf->vht_oper_chwidth = ssid->max_oper_chwidth;
|
|
- switch (conf->vht_oper_chwidth) {
|
|
- case CHANWIDTH_80MHZ:
|
|
- case CHANWIDTH_80P80MHZ:
|
|
- ieee80211_freq_to_chan(
|
|
- frequency,
|
|
- &conf->vht_oper_centr_freq_seg0_idx);
|
|
- conf->vht_oper_centr_freq_seg0_idx += ssid->ht40 * 2;
|
|
- break;
|
|
- case CHANWIDTH_160MHZ:
|
|
- ieee80211_freq_to_chan(
|
|
- frequency,
|
|
- &conf->vht_oper_centr_freq_seg0_idx);
|
|
- conf->vht_oper_centr_freq_seg0_idx += ssid->ht40 * 2;
|
|
- conf->vht_oper_centr_freq_seg0_idx += 40 / 5;
|
|
- break;
|
|
- }
|
|
- ieee80211_freq_to_chan(ssid->vht_center_freq2,
|
|
- &conf->vht_oper_centr_freq_seg1_idx);
|
|
- }
|
|
|
|
if (ssid->mesh_basic_rates == NULL) {
|
|
/*
|