Update scan interval gracefully
When the scan interval is changed the new interval is effective after the old interval timer fires off one last time. This can cause an unacceptable long delay when updating the interval. Change this behaviour to use MIN(left of old interval, new interval) for the scan interval following the interval change. Signed-hostap: Pontus Fuchs <pontus.fuchs@gmail.com>
This commit is contained in:
parent
c869536ce9
commit
9e737f08d4
3 changed files with 23 additions and 1 deletions
|
@ -816,6 +816,27 @@ scan:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec)
|
||||||
|
{
|
||||||
|
struct os_time remaining, new_int;
|
||||||
|
int cancelled;
|
||||||
|
|
||||||
|
cancelled = eloop_cancel_timeout_one(wpa_supplicant_scan, wpa_s, NULL,
|
||||||
|
&remaining);
|
||||||
|
|
||||||
|
new_int.sec = sec;
|
||||||
|
new_int.usec = 0;
|
||||||
|
if (cancelled && os_time_before(&remaining, &new_int)) {
|
||||||
|
new_int.sec = remaining.sec;
|
||||||
|
new_int.usec = remaining.usec;
|
||||||
|
}
|
||||||
|
|
||||||
|
eloop_register_timeout(new_int.sec, new_int.usec, wpa_supplicant_scan,
|
||||||
|
wpa_s, NULL);
|
||||||
|
wpa_s->scan_interval = sec;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_req_scan - Schedule a scan for neighboring access points
|
* wpa_supplicant_req_scan - Schedule a scan for neighboring access points
|
||||||
* @wpa_s: Pointer to wpa_supplicant data
|
* @wpa_s: Pointer to wpa_supplicant data
|
||||||
|
|
|
@ -32,5 +32,6 @@ struct wpabuf * wpa_scan_get_vendor_ie_multi(const struct wpa_scan_res *res,
|
||||||
u32 vendor_type);
|
u32 vendor_type);
|
||||||
int wpa_supplicant_filter_bssid_match(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_filter_bssid_match(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *bssid);
|
const u8 *bssid);
|
||||||
|
void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec);
|
||||||
|
|
||||||
#endif /* SCAN_H */
|
#endif /* SCAN_H */
|
||||||
|
|
|
@ -1980,7 +1980,7 @@ int wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
wpa_msg(wpa_s, MSG_DEBUG, "Setting scan interval: %d sec",
|
wpa_msg(wpa_s, MSG_DEBUG, "Setting scan interval: %d sec",
|
||||||
scan_interval);
|
scan_interval);
|
||||||
wpa_s->scan_interval = scan_interval;
|
wpa_supplicant_update_scan_int(wpa_s, scan_interval);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue