[openwrt/openwrt] hostapd: fix encrypted mesh channel settings

LEDE Commits lede-commits at lists.infradead.org
Fri Apr 20 07:03:13 PDT 2018


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/a4322eba2b129adde45e3f7ac6c3805889623dd5

commit a4322eba2b129adde45e3f7ac6c3805889623dd5
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Fri Apr 20 07:41:03 2018 +0200

    hostapd: fix encrypted mesh channel settings
    
    Import two patches from Peter Oh to allow setting channel
    bandwidth in the way it already works for managed interfaces.
    This fixes mesh interfaces on 802.11ac devices always coming up in
    VHT80 mode.
    
    Add a patch to allow HT40 also on 2.4GHz if noscan option is set, which
    also skips secondary channel scan just like noscan works in AP mode.
    
    This time also make sure to add all files to the patch before
    committing it...
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/network/services/hostapd/Makefile          |  2 +-
 package/network/services/hostapd/files/hostapd.sh  |  2 +
 ...-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch | 58 +++++++++++++++
 ...mplement-use-of-VHT20-config-in-mesh-mode.patch | 87 ++++++++++++++++++++++
 .../services/hostapd/patches/301-mesh-noscan.patch | 78 +++++++++++++++++++
 5 files changed, 226 insertions(+), 1 deletion(-)

diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index 1dbad34..fef0fa8 100644
--- a/package/network/services/hostapd/Makefile
+++ b/package/network/services/hostapd/Makefile
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
index c364068..d3633a2 100644
--- a/package/network/services/hostapd/files/hostapd.sh
+++ b/package/network/services/hostapd/files/hostapd.sh
@@ -647,6 +647,7 @@ wpa_supplicant_add_network() {
 	local ifname="$1"
 	local freq="$2"
 	local htmode="$3"
+	local noscan="$4"
 
 	_wpa_supplicant_common "$1"
 	wireless_vif_parse_encryption
@@ -682,6 +683,7 @@ wpa_supplicant_add_network() {
 		append network_data "mode=5" "$N$T"
 		[ -n "$mesh_fwding" ] && append network_data "mesh_fwding=${mesh_fwding}" "$N$T"
 		[ -n "$channel" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
+		[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
 		append wpa_key_mgmt "SAE"
 		scan_ssid=""
 	}
diff --git a/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch b/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
new file mode 100644
index 0000000..3000311
--- /dev/null
+++ b/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
@@ -0,0 +1,58 @@
+From 838225f2319348e430b553fd9bb3680bd7434ae3 Mon Sep 17 00:00:00 2001
+From: Peter Oh <peter.oh at bowerswilkins.com>
+Date: Wed, 18 Apr 2018 14:14:18 -0700
+Subject: [PATCH 1/2] mesh: add VHT_CHANWIDTH_USE_HT to max_oper_chwidth
+
+Channel width in VHT mode refers HT capability when
+the width goes down to below 80MHz, hence add checking
+HT channel width to its max operation channel width.
+So that mesh has capable to select bandwidth below 80Mhz.
+
+Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
+---
+ wpa_supplicant/config.c         | 1 +
+ wpa_supplicant/config_ssid.h    | 1 +
+ wpa_supplicant/wpa_supplicant.c | 3 +++
+ 3 files changed, 5 insertions(+)
+
+diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
+index f65bbb02f..7e8f014cc 100644
+--- a/wpa_supplicant/config.c
++++ b/wpa_supplicant/config.c
+@@ -2798,6 +2798,7 @@ void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
+ 	ssid->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
+ #endif /* CONFIG_MACSEC */
+ 	ssid->mac_addr = -1;
++	ssid->max_oper_chwidth = (u8)DEFAULT_MAX_OPER_CHWIDTH;
+ }
+ 
+ 
+diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
+index 9fd56c32f..2ddb777b2 100644
+--- a/wpa_supplicant/config_ssid.h
++++ b/wpa_supplicant/config_ssid.h
+@@ -37,6 +37,7 @@
+ #define DEFAULT_AMPDU_FACTOR -1 /* no change */
+ #define DEFAULT_AMPDU_DENSITY -1 /* no change */
+ #define DEFAULT_USER_SELECTED_SIM 1
++#define DEFAULT_MAX_OPER_CHWIDTH -1
+ 
+ struct psk_list_entry {
+ 	struct dl_list list;
+diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
+index dcd787bec..ca893f942 100644
+--- a/wpa_supplicant/wpa_supplicant.c
++++ b/wpa_supplicant/wpa_supplicant.c
+@@ -2293,6 +2293,9 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
+ 			vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
+ 			seg0 = 114;
+ 		}
++	} else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
++		chwidth = VHT_CHANWIDTH_USE_HT;
++		seg0 = vht80[j] + 2;
+ 	}
+ 
+ 	if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
+-- 
+2.17.0
+
diff --git a/package/network/services/hostapd/patches/032-mesh-implement-use-of-VHT20-config-in-mesh-mode.patch b/package/network/services/hostapd/patches/032-mesh-implement-use-of-VHT20-config-in-mesh-mode.patch
new file mode 100644
index 0000000..3bd6eaf
--- /dev/null
+++ b/package/network/services/hostapd/patches/032-mesh-implement-use-of-VHT20-config-in-mesh-mode.patch
@@ -0,0 +1,87 @@
+From 24fc73b2470ff79cd8c92e029ca785c8e95a204c Mon Sep 17 00:00:00 2001
+From: Peter Oh <peter.oh at bowerswilkins.com>
+Date: Wed, 18 Apr 2018 14:14:19 -0700
+Subject: [PATCH 2/2] mesh: implement use of VHT20 config in mesh mode
+
+mesh in VHT mode is supposed to be able to use any bandwidth
+that 11ac supports, but we don't have a way to set VHT20
+although there are parameters that are supposed to be used.
+This patch along with the patch of
+"mesh: add VHT_CHANWIDTH_USE_HT to max_oper_chwidth" makes mesh
+available to use of any bandwidth using combination of
+existing parameters like below shown.
+
+VHT80:
+  default
+  do not set any parameters
+VHT40:
+  max_oper_chwidth = 0
+VHT20:
+  max_oper_chwidth=0
+  disable_ht40=1
+HT40:
+  disable_vht = 1
+HT20:
+  disable_ht40 = 1
+disable HT:
+  disable_ht = 1
+
+Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
+---
+ wpa_supplicant/wpa_supplicant.c | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
+index ca893f942..8429cfd43 100644
+--- a/wpa_supplicant/wpa_supplicant.c
++++ b/wpa_supplicant/wpa_supplicant.c
+@@ -2132,9 +2132,15 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
+ 	if (pri_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
+ 		return;
+ 
++	freq->channel = pri_chan->chan;
++
+ #ifdef CONFIG_HT_OVERRIDES
+-	if (ssid->disable_ht40)
+-		return;
++	if (ssid->disable_ht40) {
++		if (ssid->disable_vht)
++			return;
++		else
++			goto skip_ht40;
++	}
+ #endif /* CONFIG_HT_OVERRIDES */
+ 
+ 	/* Check/setup HT40+/HT40- */
+@@ -2159,8 +2165,6 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
+ 	if (sec_chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_NO_IR))
+ 		return;
+ 
+-	freq->channel = pri_chan->chan;
+-
+ 	if (ht40 == -1) {
+ 		if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
+ 			return;
+@@ -2204,6 +2208,7 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
+ 		wpa_scan_results_free(scan_res);
+ 	}
+ 
++skip_ht40:
+ 	wpa_printf(MSG_DEBUG,
+ 		   "IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
+ 		   freq->channel, freq->sec_channel_offset);
+@@ -2295,7 +2300,10 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
+ 		}
+ 	} else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
+ 		chwidth = VHT_CHANWIDTH_USE_HT;
+-		seg0 = vht80[j] + 2;
++		if (ssid->disable_ht40)
++			seg0 = 0;
++		else
++			seg0 = vht80[j] + 2;
+ 	}
+ 
+ 	if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
+-- 
+2.17.0
+
diff --git a/package/network/services/hostapd/patches/301-mesh-noscan.patch b/package/network/services/hostapd/patches/301-mesh-noscan.patch
new file mode 100644
index 0000000..09b67a3
--- /dev/null
+++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch
@@ -0,0 +1,78 @@
+Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config.c
+===================================================================
+--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config.c
++++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config.c
+@@ -2216,6 +2216,7 @@ static const struct parse_data ssid_fiel
+ #else /* CONFIG_MESH */
+ 	{ INT_RANGE(mode, 0, 4) },
+ #endif /* CONFIG_MESH */
++	{ INT_RANGE(noscan, 0, 1) },
+ 	{ INT_RANGE(proactive_key_caching, 0, 1) },
+ 	{ INT_RANGE(disabled, 0, 2) },
+ 	{ STR(id_str) },
+Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_file.c
+===================================================================
+--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config_file.c
++++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_file.c
+@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
+ #endif /* IEEE8021X_EAPOL */
+ 	INT(mode);
+ 	INT(no_auto_peer);
++	INT(noscan);
+ 	INT(mesh_fwding);
+ 	INT(frequency);
+ 	INT(fixed_freq);
+Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/mesh.c
+===================================================================
+--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/mesh.c
++++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/mesh.c
+@@ -287,6 +287,8 @@ static int wpa_supplicant_mesh_init(stru
+ 			   frequency);
+ 		goto out_free;
+ 	}
++	if (ssid->noscan)
++		conf->noscan = 1;
+ 	if (ssid->ht40)
+ 		conf->secondary_channel = ssid->ht40;
+ 	if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
+Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/wpa_supplicant.c
+@@ -2024,12 +2024,12 @@ void ibss_mesh_setup_freq(struct wpa_sup
+ {
+ 	enum hostapd_hw_mode hw_mode;
+ 	struct hostapd_hw_modes *mode = NULL;
+-	int ht40plus[] = { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157,
++	int ht40plus[] = { 1, 2, 3, 4, 5, 6, 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157,
+ 			   184, 192 };
+ 	int vht80[] = { 36, 52, 100, 116, 132, 149 };
+ 	struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
+ 	u8 channel;
+-	int i, chan_idx, ht40 = -1, res, obss_scan = 1;
++	int i, chan_idx, ht40 = -1, res, obss_scan = !(ssid->noscan);
+ 	unsigned int j, k;
+ 	struct hostapd_freq_params vht_freq;
+ 	int chwidth, seg0, seg1;
+@@ -2099,7 +2099,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+ 		return;
+ 
+ 	/* Setup higher BW only for 5 GHz */
+-	if (mode->mode != HOSTAPD_MODE_IEEE80211A)
++	if (mode->mode != HOSTAPD_MODE_IEEE80211A && !(ssid->noscan))
+ 		return;
+ 
+ 	for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
+Index: hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_ssid.h
+===================================================================
+--- hostapd-2018-04-09-fa617ee6.orig/wpa_supplicant/config_ssid.h
++++ hostapd-2018-04-09-fa617ee6/wpa_supplicant/config_ssid.h
+@@ -835,6 +835,8 @@ struct wpa_ssid {
+ 	 */
+ 	int no_auto_peer;
+ 
++	int noscan;
++
+ 	/**
+ 	 * mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
+ 	 *



More information about the lede-commits mailing list