diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c index 48a6169be..d18e3f1c2 100644 --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c @@ -181,6 +181,9 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, wep->keys_set = 1; } + if (ssid->ap_max_inactivity) + bss->ap_max_inactivity = ssid->ap_max_inactivity; + /* Select group cipher based on the enabled pairwise cipher suites */ pairwise = 0; if (bss->wpa & 1) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index a90e9d365..9ca8f6387 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -1602,6 +1602,7 @@ static const struct parse_data ssid_fields[] = { { INT_RANGE(ampdu_density, -1, 7) }, { STR(ht_mcs) }, #endif /* CONFIG_HT_OVERRIDES */ + { INT(ap_max_inactivity) }, }; #undef OFFSET diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h index f2bb59740..fa18826e4 100644 --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -484,6 +484,14 @@ struct wpa_ssid { */ char *ht_mcs; #endif /* CONFIG_HT_OVERRIDES */ + + /** + * ap_max_inactivity - Timeout in seconds to detect STA's inactivity + * + * This timeout value is used in AP mode to clean up inactive stations. + * By default: 300 seconds. + */ + int ap_max_inactivity; }; #endif /* CONFIG_SSID_H */ diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf index 70d3030e5..fb8ea259a 100644 --- a/wpa_supplicant/wpa_supplicant.conf +++ b/wpa_supplicant/wpa_supplicant.conf @@ -653,6 +653,23 @@ fast_reauth=1 # number of authentication servers. Strict EAP conformance mode can be # configured by disabling workarounds with eap_workaround=0. +# Station inactivity limit +# +# If a station does not send anything in ap_max_inactivity seconds, an +# empty data frame is sent to it in order to verify whether it is +# still in range. If this frame is not ACKed, the station will be +# disassociated and then deauthenticated. This feature is used to +# clear station table of old entries when the STAs move out of the +# range. +# +# The station can associate again with the AP if it is still in range; +# this inactivity poll is just used as a nicer way of verifying +# inactivity; i.e., client will not report broken connection because +# disassociation frame is not sent immediately without first polling +# the STA with a data frame. +# default: 300 (i.e., 5 minutes) +#ap_max_inactivity=300 + # Example blocks: # Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers