[PATCH] wnm_ap: optional disassociation for bss_tm_req

Nils Rottgardt n.rottgardt at gmail.com
Sun Mar 16 13:59:52 PDT 2025


Hi Jouni,

any comments to this thoughts? Actually the interface is not entirely 
available as needed to control roaming at best for a wifi controller.

Cheers,

Nils

Am 07.02.2025 um 12:54 schrieb Nils Rottgardt:
> Hi Jouni,
>
> have you had time to look at this? Perhaps it could be also an option 
> to add a new call to cancel a running dissociation timer to handle 
> BSS_TM_RESP responses...could be more complex perhaps instead moving 
> the "timer" to the controller application.
>
> Cheers,
>
> Nils
>
> Am 26.12.2024 um 00:45 schrieb Nils Rottgardt:
>> "right reason code":
>>
>> This would be an option as well. I gone this way as Usteer does the 
>> disassociation on its own and it would be flexible and easy to still 
>> use this.
>>
>>
>> "avoid a disassociation part":
>>
>> From IEEE specs I know the disassociation is not played that hard. 
>> Clients have some options to handle the disassociation imminent flag 
>> and also reacts differently of the disassociation timer value is 
>> provided or not. E.g. my Intel AX201 or iPhone will roam only 
>> sometimes with disassociation imminent = false or true...the roaming 
>> behaviour changes if disassociation timer is set only. Actually 
>> Usteer using roaming with disassociation imminent = true without 
>> disassociation to handle BSS_TM_RESP. This leads into Clients 
>> ignoring the BSS_TM_REQ.
>>
>> - disassociation imminent not set: a suggestion to roam, client 
>> handles it with very low priority
>>
>> - disassociation imminent set, disassociation timer not set: the 
>> client should roam/react on the roaming request as it will be 
>> disassociated sometimes in the future. Actually Usteer using this 
>> flag without using disassociation timer. This leads into an issue as 
>> according IEEE this tells the client that it will be disassociated to 
>> a random time in the future. Some clients like Intel AX201 or iPhone 
>> will mostly handle it like disassociation imminent = false.
>>
>> - disassociation imminent set, disassociation timer set: the client 
>> is told the exact time after it will be disassociated if it does not 
>> roam/react. As it is set explicitly Intel AX201 and iPhone will 
>> follow this BSS_TM_REQ instantly. Sometimes they answers with a 
>> BSS_TM_RESP different from 0 like BSS_TM_RESP 2 (denied) or 6 (Delay 
>> requested). Then it should be allowed to stay but this is not 
>> possible as it will be hardly disassociated by hostap. This leads 
>> into stuttering with e.g. VoIP sessions if the client cannot 
>> associate with the new AP somehow...
>>
>> Usteer implemented a workaround not setting disassociation timer and 
>> force the disassociation on its own but clients reacts differently 
>> knowing the exact time... 
>> https://www.cisco.com/c/en/us/support/docs/wireless-mobility/wireless-lan-wlan/201015-802-11v-Basic-Service-Set-BSS-on-AireO.html#anc10
>>
>>
>> My idea was to do the whole disassociation handling in Usteer so if 
>> the client responded with a deny nothing has to be done. If the 
>> client does not answer it will be disassociated with UBUS: del_client 
>> command. I did not checked what is exactly called in hostap but it is 
>> hostapd_drv_sta_deauth and ap_sta_deauthenticate.
>>
>>
>> To sum it up: It is crucial for some Wifi clients to have 
>> disassociation timer published in the BSS_TM_REQ frame as it leads 
>> into a higher priority. Disassociation imminent is unrewarding 
>> without...but is using disassociation timer the BSS_TM_RESP is 
>> senseless as the disassociation is hardcoded in hostap and cannot be 
>> stopped.
>>
>>
>>
>> Am 25.12.2024 um 18:25 schrieb Jouni Malinen:
>>> On Sat, Nov 30, 2024 at 10:20:17PM +0100, Nils Hendrik Rottgardt wrote:
>>>> To give controllers like usteer or DAWN the opportunity to 
>>>> disassociate
>>>> with the right reason code and also avoid a disassociation if it is
>>>> not neccessary.
>>> For the "right reason code" part, I would prefer to have an option for
>>> such external components to provide that reason code with the 
>>> command to
>>> send the BSS Transition Management Request frame instead of expecting
>>> them to handle the timeout.
>>>
>>> For the "avoid a disassociation part", why would the AP send a
>>> notification of imminent disassociation if it is not going to
>>> disassociate the STA? If I remember correctly, the disassociation is
>>> actually required to happen at least for some cases, so it would be 
>>> good
>>> to understand why there would be desire to avoid that.
>>>
>>> Furthermore, this patch does not actually provide any means for using
>>> this proposed functionality since nothing here calls
>>> wnm_send_bss_tm_req_disassoc() with disassoc = false. Even if such
>>> option were added, it should also be noted that set_disassoc_timer()
>>> does two things: removes a cached PMKSA for the STA (to force new
>>> association) and starts a timer to disassociate the STA. Is there 
>>> really
>>> need to skip that first part as well?
>>>



More information about the Hostap mailing list