38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/wpa_supplicant/scan.c
 | 
						|
+++ b/wpa_supplicant/scan.c
 | 
						|
@@ -248,6 +248,7 @@ static void wpa_supplicant_scan(void *el
 | 
						|
 	enum wps_request_type req_type = WPS_REQ_ENROLLEE_INFO;
 | 
						|
 #endif /* CONFIG_WPS */
 | 
						|
 	struct wpa_driver_scan_params params;
 | 
						|
+	int scan_ssid_all = 1;
 | 
						|
 	size_t max_ssids;
 | 
						|
 	enum wpa_states prev_state;
 | 
						|
 
 | 
						|
@@ -316,6 +317,16 @@ static void wpa_supplicant_scan(void *el
 | 
						|
 	    wpa_s->wpa_state == WPA_INACTIVE)
 | 
						|
 		wpa_supplicant_set_state(wpa_s, WPA_SCANNING);
 | 
						|
 
 | 
						|
+	/* check if all configured ssids should be scanned directly */
 | 
						|
+	ssid = wpa_s->conf->ssid;
 | 
						|
+	while (ssid) {
 | 
						|
+		if (!ssid->scan_ssid) {
 | 
						|
+			scan_ssid_all = 0;
 | 
						|
+			break;
 | 
						|
+		}
 | 
						|
+		ssid = ssid->next;
 | 
						|
+	}
 | 
						|
+
 | 
						|
 	/* Find the starting point from which to continue scanning */
 | 
						|
 	ssid = wpa_s->conf->ssid;
 | 
						|
 	if (wpa_s->prev_scan_ssid != WILDCARD_SSID_SCAN) {
 | 
						|
@@ -379,6 +390,9 @@ static void wpa_supplicant_scan(void *el
 | 
						|
 		int_array_sort_unique(params.freqs);
 | 
						|
 	}
 | 
						|
 
 | 
						|
+	if (scan_ssid_all && !ssid)
 | 
						|
+		ssid = wpa_s->conf->ssid;
 | 
						|
+
 | 
						|
 	if (ssid) {
 | 
						|
 		wpa_s->prev_scan_ssid = ssid;
 | 
						|
 		if (max_ssids > 1) {
 |