]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add delayed scheduled scan request
authorLuciano Coelho <coelho@ti.com>
Tue, 27 Sep 2011 19:21:38 +0000 (22:21 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 15 Oct 2011 15:53:14 +0000 (18:53 +0300)
When initializing, the scheduled scan code was being called before
everything is ready. With normal scans, the first scan round is
delayed, so the initialization is finished by the time it really
starts.

Add a function that can be used to request a delayed scheduled scan.
The scan will only start after the specified time has elapsed. Call
this function instead of starting the scheduled scan directly during
driver initialization.

Signed-off-by: Luciano Coelho <coelho@ti.com>
wpa_supplicant/scan.c
wpa_supplicant/scan.h
wpa_supplicant/wpa_supplicant.c

index afb44237f9ebe3dd533a117e562bf4d05dcab512..67f46ed2d58d3f898303adb467776977ec390138 100644 (file)
@@ -215,6 +215,18 @@ int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s,
 }
 
 
+static void
+wpa_supplicant_delayed_sched_scan_timeout(void *eloop_ctx, void *timeout_ctx)
+{
+       struct wpa_supplicant *wpa_s = eloop_ctx;
+
+       wpa_dbg(wpa_s, MSG_DEBUG, "Starting delayed sched scan");
+
+       if (wpa_supplicant_req_sched_scan(wpa_s))
+               wpa_supplicant_req_scan(wpa_s, 0, 0);
+}
+
+
 static void
 wpa_supplicant_sched_scan_timeout(void *eloop_ctx, void *timeout_ctx)
 {
@@ -614,6 +626,29 @@ void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec)
 }
 
 
+/**
+ * wpa_supplicant_delayed_sched_scan - Request a delayed scheduled scan
+ * @wpa_s: Pointer to wpa_supplicant data
+ * @sec: Number of seconds after which to scan
+ * @usec: Number of microseconds after which to scan
+ *
+ * This function is used to schedule periodic scans for neighboring
+ * access points after the specified time.
+ */
+int wpa_supplicant_delayed_sched_scan(struct wpa_supplicant *wpa_s,
+                                     int sec, int usec)
+{
+       if (!wpa_s->sched_scan_supported)
+               return -1;
+
+       eloop_register_timeout(sec, usec,
+                              wpa_supplicant_delayed_sched_scan_timeout,
+                              wpa_s, NULL);
+
+       return 0;
+}
+
+
 /**
  * wpa_supplicant_req_sched_scan - Start a periodic scheduled scan
  * @wpa_s: Pointer to wpa_supplicant data
index f9d21b0568df165ca29ebf0c634c2a87416559ae..81dee01ba3350ac10ccaf02bb7a3988eb3e384be 100644 (file)
@@ -17,6 +17,8 @@
 
 int wpa_supplicant_enabled_networks(struct wpa_config *conf);
 void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec);
+int wpa_supplicant_delayed_sched_scan(struct wpa_supplicant *wpa_s,
+                                     int sec, int usec);
 int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_cancel_scan(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_cancel_sched_scan(struct wpa_supplicant *wpa_s);
index 82bf8b1519c5f0ef2dcabdd8b704e6a473dda151..8f499f05c89cadf4dab0d8bb1497d504d656c6d0 100644 (file)
@@ -2090,7 +2090,8 @@ int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s)
 
        wpa_s->prev_scan_ssid = WILDCARD_SSID_SCAN;
        if (wpa_supplicant_enabled_networks(wpa_s->conf)) {
-               if (wpa_supplicant_req_sched_scan(wpa_s))
+               if (wpa_supplicant_delayed_sched_scan(wpa_s, interface_count,
+                                                     100000))
                        wpa_supplicant_req_scan(wpa_s, interface_count,
                                                100000);
                interface_count++;