Wi-Fi roaming recipe

About Wi-Fi roaming, I'd like to share my experience. I hope it will be useful to all of you.

I've been "googling" a lot about wi-fi roaming. What I wanted was a seamless switch from one AP to another one. 802.11 extensions k, v and r are supposed to help, mas not every client implements them. It seems that Android and Windows uses just some of them. I've read that iOS devices seem to take better use, but I can't confirm since I don't own one. I tried a OpenWrt build with the complete wpad package, so I could use some of these extensions. After some tests, it was not that good.

There were people claiming that a good solution was to disable low transfer rates. This seems to be incorrect and could lead to a worse scenario.

A really good solution is to reduce transmission power on each AP. When signal becomes very weak, clients will search for a better AP and make the switch. But only in this very weak signal situation. This is why you need to reduce transmission power. You can use an app (such has Android Wifi Analyzer) to monitor signal strength while you walk around. Adjust power as needed.

Even with all this, some clients may still get attached to a low signal (but still useful) AP and refuse to switch. To help with that, I used the wifi-disconnect-low-signal script on all APs, which disconnects clients when signal is not good, forcing them to switch AP. It works great.

Now the recipe: First of all, I adjusted transmission power in each AP so that I get a lower limit of -70dBm at the furthest places. Then I configured wifi-disconnect-low-signal SNR limits to 35 (connect) and -30 (stay). It is important to make sure that when the scripts disconnects a client, there will be a strong AP nearby. Otherwise, the client will be disconnect again, resulting in a bad experience. Try and error is needed until you get a good balance. For this, I opened two SSH sessions on each AP: on the first session I run wifi-disconnect-low-signal in verbose mode (-v -v); on the second session I watched OpenWrt system log (logread -f). Then I slowly walked around, while monitoring it all. This way I could watch when I was disconnected from one AP and connected to another one, verifying if it occurred at the right time/place.

Since then I've been able to walk around and still get a stable SSH connection and a stable VoIP conversation.


Very useful post thank you. I implemented wifi-disconnect-low-signal on my 2 APs and it works great for both my iphone and my windows tablet.

But my Android phone just cannot have 802.11r enabled. I have spent days trying to configure it (my phone is rooted), even go so far as to modifying the WCNSS_qcom_cfg.ini file in read-only system image to try and tweak the wifi setup. But it simply refuses to stay connected when it makes the jump to another AP. Good that I can put this piece of junk into the black list so at least other devices can still benefit from the setup...

Got 802.11r working even with my Android phone.

And still using this wifi-disconnect-low-signal script. It now works great for all of my devices. I'd say 90% of the time my Android phone (which happens to be my main device) now roams seamlessly between my two routers. Dunno why it occasionally still fails to roam (disconnects before reconnecting to the other router), but I am not complaining.

19.07.4 still does not have 802.11k and 802.11v incorporated, and this script to me is definitely the next best thing to make my wireless devices switch to the router with a stronger signal.

Thanks for this! :+1: