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.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
Daniel Golle
2018-04-20 07:41:03 +02:00
parent 465d4bc538
commit 7f52919a2f
5 changed files with 213 additions and 1 deletions

View File

@@ -0,0 +1,65 @@
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++) {