Seamless Wifi handover with OpenWRT

When there are more than one wifi access points covering an area, the mobile clients need to perform a handover while translocating between the access points (roaming).

This should be as smooth as possible (no dropped connections while e.g. on a video call) and the mobile client should always choose the best access point available (signal quality, throughput). Unfortunately, there is a phenomen called "sticky clients".

There are multiple approaches to solve this problem:

  • routers that support mesh networking (con: requires new hardware)
  • actively disconnecting clients with bad reception (con: requires additional infrastructure and is not easily configured correctly)
  • Use 802.11 extensions implemented for this use-case, namely 802.11r, 802.11k and 802.11v

Regarding the 802.11 extensions, there are many blogposts regarding on how to implement with OpenWRT, especially this prominent reddit thread. Since quite some time passed since then, the current state of OpenWRT changed a lot towards easier configuration.

Basically (with a recent 19.07.7 firmware, e.g. described here) its necessary to have a full wpad package and the following additional configuration in /etc/config/wireless:

config wifi-iface
  option ieee80211r "1"
  option mobility_domain "e612"

In order to motivate clients jump to nearer/faster accesspoints, it might be helpful to disable legacy rates and set the beacon transmission via basic_rate to a somewhat higher rate, that way, devices will need to be closer to connect to the AP.

This can be achieved by placing this in /etc/config/wireless:

config wifi-device
  option basic_rate '12000 18000 24000 36000 48000 54000'
  option supported_rates '12000 18000 24000 36000 48000 54000'
  # or
  option legacy_rates '0'

Further option might be to enable 802.11v and 802.11k with latest snapshot images but this requires some scripting or DAWN.

For a setup where the APs are connected via wifi as well (WWAN), 802.11s might be a useful addition (as opposed to other relay options)as described in this great blog post.