802.11r roaming disconnects on Android

Here we go again with another android-specific issue. I don’t have any iDevices to test with so I can’t comment, but likely they do not have an issue. Windows laptops of various hardware do not have the issue. The Android phones are Samsung (stock) and Pixel (rooted) devices, running Android 13.

Device will be connected fine, then very periodically (like on a timer) will disconnect, then reconnect. I notice it when streaming video (watching youtube, etc).

Have done various options, over the last year, including the most simple defaults of the basics of enabling 802.11r, to checking all the boxes (except PMK R1 Push) and populating NAS ID with a unique label for every radio broadcasting the same ESSID on the device and all other devices, as well as testing the configuration outlined in the wiki, allowing the device to figure out unique labels.

Devices are all using the latest ‘git checkout main’ builds of Openwrt. This happens with release versions too, so it does not look like it’s a code problem with openwrt. Several laptops (windows 10/11, various hardware), don’t do this (don’t disconnect on a periodic basis).

Changing the Reassociation Deadline default 1000 ms to 20000 ms (as recommended in various guides referencing CIsco defaults), decreases how often the disconnect happens, so whatever is causing it seems to orbit around that.

The disconnect is periodic, not ‘random’. It seems to be on a timer, and that timer seems to be affected by the Reassociation Deadline setting. I don’t notice it happen has often with the 20000ms setting. It only happens on android devices, for me, but I don’t have crapple devices to test it on. I notice it when watching streaming video, not at other times, because it’s then when I’m actively looking at the screen, and see the disconnect happen, and depending on the player buffer, the video pauses.

Why I want to fix this: It should just work. The other features of roaming are working smoothly with 802.11r. To me, this is obviously an android problem, but unfortunately the devices I listed are very common android devices, so the bug in android is likely to be widespread. What is the openwrt workaround?

Roaming (or lack of) is mostly a client decision ...

Please connect to your OpenWrt device using ssh and copy the output of the following commands and post it here using the "Preformatted text </> " button:
grafik
Remember to redact passwords, VPN keys, MAC addresses and any public IP addresses you may have:

ubus call system board
cat /etc/config/network
cat /etc/config/wireless
cat /etc/config/dhcp

Router:

  ARMv7 Processor rev 5 (v7l), 6.12.48

Outdoor AP:

ARMv7 Processor rev 0 (v7l) (1 device), 6.6.106

They all all running recent builds, but this happens with earlier release versions too (v23x etc).

Use Cat…

Using SCP is much easier to transfer the network, wireless and dhcp information to my local laptop (or look in a recent backup).

/etc/config/network on main outdoor AP, ARMv7rev0, which is connected via mesh 802.11s to the main router. This is the device that most clients connect to. It is mimo 4x4, which seems to influence them to want to connect to it over the other radios (ARMv7rev5), which are 2x2.

Network (Outdoor AP):


config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option packet_steering '1'
	option steering_flows '128'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'
	list ports 'lan4'
	option bridge_empty '1'
	option priority '12288'
	option arp_accept '1'
	option stp '1'
	option igmp_snooping '1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	list ipaddr '192.168.x.2/24'
	option gateway '192.168.x.1'
	option delegate '0'
	option broadcast '192.168.x.255'
	list dns '192.168.x.1'

config device
	option name 'phy0-mesh0'
	option arp_accept '1'
	option mtu '1500'
	option macaddr 'xx:xx:xx:xx:xx:xx'
	option txqueuelen '1000'
	option promisc '0'
	option ipv6 '0'

config device
	option name 'phy1-ap0'
	option arp_accept '1'

config device
	option name 'phy1-ap1'
	option arp_accept '1'

config device
	option name 'phy1-ap3'
	option arp_accept '1'

config device
	option name 'phy1-ap2'
	option arp_accept '1'

config interface 'lan6'
	option proto 'dhcpv6'
	option device 'br-lan'
	option reqaddress 'try'
	option reqprefix 'auto'
	option norelease '1'
	option delegate '0'


Wireless (Outdoor AP):

config wifi-device 'radio0'
	option type 'mac80211'
	option path 'soc/1b500000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'
	option band '5g'
	option channel '149'
	option htmode 'VHT80'
	option cell_density '1'
	option country 'US'
	option beacon_int '50'

config wifi-device 'radio1'
	option type 'mac80211'
	option path 'soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0'
	option band '2g'
	option channel '6'
	option htmode 'HT20'
	option cell_density '1'
	option country 'US'
	option beacon_int '50'

