hostapd: Make inactivity polling configurable

hostapd uses the poll method to check if the station is alive
after the station has been inactive for ap_max_inactivity seconds.
Make the poll mechanism configurable so that user can choose to
disconnect idle clients.

This can be especially useful when some devices/firmwares have
restrictions on the number of clients that can connect to the AP
and that limit is smaller than the total number of stations trying
to use the AP.

Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Nishant Sarmukadam <nishants@marvell.com>
This commit is contained in:
Yogesh Ashok Powar 2011-12-25 20:57:01 +02:00 committed by Jouni Malinen
parent c3daee1df5
commit ef01fa7bfa
4 changed files with 14 additions and 1 deletions

View File

@ -1334,6 +1334,8 @@ struct hostapd_config * hostapd_config_read(const char *fname)
bss->isolate = atoi(pos); bss->isolate = atoi(pos);
} else if (os_strcmp(buf, "ap_max_inactivity") == 0) { } else if (os_strcmp(buf, "ap_max_inactivity") == 0) {
bss->ap_max_inactivity = atoi(pos); bss->ap_max_inactivity = atoi(pos);
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
bss->skip_inactivity_poll = atoi(pos);
} else if (os_strcmp(buf, "country_code") == 0) { } else if (os_strcmp(buf, "country_code") == 0) {
os_memcpy(conf->country, pos, 2); os_memcpy(conf->country, pos, 2);
/* FIX: make this configurable */ /* FIX: make this configurable */

View File

@ -339,6 +339,12 @@ wmm_ac_vo_acm=0
# the STA with a data frame. # the STA with a data frame.
# default: 300 (i.e., 5 minutes) # default: 300 (i.e., 5 minutes)
#ap_max_inactivity=300 #ap_max_inactivity=300
#
# The inactivity polling can be disabled to disconnect stations based on
# inactivity timeout so that idle stations are more likely to be disconnected
# even if they are still in range of the AP. This can be done by setting
# skip_inactivity_poll to 1 (default 0).
#skip_inactivity_poll=0
# Disassociate stations based on excessive transmission failures or other # Disassociate stations based on excessive transmission failures or other
# indications of connection loss. This depends on the driver capabilities and # indications of connection loss. This depends on the driver capabilities and

View File

@ -340,6 +340,7 @@ struct hostapd_bss_config {
int p2p; int p2p;
int disassoc_low_ack; int disassoc_low_ack;
int skip_inactivity_poll;
#define TDLS_PROHIBIT BIT(0) #define TDLS_PROHIBIT BIT(0)
#define TDLS_PROHIBIT_CHAN_SWITCH BIT(1) #define TDLS_PROHIBIT_CHAN_SWITCH BIT(1)

View File

@ -301,12 +301,16 @@ void ap_handle_timer(void *eloop_ctx, void *timeout_ctx)
"inactive too long: %d sec, max allowed: %d", "inactive too long: %d sec, max allowed: %d",
MAC2STR(sta->addr), inactive_sec, MAC2STR(sta->addr), inactive_sec,
hapd->conf->ap_max_inactivity); hapd->conf->ap_max_inactivity);
if (hapd->conf->skip_inactivity_poll)
sta->timeout_next = STA_DISASSOC;
} }
} }
if ((sta->flags & WLAN_STA_ASSOC) && if ((sta->flags & WLAN_STA_ASSOC) &&
sta->timeout_next == STA_DISASSOC && sta->timeout_next == STA_DISASSOC &&
!(sta->flags & WLAN_STA_PENDING_POLL)) { !(sta->flags & WLAN_STA_PENDING_POLL) &&
!hapd->conf->skip_inactivity_poll) {
wpa_msg(hapd->msg_ctx, MSG_DEBUG, "Station " MACSTR wpa_msg(hapd->msg_ctx, MSG_DEBUG, "Station " MACSTR
" has ACKed data poll", MAC2STR(sta->addr)); " has ACKed data poll", MAC2STR(sta->addr));
/* data nullfunc frame poll did not produce TX errors; assume /* data nullfunc frame poll did not produce TX errors; assume