backport mac80211, hostapd, iw, crda from trunk as of r26369
[openwrt-10.03/.git] / package / hostapd / patches / 300-scan_ssid.patch
diff --git a/package/hostapd/patches/300-scan_ssid.patch b/package/hostapd/patches/300-scan_ssid.patch
new file mode 100644 (file)
index 0000000..47528f8
--- /dev/null
@@ -0,0 +1,37 @@
+--- a/wpa_supplicant/scan.c
++++ b/wpa_supplicant/scan.c
+@@ -251,6 +251,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;
+@@ -307,6 +308,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) {
+@@ -370,6 +381,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) {