Skip to content

local_node: preserve kick_time when BSS-TM is rejected#16

Open
stevescot wants to merge 1 commit into
openwrt:masterfrom
stevescot:fix/bss-tm-rejection-fallback
Open

local_node: preserve kick_time when BSS-TM is rejected#16
stevescot wants to merge 1 commit into
openwrt:masterfrom
stevescot:fix/bss-tm-rejection-fallback

Conversation

@stevescot
Copy link
Copy Markdown

When a client rejects a BSS Transition Management request (status_code != 0), do not cancel the already scheduled fallback hard-kick.

Problem

The previous behavior cancelled kick_time entirely, which left usteer retrying soft steering via roam_scan_tries until eventually giving up after many minutes. On devices that consistently reject BSS-TM (e.g., some iPhones), this could result in 40+ minute roaming delays.

Solution

By preserving kick_time on rejection, the existing roam_kick_delay fallback remains effective:

  1. Ask nicely first via BSS-TM
  2. If rejected, deauth if the client refuses to move

This significantly reduces roaming latency on non-compliant clients while keeping soft steering for devices that support it.

When a client rejects a BSS Transition Management request (status_code != 0),
do not cancel the already scheduled fallback hard-kick. The previous behavior
cancelled kick_time entirely, which left usteer retrying soft steering via
roam_scan_tries until eventually giving up after many minutes.

By preserving kick_time on rejection, the existing roam_kick_delay fallback
remains effective: ask nicely first via BSS-TM, then deauth if the client
refuses to move. This significantly reduces roaming latency on devices that
consistently reject BSS-TM (e.g., some iPhones).

Tested on multi-AP networks where devices previously experienced 40+ minute
roaming delays when rejecting soft steering requests.
@blocktrron
Copy link
Copy Markdown
Member

Hi, Signed-of-by is missing. Apart from that looks good.

@NilsRo
Copy link
Copy Markdown
Contributor

NilsRo commented May 25, 2026

This feature is Included in aggressive roaming. For a clean implementation the client has to be told in the BSS-TM-REQ that it will be kicked. This meta data changes roaming priorities of the stations so an iPhone will leave immediately. But...there is a missing function to stop disassociation in hostapd that must be available if there is a reason code linked to e.g. 7. So if the correct BSS-TM-REQ is send hostap will hardly kick the client. but anyway it is available since merge of #10

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.

3 participants