aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
diff options
context:
space:
mode:
authorLuciano Coelho <coelho@ti.com>2011-09-27 19:21:38 (GMT)
committerJouni Malinen <j@w1.fi>2011-10-15 15:53:14 (GMT)
commit6a90053cdfbf62fea6ddb1b0269b1176b796e01e (patch)
tree9a1027511200d0ad167216d446a97d59281152b9 /wpa_supplicant
parentbd525934e5f4cde3be2cd4c4def46ebaba3eaa0f (diff)
downloadhostap-6a90053cdfbf62fea6ddb1b0269b1176b796e01e.zip
hostap-6a90053cdfbf62fea6ddb1b0269b1176b796e01e.tar.gz
hostap-6a90053cdfbf62fea6ddb1b0269b1176b796e01e.tar.bz2
Add delayed scheduled scan request
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>
Diffstat (limited to 'wpa_supplicant')
-rw-r--r--wpa_supplicant/scan.c35
-rw-r--r--wpa_supplicant/scan.h2
-rw-r--r--wpa_supplicant/wpa_supplicant.c3
3 files changed, 39 insertions, 1 deletions
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index afb4423..67f46ed 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -216,6 +216,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)
{
struct wpa_supplicant *wpa_s = eloop_ctx;
@@ -615,6 +627,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
*
diff --git a/wpa_supplicant/scan.h b/wpa_supplicant/scan.h
index f9d21b0..81dee01 100644
--- a/wpa_supplicant/scan.h
+++ b/wpa_supplicant/scan.h
@@ -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);
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 82bf8b1..8f499f0 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -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++;