WNM: Allow a specific BSS max idle period to be requested
Add a new wpa_supplicant network profile parameter max_idle that can be used to specify a specific maximum idle period in units of 1000 TUs (1.024 s) for associations. Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
parent
829ab90d27
commit
6594ea9ef1
6 changed files with 38 additions and 0 deletions
|
@ -2754,6 +2754,7 @@ static const struct parse_data ssid_fields[] = {
|
|||
{ INT_RANGE(sae_pk, 0, 2) },
|
||||
{ INT_RANGE(disable_eht, 0, 1)},
|
||||
{ INT_RANGE(enable_4addr_mode, 0, 1)},
|
||||
{ INT_RANGE(max_idle, 0, 65535)},
|
||||
};
|
||||
|
||||
#undef OFFSET
|
||||
|
|
|
@ -893,6 +893,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
|
|||
#endif /* CONFIG_HE_OVERRIDES */
|
||||
INT(disable_eht);
|
||||
INT(enable_4addr_mode);
|
||||
INT(max_idle);
|
||||
|
||||
#undef STR
|
||||
#undef INT
|
||||
|
|
|
@ -1270,6 +1270,14 @@ struct wpa_ssid {
|
|||
* to use the interface in a bridge.
|
||||
*/
|
||||
int enable_4addr_mode;
|
||||
|
||||
/**
|
||||
* max_idle - BSS max idle period to request
|
||||
*
|
||||
* If nonzero, request the specified number of 1000 TU (i.e., 1.024 s)
|
||||
* as the maximum idle period for the STA during association.
|
||||
*/
|
||||
int max_idle;
|
||||
};
|
||||
|
||||
#endif /* CONFIG_SSID_H */
|
||||
|
|
|
@ -893,6 +893,18 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
|
|||
os_memcpy(pos, ext_capab, ext_capab_len);
|
||||
}
|
||||
|
||||
if (ssid->max_idle && wpa_s->sme.assoc_req_ie_len + 5 <=
|
||||
sizeof(wpa_s->sme.assoc_req_ie)) {
|
||||
u8 *pos = wpa_s->sme.assoc_req_ie + wpa_s->sme.assoc_req_ie_len;
|
||||
|
||||
*pos++ = WLAN_EID_BSS_MAX_IDLE_PERIOD;
|
||||
*pos++ = 3;
|
||||
WPA_PUT_LE16(pos, ssid->max_idle);
|
||||
pos += 2;
|
||||
*pos = 0; /* Idle Options */
|
||||
wpa_s->sme.assoc_req_ie_len += 5;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TESTING_OPTIONS
|
||||
if (wpa_s->rsnxe_override_assoc &&
|
||||
wpabuf_len(wpa_s->rsnxe_override_assoc) <=
|
||||
|
|
|
@ -3576,6 +3576,17 @@ static u8 * wpas_populate_assoc_ies(
|
|||
}
|
||||
}
|
||||
|
||||
if (ssid->max_idle && wpa_ie_len + 5 <= max_wpa_ie_len) {
|
||||
u8 *pos = wpa_ie;
|
||||
|
||||
*pos++ = WLAN_EID_BSS_MAX_IDLE_PERIOD;
|
||||
*pos++ = 3;
|
||||
WPA_PUT_LE16(pos, ssid->max_idle);
|
||||
pos += 2;
|
||||
*pos = 0; /* Idle Options */
|
||||
wpa_ie_len += 5;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HS20
|
||||
if (is_hs20_network(wpa_s, ssid, bss)) {
|
||||
struct wpabuf *hs20;
|
||||
|
|
|
@ -1757,6 +1757,11 @@ fast_reauth=1
|
|||
# In STA mode it defines the EDMG channel for connection (if supported by AP).
|
||||
#edmg_channel=9
|
||||
|
||||
# BSS max idle period to request
|
||||
# If nonzero, request the specified number of 1000 TU (i.e., 1.024 s)
|
||||
# as the maximum idle period for the STA during association.
|
||||
#max_idle=600
|
||||
|
||||
# Example blocks:
|
||||
|
||||
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
|
||||
|
|
Loading…
Reference in a new issue