config wifi-iface 'wifinet2'
	option device 'radio0'
	option mode 'mesh'
	option encryption 'sae'
	option mesh_id 'mesh11s'
	option mesh_fwding '1'
	option mesh_rssi_threshold '0'
	option dtim_period '3'
	option key 'xxxxxxxxxxxxxxxxxx'
	option network 'lan'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxxxxx'
	option bss_transition '1'

config wifi-iface 'wifinet6'
	option device 'radio1'
	option mode 'ap'
	option ssid 'SSID1'
	option encryption 'psk2+ccmp'
	option dtim_period '3'
	option key 'password1'
	option network 'lan'
	option ieee80211k '1'
	option ieee80211r '1'
	option ieee80211w '1'
	option nasid 'SSID124'
	option mobility_domain '1234'
	option reassociation_deadline '20000'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxxxxx'
	option wnm_sleep_mode '1'
	option wnm_sleep_mode_no_keys '1'
	option bss_transition '1'
	option ocv '0'
	option proxy_arp '1'
	option ft_over_ds '0'
	option ft_psk_generate_local '1'

config wifi-iface 'wifinet5'
	option device 'radio0'
	option mode 'ap'
	option ssid 'SSID1'
	option encryption 'psk2+ccmp'
	option dtim_period '3'
	option key 'password1'
	option network 'lan'
	option ieee80211k '1'
	option ieee80211r '1'
	option ieee80211w '1'
	option nasid 'SSID15'
	option mobility_domain '1234'
	option reassociation_deadline '20000'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxx'
	option wnm_sleep_mode '1'
	option wnm_sleep_mode_no_keys '1'
	option bss_transition '1'
	option ocv '0'
	option proxy_arp '1'
	option ft_over_ds '0'
	option ft_psk_generate_local '1'

DHCP (Outdoor AP):

Is not enabled because this is an AP.

Router: (ARMv7Rev5 device)

Network (router):


config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd8e:xxxxxxxxx::/48'
	option packet_steering '1'
	option steering_flows '128'

config device
	option name 'br-lan'
	option type 'bridge'
	option priority '0'
	option arp_accept '1'
	option neighlocktime '2'
	option drop_unsolicited_na '1'
	option bridge_empty '1'
	option ipv6 '1'
	list ports 'lan1'
	list ports 'lan2'
	option stp '1'
	option igmp_snooping '1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	list ipaddr '192.168.x.1/24'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'qmippp'
	option proto 'qmi'
	option device '/dev/cdc-wdm0'
	option auth 'none'
	option ipv6 '1'
	option pdptype 'ipv4v6'
	option peerdns '0'
	list dns '8.8.8.8'
	list dns '2620:fe::fe'
	list dns '2606:4700:4700::1111'
	list dns '2001:4860:4860::8888'
	list dns '9.9.9.9'
	list dns '1.1.1.1'
	list dns '1.0.0.1'
	list dns '8.4.4.8'
	option delay '20'
	option profile '3'
	option v6profile '3'

config device
	option name 'phy2-mesh0'
	option arp_accept '1'


Wireless (Router):


config wifi-device 'radio0'
	option type 'mac80211'
	option path 'soc/40000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
	option band '5g'
	option channel '36'
	option htmode 'VHT80'
	option cell_density '1'
	option country 'US'
	option beacon_int '50'

config wifi-device 'radio1'
	option type 'mac80211'
	option path 'platform/soc/a000000.wifi'
	option band '2g'
	option htmode 'HT20'
	option cell_density '1'
	option channel '1'
	option country 'US'
	option beacon_int '50'

config wifi-device 'radio2'
	option type 'mac80211'
	option path 'platform/soc/a800000.wifi'
	option band '5g'
	option channel '149'
	option htmode 'VHT80'
	option cell_density '1'
	option country 'US'
	option beacon_int '50'

config wifi-iface 'wifinet0'
	option device 'radio2'
	option mode 'mesh'
	option encryption 'sae'
	option mesh_id 'mesh11s'
	option mesh_fwding '1'
	option mesh_rssi_threshold '0'
	option dtim_period '3'
	option key 'xxxxxxxxxxxxxxxxx'
	option network 'lan'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxxxxxxxx'
	option bss_transition '1'

