WNM: Fix ess_disassoc timeout to be specified in TBTTs

This was previously claimed to be in ms, but the field in BSS Transition
Management Request frame is in number of TBTTs (beacon interval). Use
that unit in the ESS_DISASSOC control interface command to be able to
specify any value and just modify the timeout value to be calculated
based on beacon interval.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2013-05-23 15:57:13 +03:00 committed by Jouni Malinen
parent 901d1fe1e5
commit 8e1bc70231

View file

@ -595,6 +595,7 @@ static int hostapd_ctrl_iface_ess_disassoc(struct hostapd_data *hapd,
/* send disassociation frame after time-out */ /* send disassociation frame after time-out */
if (disassoc_timer) { if (disassoc_timer) {
struct sta_info *sta; struct sta_info *sta;
int timeout, beacon_int;
/* /*
* Prevent STA from reconnecting using cached PMKSA to force * Prevent STA from reconnecting using cached PMKSA to force
@ -611,10 +612,18 @@ static int hostapd_ctrl_iface_ess_disassoc(struct hostapd_data *hapd,
return -1; return -1;
} }
beacon_int = hapd->iconf->beacon_int;
if (beacon_int < 1)
beacon_int = 100; /* best guess */
/* Calculate timeout in ms based on beacon_int in TU */
timeout = disassoc_timer * beacon_int * 128 / 125;
wpa_printf(MSG_DEBUG, "Disassociation timer for " MACSTR
" set to %d ms", MAC2STR(addr), timeout);
sta->timeout_next = STA_DISASSOC_FROM_CLI; sta->timeout_next = STA_DISASSOC_FROM_CLI;
eloop_cancel_timeout(ap_handle_timer, hapd, sta); eloop_cancel_timeout(ap_handle_timer, hapd, sta);
eloop_register_timeout(disassoc_timer / 1000, eloop_register_timeout(timeout / 1000,
disassoc_timer % 1000 * 1000, timeout % 1000 * 1000,
ap_handle_timer, hapd, sta); ap_handle_timer, hapd, sta);
} }