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
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
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'