WNM: Configurable BSS Max Idle Period management on AP
Allow AP's behavior for BSS Max Idle Period management to be configured. Previously, this was automatically enabled for all CONFIG_WNM_AP=y builds. This can now be changed with the new hostapd configuration parameter bss_max_idle: 0 = BSS Max Idle Period management disabled 1 = BSS Max Idle Period management enabled (default and the previous behavior) 2 = BSS Max Idle Period management enabled with requirement for protected keep-alive frames Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
parent
7566370a96
commit
846b1d618c
5 changed files with 23 additions and 2 deletions
|
@ -2549,6 +2549,15 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
bss->ap_max_inactivity = atoi(pos);
|
bss->ap_max_inactivity = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
|
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
|
||||||
bss->skip_inactivity_poll = atoi(pos);
|
bss->skip_inactivity_poll = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "bss_max_idle") == 0) {
|
||||||
|
int val = atoi(pos);
|
||||||
|
|
||||||
|
if (val < 0 || val > 2) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"Line %d: Invalid bss_max_idle value", line);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
bss->bss_max_idle = val;
|
||||||
} else if (os_strcmp(buf, "config_id") == 0) {
|
} else if (os_strcmp(buf, "config_id") == 0) {
|
||||||
os_free(bss->config_id);
|
os_free(bss->config_id);
|
||||||
bss->config_id = os_strdup(pos);
|
bss->config_id = os_strdup(pos);
|
||||||
|
|
|
@ -522,6 +522,13 @@ wmm_ac_vo_acm=0
|
||||||
# even if they are still in range of the AP. This can be done by setting
|
# 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 to 1 (default 0).
|
||||||
#skip_inactivity_poll=0
|
#skip_inactivity_poll=0
|
||||||
|
#
|
||||||
|
# BSS max idle period management
|
||||||
|
# 0 = disabled (do not advertise and manage BSS max idle period)
|
||||||
|
# 1 = enabled (advertise and manage BSS max idle period; default)
|
||||||
|
# 2 = enabled requiring protected frames (advertise and manage BSS max idle
|
||||||
|
# period and require STAs to use protected keep-alive frames)
|
||||||
|
#bss_max_idle=1
|
||||||
|
|
||||||
# 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
|
||||||
|
|
|
@ -92,6 +92,7 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)
|
||||||
bss->eap_sim_id = 3;
|
bss->eap_sim_id = 3;
|
||||||
bss->eap_sim_aka_fast_reauth_limit = 1000;
|
bss->eap_sim_aka_fast_reauth_limit = 1000;
|
||||||
bss->ap_max_inactivity = AP_MAX_INACTIVITY;
|
bss->ap_max_inactivity = AP_MAX_INACTIVITY;
|
||||||
|
bss->bss_max_idle = 1;
|
||||||
bss->eapol_version = EAPOL_VERSION;
|
bss->eapol_version = EAPOL_VERSION;
|
||||||
|
|
||||||
bss->max_listen_interval = 65535;
|
bss->max_listen_interval = 65535;
|
||||||
|
|
|
@ -465,6 +465,7 @@ struct hostapd_bss_config {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int ap_max_inactivity;
|
int ap_max_inactivity;
|
||||||
|
int bss_max_idle;
|
||||||
int ignore_broadcast_ssid;
|
int ignore_broadcast_ssid;
|
||||||
int no_probe_resp_if_max_sta;
|
int no_probe_resp_if_max_sta;
|
||||||
|
|
||||||
|
|
|
@ -742,7 +742,8 @@ u8 * hostapd_eid_bss_max_idle_period(struct hostapd_data *hapd, u8 *eid)
|
||||||
u8 *pos = eid;
|
u8 *pos = eid;
|
||||||
|
|
||||||
#ifdef CONFIG_WNM_AP
|
#ifdef CONFIG_WNM_AP
|
||||||
if (hapd->conf->ap_max_inactivity > 0) {
|
if (hapd->conf->ap_max_inactivity > 0 &&
|
||||||
|
hapd->conf->bss_max_idle) {
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
*pos++ = WLAN_EID_BSS_MAX_IDLE_PERIOD;
|
*pos++ = WLAN_EID_BSS_MAX_IDLE_PERIOD;
|
||||||
*pos++ = 3;
|
*pos++ = 3;
|
||||||
|
@ -757,7 +758,9 @@ u8 * hostapd_eid_bss_max_idle_period(struct hostapd_data *hapd, u8 *eid)
|
||||||
val = 65535;
|
val = 65535;
|
||||||
WPA_PUT_LE16(pos, val);
|
WPA_PUT_LE16(pos, val);
|
||||||
pos += 2;
|
pos += 2;
|
||||||
*pos++ = 0x00; /* TODO: Protected Keep-Alive Required */
|
/* Set the Protected Keep-Alive Required bit based on
|
||||||
|
* configuration */
|
||||||
|
*pos++ = hapd->conf->bss_max_idle == 2 ? BIT(0) : 0x00;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_WNM_AP */
|
#endif /* CONFIG_WNM_AP */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue