Re: Flush scan list on resume
- From: Tony Espy <espy canonical com>
- To: Dan Williams <dcbw redhat com>
- Cc: Howard Chu <hyc symas com>, networkmanager-list gnome org
- Subject: Re: Flush scan list on resume
- Date: Wed, 04 Feb 2009 18:04:11 -0500
Dan Williams wrote:
On Wed, 2009-02-04 at 12:45 -0500, Dan Williams wrote:
On Tue, 2009-02-03 at 22:38 -0800, Howard Chu wrote:
I haven't gone looking for this in the code yet, does NM get a DBUS event on
standby/suspend and/or resume? It would be nice if it would flush its AP list
at (one of) these points. I frequently set my laptop to sleep before going
elsewhere; when I wake up its scan list shows all the APs in the new location
but it also still shows the AP I was last associated with (even though it's
not in the present location) and tries (fruitlessly) to reassociate with it.
It should just forget the old info and only use the new scan results.
It does flush the scan list [1]. I looked into this a long time ago
(should probably do so again), and the actual problem wasn't in NM, but
in the supplicant or the driver, which had results left over from before
the suspend. NM got those results when requesting the latest results
from the supplicant. That's not to say that we can't do something fun
with "last_beacon" IE of the results, if we can get that from the
supplicant.
So here's why old access points show up after resume...
Executive summary: exclusively a *driver* problem
Detailed explanation:
Most kernel drivers use 'jiffies' as the timestamp for each scan result.
jiffies is a kernel counter that counts *while the kernel is alive*, and
thus does not reflect time spent in suspend and hibernate.
When the supplicant requests scan results from the driver on resume, the
supplicant (and NM) gets back a list of scan results with recent-looking
timestamps that do not reflect the time the machine was suspended.
The solutions are to move drivers to using the actual machine clock (the
kernel equivalent of time(2)) for last_beacon, or to be more agressive
about expiring entries on resume with something like (10 - time spent in
sleep).
How 'bout getting drivers to add code to their resume functions that
just clears the scan results queue?
For reference see:
http://madwifi-project.org/ticket/740
Ciao,
/tony
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]