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.