Lets talk about usteer

From my reading of the code, if you have both SSIDs the same, just list it once in the ssid_list and it should mark both as enabled.

1 Like

Thanks. I added my one SSID to the ssid_list configuration item about 12 hours ago. Do I understand this "band steering" correctly that it should be bumping clients off of 2.4 and onto 5 whenever the 5 is within a minimum signal level? And if so, is that minimum signal level specified by the band_steering_min_snr configuration item? I'm not seeing it happen for devices I'd expect that to happen on yet.

1 Like

Yes that is what i'd expect.
You could try turning up the message verbosity and just watching what it does and whether it is even attempting to do steering? Maybe your device is refusing and it is otherwise working

1 Like

Will do. Are there very specific log messages or message sequences that can be used to identify positively whether usteer is steering devices towards other bands?

Also is there a good way to determine the specific reason a client may be rejecting steering requests? I still see a lot of status code 1 and 7 in BSS-TM-RESP log entries.

And I still haven't seen evidence that devices are being steered to 5GHz by usteer.

1 Like

That only happens on Samsung phones, because band steering is broken on those phones, on Google Pixel phones it works without problems.

I've played around with usteer for a few days now.
Basically it is working (just standard options changed: network, ssid, assoc_steering). But for my feeling it takes to long until the phones are getting switched. So I'm searching for advise which values are worth to try to tweak to force roaming earlier?

I've identified two options which would me make think are worth to try. But I have no clue what values are proper. E. g.:

Minimum signal-to-noise ratio or signal level (dBm) to allow connection
option min_connect_snr 0
Minimum signal-to-noise ratio or signal level (dBm) to remain connected
option min_snr 0

Another thing is that I've issues with another router Xiaomi AX6S/AX3200. For the 5GHz band there is no value for "dBm" available. Neither in LuCI nor ubus (applies to 22.03.1 and latest snapshot). So usteer is lacking needed values (my guess). The result is no roaming with usteer enabled (e. g. noise is empty):

dbm

# ubus call usteer local_info

{
        "hostapd.wlan0-1": {
                "bssid": "xx:xx:xx:xx:xx:42",
                "ssid": "WLAN1111",
                "freq": 2422,
                "n_assoc": 0,
                "noise": -90,
                "load": 6,
                "max_assoc": 0,
                "roam_events": {
                        "source": 0,
                        "target": 0
                },
                "rrm_nr": [
                        "xx:xx:xx:xx:xx:42",
                        "WLAN1111",
                        "......3000300"
                ]
        },
        "hostapd.wlan1-1": {
                "bssid": "xx:xx:xx:xx:xx:43",
                "ssid": "WLAN1111",
                "freq": 5260,
                "n_assoc": 0,
                "noise": 0,
                "load": 0,
                "max_assoc": 0,
                "roam_events": {
                        "source": 0,
                        "target": 0
                },
                "rrm_nr": [
                        "xx:xx:xx:xx:xx:43",
                        "WLAN1111",
                        ".......3023a00"
                ]
        }

It might be this helps others if they have the feeling sth. is not working correctly. If someone has an easy fix for this just let me know.

I'm seeing these errors with a Samsung phone too and the band steering does seem to be problematic. Do you have any idea whether there's any option or configurable item that can be used either to fix things for the Samsung phone or to reduce the problems?

Motorola One Vision, Android 11 (newest), the same...
status_code=1 bss_termination_delay=0

1 Like

I also have a Google Pixel 6 and its exhibiting this same behavior. However it's running GrapheneOS (Android 13). I assume it's something to do with GrapheneOS's hardening that is causing it. I plan on inquiring about it with the GOS maintainer.

1 Like

I gave this a try and usteerd is posting the bss transition request on ubus but none of the devices will switch to 5 ghz. My phone isn't even responding and from other devices I get messages like the following.

BSS-TM-RESP MAC1 status_code=7 bss_termination_delay=0
BSS-TM-RESP MAC2 status_code=0 bss_termination_delay=0 target_bssid=MAC3
BSS-TM-RESP MAC2 status_code=7 bss_termination_delay=0
BSS-TM-RESP MAC1 status_code=7 bss_termination_delay=0
	option ieee80211r '1'
	option ft_over_ds '0'
	option ft_psk_generate_local '1'
	option disabled '0'
	option ieee80211k '1'
	option wnm_sleep_mode '1'
	option time_advertisement '2'
	option time_zone 'GMT0'
	option bss_transition '1'

All the settings also show up in hostapd configs for the two wifi interfaces. I have one AP with one 2 ghz and one 5 ghz wifi interface both with the same SSID as required.

@blocktrron @blogic Is it maybe just missing disassociation_timer here?

I tried to send the bss_transition_request directly from the cli on ubus and found that none of my devices will switch to another ap / band if it is 0 (the default), they basically won't do anything at all, while all of them will if it is greater than 0.

In DAWN there is a default value for it so that could explain why DAWN is working better (or at all) as some users also reported here.

3 Likes

Is there any way override or add that locally?

Only by compiling usteer yourself unfortunately

1 Like

Any idea of the process to compile it? I've cloned it, but I'm having trouble figuring out how to get dev tools configured just right. Would love to see this tested.

Just compile it like a regular package.
You can also set up a patches folder to make the changes you’re talking about.

1 Like

How to tell from syslog whether usteer is configured correctly?

If there's a good answer, maybe it could be added to the wiki page at https://openwrt.org/docs/guide-user/network/wifi/usteer ?

Here's a lightly redacted sample from syslog on an AP only OpenWRT device. Does it give any hints? If relevant, most connected devices are iPhones and iPads.

Thu Dec 22 21:40:29 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:f1:a4:79 IEEE 802.11: authenticated
Thu Dec 22 21:40:38 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:f1:a4:79 IEEE 802.11: authenticated
Thu Dec 22 21:40:38 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:f1:a4:79 IEEE 802.11: associated (aid 1)
Thu Dec 22 21:40:38 2022 daemon.notice hostapd: wlan1-1: Prune association for xx:xx:xx:f1:a4:79
Thu Dec 22 21:40:38 2022 daemon.notice hostapd: wlan1-1: AP-STA-DISCONNECTED xx:xx:xx:f1:a4:79
Thu Dec 22 21:40:38 2022 daemon.notice hostapd: wlan0-1: AP-STA-CONNECTED xx:xx:xx:f1:a4:79
Thu Dec 22 21:40:38 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:f1:a4:79 RADIUS: starting accounting session BC194B8B446FE015
Thu Dec 22 21:40:38 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:f1:a4:79 WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:40:38 2022 daemon.notice hostapd: wlan0-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:f1:a4:79
Thu Dec 22 21:40:39 2022 user.info usteer: station xx:xx:xx:f1:a4:79 disconnected from node hostapd.wlan1-1
Thu Dec 22 21:40:41 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: associated (aid 3)
Thu Dec 22 21:40:41 2022 daemon.notice hostapd: wlan0-1: AP-STA-CONNECTED xx:xx:xx:26:4b:60
Thu Dec 22 21:40:41 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 RADIUS: starting accounting session 7A3A573EF7C66976
Thu Dec 22 21:40:41 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:40:41 2022 daemon.notice hostapd: wlan0-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:26:4b:60
Thu Dec 22 21:40:44 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:03:9b:0e IEEE 802.11: associated (aid 4)
Thu Dec 22 21:40:44 2022 daemon.notice hostapd: wlan1-1: Prune association for xx:xx:xx:03:9b:0e
Thu Dec 22 21:40:44 2022 daemon.notice hostapd: wlan1-1: AP-STA-DISCONNECTED xx:xx:xx:03:9b:0e
Thu Dec 22 21:40:44 2022 daemon.notice hostapd: wlan0-1: AP-STA-CONNECTED xx:xx:xx:03:9b:0e
Thu Dec 22 21:40:44 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:03:9b:0e RADIUS: starting accounting session 53ED12244E4C5687
Thu Dec 22 21:40:44 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:03:9b:0e WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:40:44 2022 daemon.notice hostapd: wlan0-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:03:9b:0e
Thu Dec 22 21:40:44 2022 user.info usteer: station xx:xx:xx:03:9b:0e disconnected from node hostapd.wlan1-1
Thu Dec 22 21:40:49 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: associated (aid 5)
Thu Dec 22 21:40:49 2022 daemon.notice hostapd: wlan0-1: Prune association for xx:xx:xx:26:4b:60
Thu Dec 22 21:40:49 2022 daemon.notice hostapd: wlan0-1: AP-STA-DISCONNECTED xx:xx:xx:26:4b:60
Thu Dec 22 21:40:49 2022 daemon.notice hostapd: wlan1-1: AP-STA-CONNECTED xx:xx:xx:26:4b:60
Thu Dec 22 21:40:49 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:26:4b:60 RADIUS: starting accounting session FB0BA76E3CC32260
Thu Dec 22 21:40:49 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:26:4b:60 WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:40:49 2022 daemon.notice hostapd: wlan1-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:26:4b:60
Thu Dec 22 21:40:50 2022 user.info usteer: station xx:xx:xx:26:4b:60 disconnected from node hostapd.wlan0-1
Thu Dec 22 21:41:08 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:f1:a4:79 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Thu Dec 22 21:41:14 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:03:9b:0e IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Thu Dec 22 21:41:19 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Thu Dec 22 21:43:57 2022 daemon.notice hostapd: wlan1-1: AP-STA-DISCONNECTED xx:xx:xx:ce:de:cb
Thu Dec 22 21:43:57 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb IEEE 802.11: disassociated due to inactivity
Thu Dec 22 21:43:57 2022 user.info usteer: station xx:xx:xx:ce:de:cb disconnected from node hostapd.wlan1-1
Thu Dec 22 21:43:58 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Thu Dec 22 21:52:49 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: authenticated
Thu Dec 22 21:52:49 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: associated (aid 3)
Thu Dec 22 21:52:49 2022 daemon.notice hostapd: wlan1-1: Prune association for xx:xx:xx:26:4b:60
Thu Dec 22 21:52:49 2022 daemon.notice hostapd: wlan1-1: AP-STA-DISCONNECTED xx:xx:xx:26:4b:60
Thu Dec 22 21:52:49 2022 daemon.notice hostapd: wlan0-1: AP-STA-CONNECTED xx:xx:xx:26:4b:60
Thu Dec 22 21:52:49 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 RADIUS: starting accounting session 16CB4583E54CBD1E
Thu Dec 22 21:52:49 2022 daemon.info hostapd: wlan0-1: STA xx:xx:xx:26:4b:60 WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:52:49 2022 daemon.notice hostapd: wlan0-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:26:4b:60
Thu Dec 22 21:52:50 2022 user.info usteer: station xx:xx:xx:26:4b:60 disconnected from node hostapd.wlan1-1
Thu Dec 22 21:53:19 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:26:4b:60 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Thu Dec 22 21:53:29 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb IEEE 802.11: authenticated
Thu Dec 22 21:53:29 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb IEEE 802.11: associated (aid 1)
Thu Dec 22 21:53:29 2022 daemon.notice hostapd: wlan1-1: AP-STA-CONNECTED xx:xx:xx:ce:de:cb
Thu Dec 22 21:53:29 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb RADIUS: starting accounting session 54BABC3A4D8277BB
Thu Dec 22 21:53:29 2022 daemon.info hostapd: wlan1-1: STA xx:xx:xx:ce:de:cb WPA: pairwise key handshake completed (RSN)
Thu Dec 22 21:53:29 2022 daemon.notice hostapd: wlan1-1: EAPOL-4WAY-HS-COMPLETED xx:xx:xx:ce:de:cb

After my testing with Samsung devices, a tablet and a phone, I found out that they will react to the transition request based on the signal level they see to the AP. If the signal level is something bellow 50dBm then they usually switch to higher frequency when they get the request from usteer. Otherwise they reply with status code 1 or 7. Unfortunately I could not find anywhere what these codes actually mean...
Edit: It seems to be also Android version dependent. Android 13 is OK, with Android 10, there are problems.

1 Like

Did you get a chance to test the patch with your setup? I wonder if it's worth looping in the maintainer or raising a bug and pointing it at this thread.

1 Like

1 is just a rejection with generic reason.
7 is a reserved one, so maybe something nonstandard in Android?

You can search for information on BSS Transition Management Response frame

1 Like

Hi all! I've read the thread but I don't know if this serves to my purpose:

  • What I see in the thread is that you try to make the devices roam between the 2.4GHz and 5GHz bands.
  • What I want is to make it roam between two different APs, only 5GHz band.

Does usteer work for that? The phones in my network do not roam at all, they remain connected to one AP, for example with -82dBm, in place of connecting to the other, with -27dBm. Enabling usteer did not seem to fix the issue for me. Only added the SSID to the config file. The ubus commands work fine, sample:

       "xx:xx:xx:xx:xx:xx": {
                "192.168.100.2#hostapd.wlan5g": {
                        "connected": false,
                        "signal": -27
                },
                "hostapd.wlan5g": {
                        "connected": true,
                        "signal": -82
                }
        },

As you see it is connected to the bad AP.

Some idea?

1 Like