DAWN - the BSS transition controller - and tips on making it work properly
(Edit: If you have read this post before, please ignore what I posted before and re-read my updated content below, as there has been a number of drastic changes due to an inaccurate testing methodology in my previous attempt at configuring DAWN !)
For those who have not heard of DAWN, it allows Openwrt to steer clients to the AP with the strongest signal.
I spent a week experimenting with it to make it function the way I want it to (with several days' worth of effort wasted due to an app I used call "WiFi Analyzer" for my android phone. This app turns out to have the capability to make my phone make Wifi roaming decisions on its own, when I thought DAWN was the steering source). So these tips are what made it work for my environment. Please be reminded that every network setup is unique, and what works for me may require some additional tweaking for you.
Use the site to do the initial installation and configuration.
As for the tips:
None of the faq's and wikis state this explicitly I believe: DAWN needs to be setup on EACH of your Openwrt bridge / gateway routers that's part of your connected / mesh Wifi. Each DAWN instance fires BSS transition instructions to clients that are currently connected to that particular router. So routers with no DAWN running on it will never be able to tell the clients it is time to move to another AP.
Also I had problem getting umdns (a DAWN dependency) to start working properly at router startup, so I had to write a startup script to give umdns some encouragement each time the router is powered on. If you run into the same issue, let me know and I can share my script. The symptom of DAWN not working due to this issue is the inability to show neighbor APs in DAWN's "View Network Overview".
Once you get DAWN up and running, it is all about tweaking the config file (and remember to update the file on each of your Openwrt router with DAWN running) to:
make each wireless client send proper beacon reports to show DAWN the signal strength of each AP that each client sees at any give time, and
make DAWN send out BSS transition requests in a nimble manner (otherwise wifi is disconnected before any roaming can even take place)
Note that for both points 1 and 2 above, I treated DAWN as a black box and just did a lot of trial and error experiments to make it work eventually. So some of the tweaks may look crazy, but it worked for me after making these changes.
1 - Making clients send beacon report that covers EVERY single AP they see (probably more power demanding resulting in more battery drain (?), but necessary for DAWN to have the information it needs to send out instructions accurately:
Under "config metric 'global'", update the values to the following:
DAWN includes a feature to attempt steering "Legacy clients" that don't support 802.11v as documented in its github page. It DOESN'T work well. My testings show it very often severs the wifi connection of these 'legacy clients' before the client can make a new connection. And it also confuses clients that properly support 802.11v. My update disables this feature altogether.
DAWN includes a alternative "kicking method" that considers the absolute RSSI (see "Kicking Method 2: Absolute RSSI" in DAWN's github website). It DOESN'T work well and serves to confuse everything. My update disables this feature altogether.
DAWN's decision making process is sped up with changes made in min_number_to_kick. I tried decreasing chan_util_avg_period also but the kicking got too jittery.
By changing rrm_mode and duration, WiFi clients will now send "active" beacon reports which means they will actively seek out APs they can connect to and gather info on each AP's signal strength to provide to DAWN. The duration parameter gives these clients enough time to gather the info it needs to generate beacon reports.
2 - Making DAWN work the way you want it to
This part is more like an art where your 'personal taste' comes into play. Here is my own underlying principle (yours may differ):
I have several radios in both 2.4GHz and 5GHz. The stronger the signal, the more a 5GHz AP takes precedence even if there is a neighboring 2.4GHz AP with as strong a (or even stronger) signal.
If all of the 5GHz APs are weak (say -70dBm or less), I will then prefer 2.4GHz that are more stable even at the same dBm level.
With this in mind, I only ended up utilizing the rssi_weight and disabled other calculation methods to determine each AP's final score. Here are the settings:
One caveat - be very cautious if you decide to use rssi_val or low_rssi_val (my above suggestion disables them). If used, the final scores can become super jerky especially when an APs signal strength borders on the threshold. This can easily cause insane jumping back and forth between different APs, and you end up confusing your network client and DAWN.
That's pretty much it ! DAWN works beautifully but only when your settings are right.
Fast Transition has been on my todos list for a while now, and I haven't had much time configuring openwrt after I got a second router.
Would BSS also work for ethernet backed/ linked devices? Would love to know, since i only have a two band router on either side, and wouldn't want to sacrifice a band for band negotiation.
Just wanted to let you know I have made quite a bit of changes to my original post. Please go take a look, and just ignore what I said previously... :)
And to answer your question - yes absolutely. Doesn't matter if it is a mesh backhaul or ethernet. As long as the SSIDs of your wireless APs have the same name (and password), DAWN will work.
just bought RT-AX53U, installed openwrt on it and want to make my devices prefer 5GHz until the signal strength is absolutely atrocious, so a few questions:
is DAWN a tool that can achieve it?
should i disable 802.11r? seems like those are separate technologies with similar goals?
maybe it's a stupid question but DAWN documentation seems to be vague about this, do connection need HIGHER or lower score to be prioritised? anyway, i gave a ridiculously high initial_score for 802_11a and in hearing map i see my phone preferring 2.4GHz with score 80 and 5.GHZ has score of 0