adventures in wifi roaming

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

adventures in wifi roaming

quisquous
I am working on a script that keeps me connected to wifi all the time
and I thought it might be neat to have it notice when the signal is
weak and look for another station with a different BSSID but the same
SSID to connect to and connect to it with minimal interruption.
ifconfig let's me notice the weak signal easily enough, i.e.:

ifconfig iwm0 | grep bssid | sed -E "s/.*bssid.* (.*)%.*/\1/g" | tr -d '\n'

but I don't yet see a way to scan for other BSSIDs and their signal
strengths, at least, not without an interruption. Maybe I'll wait for
a low traffic point to do the scan.

I ran "ping 8.8.8.8" in one window and "ifconfig iwm0 scan" in
another, and I noticed dropped packets during the scan (boo!). I also
noticed that, after the scan, the BSSID changed to the one with the
strongest signal using the same SSID (yay!), but regardless of whether
a switch was made, it seemed like the media/mode was renegotiated,
starting with the slowest and ramping up to the fastest it could.

I'm running a snapshot from mid-November. I looked through the man
pages for ifconfig and for iwm and I didn't see anything that leads me
to expect dropped packets or switching BSSIDs during a scan. But in
the FreeBSD ifconfig man page it talks about a 'background scanning'
feature:

https://www.freebsd.org/cgi/man.cgi?ifconfig(8)

which leads me to think that the interruption is normal, but some
other OSes + certain wireless chips have a background scanning
feature.

Some other interesting, related man pages are: rssadapt, ieee80211. My
script is over here: https://github.com/bonds/winot It's not really in
a shape that others could use it easily, so, you know, keep that in
mind in case you decide to eyeball it, I include it here for academic
purposes, if you will. :)

I started this email thinking I had a question, but I was able to
answer all my questions, but I thought I'd share anyway in case
someone might find in interesting.