]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
bgscan: Use monotonic time
authorJohannes Berg <johannes.berg@intel.com>
Mon, 16 Dec 2013 20:08:32 +0000 (21:08 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 05:34:43 +0000 (07:34 +0200)
The bgscan simple and learn algorithms should run regardless
of wall clock time jumps, so make them use monotonic time.

Signed-hostap: Johannes Berg <johannes.berg@intel.com>

wpa_supplicant/bgscan_learn.c
wpa_supplicant/bgscan_simple.c

index fa0475de49db57e99ae7f4104ae3aea405d9ae54..6a92b73510435304f80a307688de6b869adfa407 100644 (file)
@@ -34,7 +34,7 @@ struct bgscan_learn_data {
        int signal_threshold;
        int short_interval; /* use if signal < threshold */
        int long_interval; /* use if signal > threshold */
-       struct os_time last_bgscan;
+       struct os_reltime last_bgscan;
        char *fname;
        struct dl_list bss;
        int *supp_freqs;
@@ -310,7 +310,7 @@ static void bgscan_learn_timeout(void *eloop_ctx, void *timeout_ctx)
                eloop_register_timeout(data->scan_interval, 0,
                                       bgscan_learn_timeout, data, NULL);
        } else
-               os_get_time(&data->last_bgscan);
+               os_get_reltime(&data->last_bgscan);
        os_free(freqs);
 }
 
@@ -438,7 +438,7 @@ static void * bgscan_learn_init(struct wpa_supplicant *wpa_s,
         * us skip an immediate new scan in cases where the current signal
         * level is below the bgscan threshold.
         */
-       os_get_time(&data->last_bgscan);
+       os_get_reltime(&data->last_bgscan);
 
        return data;
 }
@@ -565,7 +565,7 @@ static void bgscan_learn_notify_signal_change(void *priv, int above,
 {
        struct bgscan_learn_data *data = priv;
        int scan = 0;
-       struct os_time now;
+       struct os_reltime now;
 
        if (data->short_interval == data->long_interval ||
            data->signal_threshold == 0)
@@ -579,7 +579,7 @@ static void bgscan_learn_notify_signal_change(void *priv, int above,
                wpa_printf(MSG_DEBUG, "bgscan learn: Start using short bgscan "
                           "interval");
                data->scan_interval = data->short_interval;
-               os_get_time(&now);
+               os_get_reltime(&now);
                if (now.sec > data->last_bgscan.sec + 1)
                        scan = 1;
        } else if (data->scan_interval == data->short_interval && above) {
@@ -594,7 +594,7 @@ static void bgscan_learn_notify_signal_change(void *priv, int above,
                 * Signal dropped further 4 dB. Request a new scan if we have
                 * not yet scanned in a while.
                 */
-               os_get_time(&now);
+               os_get_reltime(&now);
                if (now.sec > data->last_bgscan.sec + 10)
                        scan = 1;
        }
index 479f703ba9591b49824acacf3c38f93e2668e5e4..a467cc5b927195c79cfea7fd19b37f8f54bd3abe 100644 (file)
@@ -26,7 +26,7 @@ struct bgscan_simple_data {
        int max_short_scans; /* maximum times we short-scan before back-off */
        int short_interval; /* use if signal < threshold */
        int long_interval; /* use if signal > threshold */
-       struct os_time last_bgscan;
+       struct os_reltime last_bgscan;
 };
 
 
@@ -75,7 +75,7 @@ static void bgscan_simple_timeout(void *eloop_ctx, void *timeout_ctx)
                         */
                        data->short_scan_count--;
                }
-               os_get_time(&data->last_bgscan);
+               os_get_reltime(&data->last_bgscan);
        }
 }
 
@@ -159,7 +159,7 @@ static void * bgscan_simple_init(struct wpa_supplicant *wpa_s,
         * us skip an immediate new scan in cases where the current signal
         * level is below the bgscan threshold.
         */
-       os_get_time(&data->last_bgscan);
+       os_get_reltime(&data->last_bgscan);
 
        return data;
 }
@@ -211,7 +211,7 @@ static void bgscan_simple_notify_signal_change(void *priv, int above,
 {
        struct bgscan_simple_data *data = priv;
        int scan = 0;
-       struct os_time now;
+       struct os_reltime now;
 
        if (data->short_interval == data->long_interval ||
            data->signal_threshold == 0)
@@ -225,7 +225,7 @@ static void bgscan_simple_notify_signal_change(void *priv, int above,
                wpa_printf(MSG_DEBUG, "bgscan simple: Start using short "
                           "bgscan interval");
                data->scan_interval = data->short_interval;
-               os_get_time(&now);
+               os_get_reltime(&now);
                if (now.sec > data->last_bgscan.sec + 1 &&
                    data->short_scan_count <= data->max_short_scans)
                        /*
@@ -259,7 +259,7 @@ static void bgscan_simple_notify_signal_change(void *priv, int above,
                 * Signal dropped further 4 dB. Request a new scan if we have
                 * not yet scanned in a while.
                 */
-               os_get_time(&now);
+               os_get_reltime(&now);
                if (now.sec > data->last_bgscan.sec + 10)
                        scan = 1;
        }