(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.
It is very important to get up to speed with the basics by going through this website first and foremost: https://github.com/berlin-open-wireless-lab/DAWN
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:
option min_probe_count '0'
option bandwidth_threshold '0'
option use_station_count '0'
option max_station_diff '1'
option eval_probe_req '0'
option eval_auth_req '0'
option eval_assoc_req '0'
option kicking '1'
option kicking_threshold '40'
option deny_auth_reason '1'
option deny_assoc_reason '17'
option min_number_to_kick '2'
option chan_util_avg_period '3'
option set_hostapd_nr '1'
option duration '200'
option rrm_mode 'apt'
These values have the following effect:
- 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 decreasingchan_util_avg_period
also but the kicking got too jittery. - By changing
rrm_mode
andduration
, 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. Theduration
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:
config metric '802_11g'
option initial_score '200'
option ht_support '0'
option vht_support '0'
option no_ht_support '0'
option no_vht_support '0'
option rssi '0'
option rssi_val '-10'
option low_rssi_val '-50'
option low_rssi '0'
option chan_util '0'
option chan_util_val '140'
option max_chan_util '0'
option max_chan_util_val '170'
option rssi_weight '4'
option rssi_center '-25'
config metric '802_11a'
option initial_score '80'
option ht_support '0'
option vht_support '0'
option no_ht_support '0'
option no_vht_support '0'
option rssi '0'
option rssi_val '-10'
option low_rssi_val '-65'
option low_rssi '0'
option chan_util '0'
option chan_util_val '140'
option max_chan_util '0'
option max_chan_util_val '170'
option rssi_weight '8'
option rssi_center '-65'
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.
This will likely help: https://openwrt.org/docs/guide-developer/debugging
I would first try and see what hostapd says after increasing it's log level...