64 trials · roam mode · 2026-09-15 14:30 · 10 min
A single client was driven between every pair of BSSIDs in the testbed and each transition timed from the ROAM command to the CTRL-EVENT-CONNECTED event. Trials were interleaved across pairs rather than run in blocks, so anything drifting over the run spreads across all groups instead of loading onto one.
The comparison that matters is a cross-radio roam within one AP against the same 2.4↔ 5 GHz transition between two APs. The client does identical work either way; the only difference is whether the two radios share one ath11k_base.
Cross-radio roams on the same AP are not materially worse than the same transition between two APs (median 0.93s vs 0.93s, completion 100% vs 100%). On this chipset the shared peer table is not costing anything measurable.
Cross-radio roams on the same AP are not materially worse than the same transition between two APs (median 0.93s vs 0.99s, completion 100% vs 100%). On this chipset the shared peer table is not costing anything measurable.
Every completed roam is followed by a real DHCP exchange from the client. This is a forwarding test, not a DHCP test: sdan drops a downstream frame whose destination MAC is absent from the MAC table for that VLAN, so a station that is associated and authorized but missing from the table receives nothing — the server answers every message and the client keeps asking. That failure is only visible from the client.
These stations finished the 802.11 transition and then had no working dataplane. That is the reported symptom, reproduced.
| Chipset / class | Roams | Got a lease | No lease | median DHCP | max DHCP |
|---|---|---|---|---|---|
| ipq5018 / inter-ap-cross-band | 24 | 24 (100%) | 0 | 0.30s | 0.40s |
| ipq6018 / inter-ap-cross-band | 24 | 0 (0%) | 24 | — | — |
| ipq6018 / intra-ap-cross-radio | 8 | 0 (0%) | 8 | — | — |
| ipq5018 / intra-ap-cross-radio | 8 | 8 (100%) | 0 | 0.30s | 0.40s |
| # | Class | From | To | Roam | Reason |
|---|---|---|---|---|---|
| 2 | inter-ap-cross-band | 186h-94/2.4 | 188n-96/5 | 1.11s | no-lease(rc=1) |
| 5 | inter-ap-cross-band | 186h-95/5 | 188n-99/2.4 | 0.64s | no-lease(rc=1) |
| 6 | inter-ap-cross-band | 188n-99/2.4 | 188n-96/5 | 1.15s | no-lease(rc=1) |
| 7 | inter-ap-cross-band | 188n-99/5 | 188n-96/2.4 | 0.51s | no-lease(rc=1) |
| 8 | intra-ap-cross-radio | 188n-99/5 | 188n-99/2.4 | 0.66s | no-lease(rc=1) |
| 10 | inter-ap-cross-band | 186h-94/2.4 | 188n-99/5 | 1.82s | no-lease(rc=1) |
| 11 | intra-ap-cross-radio | 188n-96/2.4 | 188n-96/5 | 1.14s | no-lease(rc=1) |
| 14 | intra-ap-cross-radio | 188n-96/5 | 188n-96/2.4 | 0.67s | no-lease(rc=1) |
| 16 | intra-ap-cross-radio | 188n-99/2.4 | 188n-99/5 | 0.93s | no-lease(rc=1) |
| 17 | inter-ap-cross-band | 186h-94/5 | 188n-96/2.4 | 0.63s | no-lease(rc=1) |
| 18 | inter-ap-cross-band | 186h-95/5 | 188n-96/2.4 | 0.89s | no-lease(rc=1) |
| 20 | inter-ap-cross-band | 188n-96/5 | 188n-99/2.4 | 0.99s | no-lease(rc=1) |
| 21 | inter-ap-cross-band | 186h-94/5 | 188n-99/2.4 | 0.66s | no-lease(rc=1) |
| 28 | inter-ap-cross-band | 186h-95/2.4 | 188n-99/5 | 0.93s | no-lease(rc=1) |
| 29 | inter-ap-cross-band | 186h-95/2.4 | 188n-96/5 | 2.01s | no-lease(rc=1) |
| 32 | inter-ap-cross-band | 188n-96/2.4 | 188n-99/5 | 0.73s | no-lease(rc=1) |
| 34 | inter-ap-cross-band | 188n-96/2.4 | 188n-99/5 | 0.68s | no-lease(rc=1) |
| 36 | intra-ap-cross-radio | 188n-96/2.4 | 188n-96/5 | 1.20s | no-lease(rc=1) |
| 38 | inter-ap-cross-band | 188n-99/5 | 188n-96/2.4 | 0.51s | no-lease(rc=1) |
| 41 | inter-ap-cross-band | 186h-95/2.4 | 188n-99/5 | 2.00s | no-lease(rc=1) |
| 43 | intra-ap-cross-radio | 188n-99/5 | 188n-99/2.4 | 0.72s | no-lease(rc=1) |
| 44 | inter-ap-cross-band | 186h-95/2.4 | 188n-96/5 | 1.06s | no-lease(rc=1) |
| 49 | inter-ap-cross-band | 186h-95/5 | 188n-96/2.4 | 1.73s | no-lease(rc=1) |
| 50 | inter-ap-cross-band | 186h-95/5 | 188n-99/2.4 | 1.74s | no-lease(rc=1) |
| 54 | inter-ap-cross-band | 186h-94/2.4 | 188n-99/5 | 1.79s | no-lease(rc=1) |
| 56 | intra-ap-cross-radio | 188n-96/5 | 188n-96/2.4 | 0.90s | no-lease(rc=1) |
| 58 | inter-ap-cross-band | 186h-94/5 | 188n-96/2.4 | 0.74s | no-lease(rc=1) |
| 59 | inter-ap-cross-band | 188n-96/5 | 188n-99/2.4 | 0.89s | no-lease(rc=1) |
| 61 | inter-ap-cross-band | 186h-94/2.4 | 188n-96/5 | 2.04s | no-lease(rc=1) |
| 62 | inter-ap-cross-band | 186h-94/5 | 188n-99/2.4 | 0.74s | no-lease(rc=1) |
| 63 | intra-ap-cross-radio | 188n-99/2.4 | 188n-99/5 | 0.94s | no-lease(rc=1) |
| 64 | inter-ap-cross-band | 188n-99/2.4 | 188n-96/5 | 1.02s | no-lease(rc=1) |
| Group | Trials | Completed | ≤2s | ≤5s | median | p90 | max | |
|---|---|---|---|---|---|---|---|---|
| inter-ap-cross-band The same 2.4↔ 5 GHz transition, but between two APs — separate ath11k instances, so no shared peer table. The control that matters. | 48 | 48 (100%) | 45 (94%) | 48 (100%) | 0.93s | 1.87s | 2.06s | |
| intra-ap-cross-radio Both radios of one AP. On a shared-peer-table SoC this is the only path where a cross-radio peer delete can be attributed to the wrong radio. | 16 | 16 (100%) | 16 (100%) | 16 (100%) | 0.93s | 1.14s | 1.20s |
| Group | Trials | Completed | ≤2s | ≤5s | median | p90 | max | |
|---|---|---|---|---|---|---|---|---|
| ipq5018 / inter-ap-cross-band | 24 | 24 (100%) | 23 (96%) | 24 (100%) | 0.93s | 1.86s | 2.06s | |
| ipq5018 / intra-ap-cross-radio | 8 | 8 (100%) | 8 (100%) | 8 (100%) | 0.93s | 1.11s | 1.11s | |
| ipq6018 / inter-ap-cross-band | 24 | 24 (100%) | 22 (92%) | 24 (100%) | 0.99s | 2.00s | 2.04s | |
| ipq6018 / intra-ap-cross-radio | 8 | 8 (100%) | 8 (100%) | 8 (100%) | 0.93s | 1.20s | 1.20s |
| Group | Trials | Completed | ≤2s | ≤5s | median | p90 | max | |
|---|---|---|---|---|---|---|---|---|
| 186h-94/2.4 → 186h-94/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.11s | 1.11s | 1.11s | |
| 186h-94/2.4 → 186h-95/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.15s | 1.15s | 1.15s | |
| 186h-94/2.4 → 188n-96/5 | 2 | 2 (100%) | 1 (50%) | 2 (100%) | 2.04s | 2.04s | 2.04s | |
| 186h-94/2.4 → 188n-99/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.82s | 1.82s | 1.82s | |
| 186h-94/5 → 186h-94/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.90s | 0.90s | 0.90s | |
| 186h-94/5 → 186h-95/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.80s | 1.80s | 1.80s | |
| 186h-94/5 → 188n-96/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.74s | 0.74s | 0.74s | |
| 186h-94/5 → 188n-99/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.74s | 0.74s | 0.74s | |
| 186h-95/2.4 → 186h-94/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.08s | 1.08s | 1.08s | |
| 186h-95/2.4 → 186h-95/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.95s | 0.95s | 0.95s | |
| 186h-95/2.4 → 188n-96/5 | 2 | 2 (100%) | 1 (50%) | 2 (100%) | 2.01s | 2.01s | 2.01s | |
| 186h-95/2.4 → 188n-99/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 2.00s | 2.00s | 2.00s | |
| 186h-95/5 → 186h-94/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.86s | 1.86s | 1.86s | |
| 186h-95/5 → 186h-95/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.93s | 0.93s | 0.93s | |
| 186h-95/5 → 188n-96/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.73s | 1.73s | 1.73s | |
| 186h-95/5 → 188n-99/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.74s | 1.74s | 1.74s | |
| 188n-96/2.4 → 186h-94/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.08s | 1.08s | 1.08s | |
| 188n-96/2.4 → 186h-95/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.04s | 1.04s | 1.04s | |
| 188n-96/2.4 → 188n-96/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.20s | 1.20s | 1.20s | |
| 188n-96/2.4 → 188n-99/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.73s | 0.73s | 0.73s | |
| 188n-96/5 → 186h-94/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.93s | 0.93s | 0.93s | |
| 188n-96/5 → 186h-95/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.92s | 0.92s | 0.92s | |
| 188n-96/5 → 188n-96/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.90s | 0.90s | 0.90s | |
| 188n-96/5 → 188n-99/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.99s | 0.99s | 0.99s | |
| 188n-99/2.4 → 186h-94/5 | 2 | 2 (100%) | 1 (50%) | 2 (100%) | 2.06s | 2.06s | 2.06s | |
| 188n-99/2.4 → 186h-95/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.11s | 1.11s | 1.11s | |
| 188n-99/2.4 → 188n-96/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.15s | 1.15s | 1.15s | |
| 188n-99/2.4 → 188n-99/5 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.94s | 0.94s | 0.94s | |
| 188n-99/5 → 186h-94/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 1.87s | 1.87s | 1.87s | |
| 188n-99/5 → 186h-95/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.87s | 0.87s | 0.87s | |
| 188n-99/5 → 188n-96/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.51s | 0.51s | 0.51s | |
| 188n-99/5 → 188n-99/2.4 | 2 | 2 (100%) | 2 (100%) | 2 (100%) | 0.72s | 0.72s | 0.72s |
Every trial completed.
| BSSID | AP | Chipset | Band | Freq |
|---|---|---|---|---|
| d4:ba:ba:ab:ba:ab | 188n-99 | ipq6018 | 2.4 GHz | 2437 MHz |
| d4:ba:ba:ab:ba:aa | 188n-99 | ipq6018 | 5 GHz | 5785 MHz |
| d4:ba:ba:ab:ce:6d | 188n-96 | ipq6018 | 2.4 GHz | 2437 MHz |
| d4:ba:ba:ab:ce:6c | 188n-96 | ipq6018 | 5 GHz | 5180 MHz |
| d4:ba:ba:a4:05:ca | 186h-94 | ipq5018 | 2.4 GHz | 2462 MHz |
| d4:ba:ba:a4:05:cb | 186h-94 | ipq5018 | 5 GHz | 5785 MHz |
| d4:ba:ba:a3:db:fa | 186h-95 | ipq5018 | 2.4 GHz | 2412 MHz |
| d4:ba:ba:a3:db:fb | 186h-95 | ipq5018 | 5 GHz | 5220 MHz |
Chipset topology is read from sysfs, not inferred from the model name: on IPQ6018 both phy0 and phy1 resolve to soc/c000000.wifi, while on IPQ5018 phy1 resolves to soc:wifi1@c000000 — a separate device with its own peer table.
ATTACHed and the CTRL-EVENT-CONNECTED event timestamped on arrival, so the figure is not quantised by a polling interval.| # | Round | Class | From | To | Latency | Outcome |
|---|---|---|---|---|---|---|
| 1 | 1 | inter-ap-cross-band | 186h-95/2.4 | 186h-94/5 | 1.08s | completed |
| 2 | 1 | inter-ap-cross-band | 186h-94/2.4 | 188n-96/5 | 1.11s | completed |
| 3 | 1 | inter-ap-cross-band | 188n-96/2.4 | 186h-95/5 | 1.04s | completed |
| 4 | 1 | inter-ap-cross-band | 188n-96/2.4 | 186h-94/5 | 1.05s | completed |
| 5 | 1 | inter-ap-cross-band | 186h-95/5 | 188n-99/2.4 | 0.64s | completed |
| 6 | 1 | inter-ap-cross-band | 188n-99/2.4 | 188n-96/5 | 1.15s | completed |
| 7 | 1 | inter-ap-cross-band | 188n-99/5 | 188n-96/2.4 | 0.51s | completed |
| 8 | 1 | intra-ap-cross-radio | 188n-99/5 | 188n-99/2.4 | 0.66s | completed |
| 9 | 1 | inter-ap-cross-band | 188n-99/5 | 186h-95/2.4 | 0.87s | completed |
| 10 | 1 | inter-ap-cross-band | 186h-94/2.4 | 188n-99/5 | 1.82s | completed |
| 11 | 1 | intra-ap-cross-radio | 188n-96/2.4 | 188n-96/5 | 1.14s | completed |
| 12 | 1 | inter-ap-cross-band | 186h-94/2.4 | 186h-95/5 | 1.09s | completed |
| 13 | 1 | inter-ap-cross-band | 186h-95/5 | 186h-94/2.4 | 1.86s | completed |
| 14 | 1 | intra-ap-cross-radio | 188n-96/5 | 188n-96/2.4 | 0.67s | completed |
| 15 | 1 | intra-ap-cross-radio | 186h-94/5 | 186h-94/2.4 | 0.90s | completed |
| 16 | 1 | intra-ap-cross-radio | 188n-99/2.4 | 188n-99/5 | 0.93s | completed |
| 17 | 1 | inter-ap-cross-band | 186h-94/5 | 188n-96/2.4 | 0.63s | completed |
| 18 | 1 | inter-ap-cross-band | 186h-95/5 | 188n-96/2.4 | 0.89s | completed |
| 19 | 1 | inter-ap-cross-band | 188n-99/5 | 186h-94/2.4 | 0.92s | completed |
| 20 | 1 | inter-ap-cross-band | 188n-96/5 | 188n-99/2.4 | 0.99s | completed |
| 21 | 1 | inter-ap-cross-band | 186h-94/5 | 188n-99/2.4 | 0.66s | completed |
| 22 | 1 | inter-ap-cross-band | 186h-94/5 | 186h-95/2.4 | 0.76s | completed |
| 23 | 1 | inter-ap-cross-band | 188n-96/5 | 186h-94/2.4 | 0.93s | completed |
| 24 | 1 | inter-ap-cross-band | 188n-96/5 | 186h-95/2.4 | 0.92s | completed |
| 25 | 1 | inter-ap-cross-band | 188n-99/2.4 | 186h-95/5 | 0.91s | completed |
| 26 | 1 | intra-ap-cross-radio | 186h-95/5 | 186h-95/2.4 | 0.93s | completed |
| 27 | 1 | inter-ap-cross-band | 188n-99/2.4 | 186h-94/5 | 0.93s | completed |
| 28 | 1 | inter-ap-cross-band | 186h-95/2.4 | 188n-99/5 | 0.93s | completed |
| 29 | 1 | inter-ap-cross-band | 186h-95/2.4 | 188n-96/5 | 2.01s | completed |
| 30 | 1 | intra-ap-cross-radio | 186h-95/2.4 | 186h-95/5 | 0.95s | completed |
| 31 | 1 | intra-ap-cross-radio | 186h-94/2.4 | 186h-94/5 | 1.11s | completed |
| 32 | 1 | inter-ap-cross-band | 188n-96/2.4 | 188n-99/5 | 0.73s | completed |
| 33 | 2 | inter-ap-cross-band | 186h-95/2.4 | 186h-94/5 | 0.88s | completed |
| 34 | 2 | inter-ap-cross-band | 188n-96/2.4 | 188n-99/5 | 0.68s | completed |
| 35 | 2 | inter-ap-cross-band | 186h-94/5 | 186h-95/2.4 | 1.80s | completed |
| 36 | 2 | intra-ap-cross-radio | 188n-96/2.4 | 188n-96/5 | 1.20s | completed |
| 37 | 2 | inter-ap-cross-band | 188n-99/2.4 | 186h-94/5 | 2.06s | completed |
| 38 | 2 | inter-ap-cross-band | 188n-99/5 | 188n-96/2.4 | 0.51s | completed |
| 39 | 2 | intra-ap-cross-radio | 186h-94/2.4 | 186h-94/5 | 0.87s | completed |
| 40 | 2 | intra-ap-cross-radio | 186h-95/5 | 186h-95/2.4 | 0.85s | completed |
| 41 | 2 | inter-ap-cross-band | 186h-95/2.4 | 188n-99/5 | 2.00s | completed |
| 42 | 2 | intra-ap-cross-radio | 186h-94/5 | 186h-94/2.4 | 0.64s | completed |
| 43 | 2 | intra-ap-cross-radio | 188n-99/5 | 188n-99/2.4 | 0.72s | completed |
| 44 | 2 | inter-ap-cross-band | 186h-95/2.4 | 188n-96/5 | 1.06s | completed |
| 45 | 2 | inter-ap-cross-band | 186h-94/2.4 | 186h-95/5 | 1.15s | completed |
| 46 | 2 | inter-ap-cross-band | 188n-96/2.4 | 186h-94/5 | 1.08s | completed |
| 47 | 2 | inter-ap-cross-band | 188n-99/2.4 | 186h-95/5 | 1.11s | completed |
| 48 | 2 | inter-ap-cross-band | 188n-96/2.4 | 186h-95/5 | 0.71s | completed |
| 49 | 2 | inter-ap-cross-band | 186h-95/5 | 188n-96/2.4 | 1.73s | completed |
| 50 | 2 | inter-ap-cross-band | 186h-95/5 | 188n-99/2.4 | 1.74s | completed |
| 51 | 2 | inter-ap-cross-band | 188n-96/5 | 186h-95/2.4 | 0.59s | completed |
| 52 | 2 | inter-ap-cross-band | 188n-96/5 | 186h-94/2.4 | 0.74s | completed |
| 53 | 2 | inter-ap-cross-band | 188n-99/5 | 186h-95/2.4 | 0.77s | completed |
| 54 | 2 | inter-ap-cross-band | 186h-94/2.4 | 188n-99/5 | 1.79s | completed |
| 55 | 2 | intra-ap-cross-radio | 186h-95/2.4 | 186h-95/5 | 0.93s | completed |
| 56 | 2 | intra-ap-cross-radio | 188n-96/5 | 188n-96/2.4 | 0.90s | completed |
| 57 | 2 | inter-ap-cross-band | 188n-99/5 | 186h-94/2.4 | 1.87s | completed |
| 58 | 2 | inter-ap-cross-band | 186h-94/5 | 188n-96/2.4 | 0.74s | completed |
| 59 | 2 | inter-ap-cross-band | 188n-96/5 | 188n-99/2.4 | 0.89s | completed |
| 60 | 2 | inter-ap-cross-band | 186h-95/5 | 186h-94/2.4 | 0.89s | completed |
| 61 | 2 | inter-ap-cross-band | 186h-94/2.4 | 188n-96/5 | 2.04s | completed |
| 62 | 2 | inter-ap-cross-band | 186h-94/5 | 188n-99/2.4 | 0.74s | completed |
| 63 | 2 | intra-ap-cross-radio | 188n-99/2.4 | 188n-99/5 | 0.94s | completed |
| 64 | 2 | inter-ap-cross-band | 188n-99/2.4 | 188n-96/5 | 1.02s | completed |