mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 15:56:49 +00:00
6c9ac57d58
Currently for 802.1s only, for wifi 2.4GHz in g/n mode, 40MHz is never permitted. This is probably due to the complexity of setting periodic check for the intolerant bit. When noscan option is set, we ignore the presence of the intoleran bit in near AP, so we can enable 40MHz and ignore any complex logic for checking. Fixes: #13112 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
81 lines
2.6 KiB
Diff
81 lines
2.6 KiB
Diff
--- a/wpa_supplicant/config.c
|
|
+++ b/wpa_supplicant/config.c
|
|
@@ -2600,6 +2600,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) },
|
|
--- a/wpa_supplicant/config_file.c
|
|
+++ b/wpa_supplicant/config_file.c
|
|
@@ -775,6 +775,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(enable_edmg);
|
|
--- a/wpa_supplicant/mesh.c
|
|
+++ b/wpa_supplicant/mesh.c
|
|
@@ -506,6 +506,8 @@ static int wpa_supplicant_mesh_init(stru
|
|
frequency);
|
|
goto out_free;
|
|
}
|
|
+ if (conf->noscan)
|
|
+ ssid->noscan = 1;
|
|
|
|
if (ssid->mesh_basic_rates == NULL) {
|
|
/*
|
|
--- a/wpa_supplicant/wpa_supplicant.c
|
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
|
@@ -2710,7 +2710,7 @@ static bool ibss_mesh_can_use_vht(struct
|
|
const struct wpa_ssid *ssid,
|
|
struct hostapd_hw_modes *mode)
|
|
{
|
|
- if (mode->mode != HOSTAPD_MODE_IEEE80211A)
|
|
+ if (mode->mode != HOSTAPD_MODE_IEEE80211A && !(ssid->noscan))
|
|
return false;
|
|
|
|
if (!drv_supports_vht(wpa_s, ssid))
|
|
@@ -2783,7 +2783,7 @@ static void ibss_mesh_select_40mhz(struc
|
|
int i, res;
|
|
unsigned int j;
|
|
static const int ht40plus[] = {
|
|
- 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, 165, 173,
|
|
+ 1, 2, 3, 4, 5, 6, 7, 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157, 165, 173,
|
|
184, 192
|
|
};
|
|
int ht40 = -1;
|
|
@@ -3033,7 +3033,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
|
int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
|
|
enum hostapd_hw_mode hw_mode;
|
|
struct hostapd_hw_modes *mode = NULL;
|
|
- int i, obss_scan = 1;
|
|
+ int i, obss_scan = !(ssid->noscan);
|
|
u8 channel;
|
|
bool is_6ghz;
|
|
bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR);
|
|
@@ -3080,6 +3080,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
|
freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode,
|
|
ieee80211_mode);
|
|
freq->channel = channel;
|
|
+ if (mode->mode == HOSTAPD_MODE_IEEE80211G && ssid->noscan)
|
|
+ ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, dfs_enabled);
|
|
/* Setup higher BW only for 5 GHz */
|
|
if (mode->mode == HOSTAPD_MODE_IEEE80211A) {
|
|
ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, dfs_enabled);
|
|
--- a/wpa_supplicant/config_ssid.h
|
|
+++ b/wpa_supplicant/config_ssid.h
|
|
@@ -1035,6 +1035,8 @@ struct wpa_ssid {
|
|
*/
|
|
int no_auto_peer;
|
|
|
|
+ int noscan;
|
|
+
|
|
/**
|
|
* mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
|
|
*
|