nl80211: Make use of driver's capability to detect inactive stations
When drivers advertise their capability to free up inactive stations based on ap_max_inactivity, send the inactivity period timeout to driver in NL80211_ATTR_INACTIVITY_TIMEOUT. This introduces a WPA_DRIVER_FLAGS (WPA_DRIVER_FLAGS_INACTIVITY_TIMER) so that the inactivity period will be sent only when this capability bit is set. Signed-hostap: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
This commit is contained in:
parent
07f53b8cc7
commit
a0133ee1c9
3 changed files with 18 additions and 0 deletions
|
@ -682,6 +682,7 @@ void ieee802_11_set_beacon(struct hostapd_data *hapd)
|
||||||
!is_zero_ether_addr(hapd->conf->hessid))
|
!is_zero_ether_addr(hapd->conf->hessid))
|
||||||
params.hessid = hapd->conf->hessid;
|
params.hessid = hapd->conf->hessid;
|
||||||
params.access_network_type = hapd->conf->access_network_type;
|
params.access_network_type = hapd->conf->access_network_type;
|
||||||
|
params.ap_max_inactivity = hapd->conf->ap_max_inactivity;
|
||||||
if (hostapd_drv_set_ap(hapd, ¶ms))
|
if (hostapd_drv_set_ap(hapd, ¶ms))
|
||||||
wpa_printf(MSG_ERROR, "Failed to set beacon parameters");
|
wpa_printf(MSG_ERROR, "Failed to set beacon parameters");
|
||||||
hostapd_free_ap_extra_ies(hapd, beacon, proberesp, assocresp);
|
hostapd_free_ap_extra_ies(hapd, beacon, proberesp, assocresp);
|
||||||
|
|
|
@ -707,6 +707,13 @@ struct wpa_driver_ap_params {
|
||||||
* enabled.
|
* enabled.
|
||||||
*/
|
*/
|
||||||
u8 access_network_type;
|
u8 access_network_type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ap_max_inactivity - Timeout in seconds to detect STA's inactivity
|
||||||
|
*
|
||||||
|
* This is used by driver which advertises this capability.
|
||||||
|
*/
|
||||||
|
int ap_max_inactivity;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -790,6 +797,8 @@ struct wpa_driver_capa {
|
||||||
#define WPA_DRIVER_FLAGS_PROBE_RESP_OFFLOAD 0x00200000
|
#define WPA_DRIVER_FLAGS_PROBE_RESP_OFFLOAD 0x00200000
|
||||||
/* Driver supports U-APSD in AP mode */
|
/* Driver supports U-APSD in AP mode */
|
||||||
#define WPA_DRIVER_FLAGS_AP_UAPSD 0x00400000
|
#define WPA_DRIVER_FLAGS_AP_UAPSD 0x00400000
|
||||||
|
/* Driver supports inactivity timer in AP mode */
|
||||||
|
#define WPA_DRIVER_FLAGS_INACTIVITY_TIMER 0x00800000
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
|
||||||
int max_scan_ssids;
|
int max_scan_ssids;
|
||||||
|
|
|
@ -2512,6 +2512,9 @@ broken_combination:
|
||||||
|
|
||||||
if (flags & NL80211_FEATURE_SK_TX_STATUS)
|
if (flags & NL80211_FEATURE_SK_TX_STATUS)
|
||||||
info->data_tx_status = 1;
|
info->data_tx_status = 1;
|
||||||
|
|
||||||
|
if (flags & NL80211_FEATURE_INACTIVITY_TIMER)
|
||||||
|
capa->flags |= WPA_DRIVER_FLAGS_INACTIVITY_TIMER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[NL80211_ATTR_PROBE_RESP_OFFLOAD]) {
|
if (tb[NL80211_ATTR_PROBE_RESP_OFFLOAD]) {
|
||||||
|
@ -5415,6 +5418,11 @@ static int wpa_driver_nl80211_set_ap(void *priv,
|
||||||
wpabuf_head(params->assocresp_ies));
|
wpabuf_head(params->assocresp_ies));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (drv->capa.flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER) {
|
||||||
|
NLA_PUT_U16(msg, NL80211_ATTR_INACTIVITY_TIMEOUT,
|
||||||
|
params->ap_max_inactivity);
|
||||||
|
}
|
||||||
|
|
||||||
ret = send_and_recv_msgs(drv, msg, NULL, NULL);
|
ret = send_and_recv_msgs(drv, msg, NULL, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",
|
wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue