bgscan: Use monotonic time
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>
This commit is contained in:
parent
e05f0605bf
commit
e72a001b0f
2 changed files with 12 additions and 12 deletions
|
@ -34,7 +34,7 @@ struct bgscan_learn_data {
|
||||||
int signal_threshold;
|
int signal_threshold;
|
||||||
int short_interval; /* use if signal < threshold */
|
int short_interval; /* use if signal < threshold */
|
||||||
int long_interval; /* use if signal > threshold */
|
int long_interval; /* use if signal > threshold */
|
||||||
struct os_time last_bgscan;
|
struct os_reltime last_bgscan;
|
||||||
char *fname;
|
char *fname;
|
||||||
struct dl_list bss;
|
struct dl_list bss;
|
||||||
int *supp_freqs;
|
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,
|
eloop_register_timeout(data->scan_interval, 0,
|
||||||
bgscan_learn_timeout, data, NULL);
|
bgscan_learn_timeout, data, NULL);
|
||||||
} else
|
} else
|
||||||
os_get_time(&data->last_bgscan);
|
os_get_reltime(&data->last_bgscan);
|
||||||
os_free(freqs);
|
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
|
* us skip an immediate new scan in cases where the current signal
|
||||||
* level is below the bgscan threshold.
|
* level is below the bgscan threshold.
|
||||||
*/
|
*/
|
||||||
os_get_time(&data->last_bgscan);
|
os_get_reltime(&data->last_bgscan);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -565,7 +565,7 @@ static void bgscan_learn_notify_signal_change(void *priv, int above,
|
||||||
{
|
{
|
||||||
struct bgscan_learn_data *data = priv;
|
struct bgscan_learn_data *data = priv;
|
||||||
int scan = 0;
|
int scan = 0;
|
||||||
struct os_time now;
|
struct os_reltime now;
|
||||||
|
|
||||||
if (data->short_interval == data->long_interval ||
|
if (data->short_interval == data->long_interval ||
|
||||||
data->signal_threshold == 0)
|
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 "
|
wpa_printf(MSG_DEBUG, "bgscan learn: Start using short bgscan "
|
||||||
"interval");
|
"interval");
|
||||||
data->scan_interval = data->short_interval;
|
data->scan_interval = data->short_interval;
|
||||||
os_get_time(&now);
|
os_get_reltime(&now);
|
||||||
if (now.sec > data->last_bgscan.sec + 1)
|
if (now.sec > data->last_bgscan.sec + 1)
|
||||||
scan = 1;
|
scan = 1;
|
||||||
} else if (data->scan_interval == data->short_interval && above) {
|
} 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
|
* Signal dropped further 4 dB. Request a new scan if we have
|
||||||
* not yet scanned in a while.
|
* not yet scanned in a while.
|
||||||
*/
|
*/
|
||||||
os_get_time(&now);
|
os_get_reltime(&now);
|
||||||
if (now.sec > data->last_bgscan.sec + 10)
|
if (now.sec > data->last_bgscan.sec + 10)
|
||||||
scan = 1;
|
scan = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ struct bgscan_simple_data {
|
||||||
int max_short_scans; /* maximum times we short-scan before back-off */
|
int max_short_scans; /* maximum times we short-scan before back-off */
|
||||||
int short_interval; /* use if signal < threshold */
|
int short_interval; /* use if signal < threshold */
|
||||||
int long_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--;
|
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
|
* us skip an immediate new scan in cases where the current signal
|
||||||
* level is below the bgscan threshold.
|
* level is below the bgscan threshold.
|
||||||
*/
|
*/
|
||||||
os_get_time(&data->last_bgscan);
|
os_get_reltime(&data->last_bgscan);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -211,7 +211,7 @@ static void bgscan_simple_notify_signal_change(void *priv, int above,
|
||||||
{
|
{
|
||||||
struct bgscan_simple_data *data = priv;
|
struct bgscan_simple_data *data = priv;
|
||||||
int scan = 0;
|
int scan = 0;
|
||||||
struct os_time now;
|
struct os_reltime now;
|
||||||
|
|
||||||
if (data->short_interval == data->long_interval ||
|
if (data->short_interval == data->long_interval ||
|
||||||
data->signal_threshold == 0)
|
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 "
|
wpa_printf(MSG_DEBUG, "bgscan simple: Start using short "
|
||||||
"bgscan interval");
|
"bgscan interval");
|
||||||
data->scan_interval = data->short_interval;
|
data->scan_interval = data->short_interval;
|
||||||
os_get_time(&now);
|
os_get_reltime(&now);
|
||||||
if (now.sec > data->last_bgscan.sec + 1 &&
|
if (now.sec > data->last_bgscan.sec + 1 &&
|
||||||
data->short_scan_count <= data->max_short_scans)
|
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
|
* Signal dropped further 4 dB. Request a new scan if we have
|
||||||
* not yet scanned in a while.
|
* not yet scanned in a while.
|
||||||
*/
|
*/
|
||||||
os_get_time(&now);
|
os_get_reltime(&now);
|
||||||
if (now.sec > data->last_bgscan.sec + 10)
|
if (now.sec > data->last_bgscan.sec + 10)
|
||||||
scan = 1;
|
scan = 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue