Browse Source

P2P: Fix shared freq check and support AP mode validation

The previous commit did not use the correct pointer in all operations
and was specific to station mode interfaces. Fix and extend it to work
with AP/GO interfaces, too.

Signed-hostap: Jouni Malinen <j@w1.fi>
Jouni Malinen 13 years ago
parent
commit
86ae2e8a42
1 changed files with 13 additions and 9 deletions
  1. 13 9
      wpa_supplicant/p2p_supplicant.c

+ 13 - 9
wpa_supplicant/p2p_supplicant.c

@@ -2619,15 +2619,19 @@ static int wpas_check_freq_conflict(struct wpa_supplicant *wpa_s, int freq)
 			continue;
 		if (iface->current_ssid == NULL || iface->assoc_freq == 0)
 			continue;
-		if (wpa_drv_get_bssid(iface, bssid) == 0) {
-			if (freq != (int) wpa_s->assoc_freq) {
-				wpa_printf(MSG_DEBUG, "P2P: Frequency "
-					   "conflict - %s connected on %d MHz "
-					   "- new connection on %d MHz",
-					   wpa_s->ifname, wpa_s->assoc_freq,
-					   freq);
-				return 1;
-			}
+		if (iface->current_ssid->mode == WPAS_MODE_AP ||
+		    iface->current_ssid->mode == WPAS_MODE_P2P_GO)
+			shared_freq = iface->current_ssid->frequency;
+		else if (wpa_drv_get_bssid(iface, bssid) == 0)
+			shared_freq = iface->assoc_freq;
+		else
+			shared_freq = 0;
+
+		if (shared_freq && freq != shared_freq) {
+			wpa_printf(MSG_DEBUG, "P2P: Frequency conflict - %s "
+				   "connected on %d MHz - new connection on "
+				   "%d MHz", iface->ifname, shared_freq, freq);
+			return 1;
 		}
 	}