[PATCH v5 0/8] Improve roam scan strategy

Alexander Ganslandt <[email protected]> Fri, 28 Nov 2025 12:54:21 +0100
Newsgroups dev.linux.lists.iwd
Message-ID <[email protected]>
I recommend looking at the diff in a side-by-side viewer, the patch
files are looking far more complicated than they actually are...

This is attempt #2 at improving roaming. This removes the previous
timestamp-based approach and instead uses a simple list to keep track of
which frequencies have been scanned in the current roam attempt.

The main idea is to make station_start_roam() the central point for all
roaming. When some function wants to trigger a roam, it calls
station_start_roam() that takes care of all scan logic.

In my own testing I've noticed a big improvement in connection stability
when running around a building. There might be edge-cases I've missed
though, as I don't have a setup to test all different functionality.

Happy to hear your thoughts on this approach and if it can be improved.

Thanks,
Alexander

---
Changes in v5:
- Added full-roam-scan event when all frequencies have been scanned
- Added handling for AP directed roaming, it should now use the same
  "roam loop" approach as other types of roaming
- Fixed autotest issues
- Link to v4: https://lore.kernel.org/r/[email protected]

Changes in v4:
- Fixed small build error introduced in previous revision
- Link to v3: https://lore.kernel.org/r/[email protected]

Changes in v3:
- Fixed CI issues
- Fixed unnecessary braces as per James's comment
- Fixed bug where 6GHz "set" variable wasn't freed in all cases in
  station_fill_scan_freq_subsets()
- Added logic to handle case where all subsets are empty in
  station_fill_scan_freq_subsets()
- Link to v2: https://lore.kernel.org/r/[email protected]

Changes in v2:
- Removed code that tracked scan frequency timestamps
- Added code to track which frequencies have been scanned
- Link to v1: https://lore.kernel.org/r/[email protected]

---
Alexander Ganslandt (8):
      util: add scan_freq_set_size function
      station: improve scan_freqs_order channel subsets
      station: improve roam scan strategy
      auto-t: Increase event timeout for test_full_scan
      auto-t: Fix tests relying on full-roam-scan
      auto-t: Call default instead of reload in teardown
      auto-t: Fix test_ignore_candidate_list_quirk
      auto-t: Disable MAC randomization for a few tests

 autotests/testAP-no-support/main.conf            |   2 +
 autotests/testAPRoam/bad_neighbor_report_test.py |  19 +-
 autotests/testBasicServiceSet/main.conf          |   2 +
 autotests/testDPP/main.conf                      |   2 +
 autotests/testDisconnectByAP/main.conf           |   2 +
 autotests/util/iwd.py                            |  13 +-
 src/station.c                                    | 387 ++++++++++++-----------
 src/util.c                                       |  11 +
 src/util.h                                       |   1 +
 9 files changed, 242 insertions(+), 197 deletions(-)
---
base-commit: 3760a49650b39edd623a85a2b9d51645b52d004a
change-id: 20250414-roam-scan-improvements-02116c7c4631

Best regards,
-- 
Alexander Ganslandt <[email protected]>