802.11k/v/r on its own is not always sufficient for roaming specially if you have old clients on the network(5 years or older).
Almost every wifi solution like Omada or UI comes with additional heuristics based mechanisms to trigger roaming.
There are also bugs/missing features in 802.11r in openwrt. For example, it does not work if you are using 802.11w or Wifi 6
Also, during roaming it's supposed to do a shortened version of handshake for auth but right now it does a full 4 way handshake afaik or atleast that's what I see in the logs when a client switches to a different ap
I've noticed that the 802.11k/v needs extra daemons to be configured (e.g usteer) and overall the documentation is very spotty. (for quite most "modern" features actually). You almost have to be lucky to find the correct forum post of a random person that actually figured things out. WRT 802.11r, I've noticed handovers failing in my laptops dmesg when running different patch versions of 24.10 release in my network. I'm not yet on Wifi6 so not there yet ;) If you have some more resources on that (forum post/bug that would be nice!)
1. https://github.com/openwrt/openwrt/issues/9181
2. https://github.com/openwrt/openwrt/issues/9071
802.11k/v works well enough but the problem is when you are roaming the device is likely to see 2.4ghz network before it sees 5ghz network. Unless the manufacturers considered this scenario, the device will connect to 2.4ghz and remain connected to that instead of upgrading to higher bands. You need usteer in these situations.
You can also kind of patch this problem by setting beacon interval for 5/6ghz networks shorter than beacon interval for 2.4ghz network.
Also the problem with usteer is, they took the easy way out and do broadcast for syncing with other usteer instances instead of multicast so it's a lot of wasted bandwidth and it'll hit all the devices in that l2 segment.