Browse Source

P2P: Do not allow 40 MHz co-ex PRI/SEC switch to force MCC

Do not allow 40 MHz co-ex PRI/SEC switch to force us to change our PRI
channel if we have an existing connection on the selected PRI channel
since doing multi-channel concurrency is likely to cause more harm than
using different PRI/SEC selection in environment with multiple BSSes on
these two channels with mixed 20 MHz or PRI channel selection.

Signed-off-by: Jouni Malinen <j@w1.fi>
Jouni Malinen 9 years ago
parent
commit
55413ce072
3 changed files with 32 additions and 2 deletions
  1. 1 0
      src/ap/ap_config.h
  2. 8 2
      src/ap/hw_features.c
  3. 23 0
      wpa_supplicant/ap.c

+ 1 - 0
src/ap/ap_config.h

@@ -619,6 +619,7 @@ struct hostapd_config {
 	u16 ht_capab;
 	u16 ht_capab;
 	int ieee80211n;
 	int ieee80211n;
 	int secondary_channel;
 	int secondary_channel;
+	int no_pri_sec_switch;
 	int require_ht;
 	int require_ht;
 	int obss_interval;
 	int obss_interval;
 	u32 vht_capab;
 	u32 vht_capab;

+ 8 - 2
src/ap/hw_features.c

@@ -260,8 +260,14 @@ static int ieee80211n_check_40mhz_5g(struct hostapd_iface *iface,
 
 
 	res = check_40mhz_5g(iface->current_mode, scan_res, pri_chan, sec_chan);
 	res = check_40mhz_5g(iface->current_mode, scan_res, pri_chan, sec_chan);
 
 
-	if (res == 2)
-		ieee80211n_switch_pri_sec(iface);
+	if (res == 2) {
+		if (iface->conf->no_pri_sec_switch) {
+			wpa_printf(MSG_DEBUG,
+				   "Cannot switch PRI/SEC channels due to local constraint");
+		} else {
+			ieee80211n_switch_pri_sec(iface);
+		}
+	}
 
 
 	return !!res;
 	return !!res;
 }
 }

+ 23 - 0
wpa_supplicant/ap.c

@@ -142,6 +142,29 @@ void wpa_supplicant_conf_ap_ht(struct wpa_supplicant *wpa_s,
 			}
 			}
 		}
 		}
 	}
 	}
+
+	if (conf->secondary_channel) {
+		struct wpa_supplicant *iface;
+
+		for (iface = wpa_s->global->ifaces; iface; iface = iface->next)
+		{
+			if (iface == wpa_s ||
+			    iface->wpa_state < WPA_AUTHENTICATING ||
+			    (int) iface->assoc_freq != ssid->frequency)
+				continue;
+
+			/*
+			 * Do not allow 40 MHz co-ex PRI/SEC switch to force us
+			 * to change our PRI channel since we have an existing,
+			 * concurrent connection on that channel and doing
+			 * multi-channel concurrency is likely to cause more
+			 * harm than using different PRI/SEC selection in
+			 * environment with multiple BSSes on these two channels
+			 * with mixed 20 MHz or PRI channel selection.
+			 */
+			conf->no_pri_sec_switch = 1;
+		}
+	}
 #endif /* CONFIG_IEEE80211N */
 #endif /* CONFIG_IEEE80211N */
 }
 }