config wifi-iface 'wifinet8'
	option device 'radio1'
	option mode 'ap'
	option ssid 'SSID1'
	option encryption 'psk2+ccmp'
	option dtim_period '3'
	option key 'password1'
	option network 'lan'
	option ieee80211k '1'
	option ieee80211r '1'
	option ieee80211w '1'
	option nasid 'SSID124'
	option mobility_domain '1234'
	option reassociation_deadline '20000'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxxxx'
	option wnm_sleep_mode '1'
	option wnm_sleep_mode_no_keys '1'
	option bss_transition '1'
	option proxy_arp '1'
	option ocv '0'
	option ft_over_ds '0'
	option ft_psk_generate_local '1'


config wifi-iface 'wifinet9'
	option device 'radio0'
	option mode 'ap'
	option ssid 'SSID1'
	option encryption 'psk2+ccmp'
	option dtim_period '3'
	option key 'password1'
	option network 'lan'
	option ieee80211k '1'
	option ieee80211r '1'
	option ieee80211w '1'
	option nasid 'SSID15'
	option mobility_domain '1234'
	option reassociation_deadline '20000'
	option wnm_sleep_mode '1'
	option wnm_sleep_mode_no_keys '1'
	option bss_transition '1'
	option proxy_arp '1'
	option time_advertisement '2'
	option time_zone 'xxxxxxxxxxxxxxxxxxxxxx'
	option ocv '0'
	option ft_over_ds '0'
	option ft_psk_generate_local '1'

DHCP (Router):


config dnsmasq
	option domainneeded '1'
	option localise_queries '1'
	option rebind_protection '0'
	option local '/LocalDomainName/'
	option domain 'LocalDomainName'
	option expandhosts '1'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option localservice '1'
	option dnssec '1'
	list interface 'lan'
	option stripmac '1'
	option stripsubnet '1'
	option strictorder '1'

config dhcp 'lan'
	option interface 'lan'
	option start '2'
	option limit '245'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'
	option force '1'
	list ntp '192.168.x.1' # router

config odhcpd 'odhcpd'
	option maindhcp '0'
	option leasefile '/tmp/hosts/odhcpd'
	option leasetrigger '/usr/sbin/odhcpd-update'
	option loglevel '4'

config host
	option name 'OUTDOORAP'
	option ip '192.168.x.2'
	option mac 'xxxxxxxxxxxxxxxx'


How about you post the complete output ?

3 Likes
-	option igmp_snooping '1'
- option stp '1'

This freezes new connections 5 seconds, you get what you configured.

As frollic already mentioned, twice, this does not specify the devices in question at all. Please be specific, what manufacturer(s), which exact model(s) and hardware revision(s). frollic already suggested ubus call system board to help you gathering that information.

"ARMv7 Processor rev 5 (v7l)" only tells us about the CPU core, which is not very relevant (respectively becomes obvious indirectly) - what really matters is the SOC, the wireless chipsets - both of which can be answered by knowing the device vendor/ model/ h/w revision.


Not all clients like IEEE802.11r, that's not really fixable from the AP side. In order to profit from 802.11r the clients (and their drivers) need to actively support it. If they don't support it, the clients 'should' ignore 802.11 silently and keep working without it - but there are (broken) clients which get confused by this.

I don’t get that. Maybe you do, however I have not yet experienced that, although the symptoms would seem similar. I’ve toggled ‘off’ IGMP/STP on all openwrt (which are all the network AP/router) devices, and it made no difference to the particular symptom reported. I will try it again and report back, but I’m sure I’ve tested this 2-3 times.

It doesn’t matter what device I run openwrt on, or what build. It’s been a problem on multiple platforms with multiple builds. So knowing the exact radio device is of no use.

Noted.

That answers the question.

Maybe that's chipset specific but in general you'll get ~15 seconds more waiting for interfaces in learning state (on router of course) and that's it. No impact on clients. But anyway I too would advice against enabling it in simple network setups.

1 Like

I bet you know it better. Why would IGMP related stuff mess with roaming clients?

1 Like

You need to refresh group subscriptions every X seconds using IGMPvY so that TV screen follows. Default with multicast sent to everyone is easier, eg you put TV STB in TV VLAN - 2 endpoints, no need to filter broad/multicasts….

1 Like

... and where is roaming clients in all this? I totally agree with the approach "don't enable it unless you know that you need it" but I don't get potential connection between snooping and roaming problems.

1 Like

OP said:

That is usually QUIC, but includes IGMP in general.

1 Like

IGMP? I thought (in wild nature around me) it was used only for IPTV-related stuff. Quic was supposed to coexist with roaming better than TCP due to UDP based nature. At least in theory.

1 Like

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.