Skip to content

Add known-station tracking and per-SSID configuration overrides - #22

Open
grzegorz914 wants to merge 3 commits into
openwrt:masterfrom
grzegorz914:master
Open

Add known-station tracking and per-SSID configuration overrides#22
grzegorz914 wants to merge 3 commits into
openwrt:masterfrom
grzegorz914:master

Conversation

@grzegorz914

Copy link
Copy Markdown

Summary

  • Add known-station tracking with cold-start exploratory candidates: persist the best signal ever observed for a station on each node, synced between peers over the existing remote protocol, so stations that never probe/report RRM measurements once associated can still be found as roaming candidates. Candidates found only through this fallback are exploratory and are never used for a forced kick or an outright probe/assoc rejection, only a passive BSS-transition-request.
  • Add per-SSID configuration overrides via a new usteer_ssid UCI section type keyed by SSID, overriding signal thresholds, roam-scan/trigger tuning, band-steering, load-kick and aggressiveness (plus its MAC-list) for stations on that SSID only. Any option left unset falls back to the global setting, so existing single-SSID configs are unaffected.

Test plan

  • Compiles cleanly for ipq806x/generic (arm_cortex-a15_neon-vfpv4) and ramips/mt7620 (mipsel_24kc)
  • Running on 4 production APs (mixed ipq806x/ramips) for this session; known-station cold-start behavior and per-SSID overrides verified live against real client roaming/steering events

Persist the best signal ever observed for a station on each node
(known.c), synced between usteer peers over the existing remote
protocol (remote.c). Stations that never probe or report RRM
measurements once associated never generate live sta_info data on
any node but their current one, so the normal candidate scan can
never find them a roaming target no matter how bad their signal
gets - this fallback consults the persisted record instead.

Candidates found only through this fallback are exploratory: the
signal was never actually observed on that node, just marked
"worth exploring" once a peer reports the station connected
elsewhere. They are only ever used to trigger a passive
BSS-transition-request, never a forced kick or an outright
probe/assoc rejection, since the reading backing them could be
stale or simply never realized.

Adds a known_stations/known_stations_timeout UCI toggle and a
delete_known ubus method for manually discarding stale entries.

Signed-off-by: Grzegorz Kaczor <grzegorz914@icloud.com>
Add a usteer_ssid UCI section type keyed by SSID that overrides
selected global settings (signal thresholds, roam-scan/trigger
tuning, band-steering, load-kick, aggressiveness and its MAC-list)
for stations on that SSID only, via the new SSID_CFG(ssid, field)
lookup (ssid_config.c). Any option left unset on a usteer_ssid
section falls back to the corresponding global usteer setting, so
existing single-SSID configs keep working unchanged.

Also moves per-station aggressiveness from struct sta (global to
the station) to struct sta_info (per station+node), since a station
seen on multiple SSIDs must use each SSID's own aggressiveness for
decisions made on that SSID's nodes.

Signed-off-by: Grzegorz Kaczor <grzegorz914@icloud.com>
Band steering previously had no explicit on/off switch - it was only
implicitly active whenever band_steering_interval was non-zero. Add
a real band_steering_enabled bool (global and per-SSID, following
the same pattern as load_kick_enabled) that gates the actual
steering action in usteer_band_steering_perform_steer(), alongside
the existing interval check.

Defaults to true, preserving existing behavior for configs that
already rely on a non-zero band_steering_interval.

Signed-off-by: Grzegorz Kaczor <grzegorz914@icloud.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant