[2/2] mesh: implement use of VHT20 config in mesh mode

Message ID 49685a6dc46ccffa4d8e9d85fdaa0ad5946d6c48.1524081526.git.peter.oh@bowerswilkins.com
State New
Headers show
Series
  • mesh-add-supports-mesh-configurable-bandwidth
Related show

Commit Message

Peter Oh April 18, 2018, 9:14 p.m.
From: Peter Oh <peter.oh@bowerswilkins.com>

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@bowerswilkins.com>
---
 wpa_supplicant/wpa_supplicant.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

Patch

diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index c2253a047..d1441d913 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,