OCV: Don't start SA Query timer on CSA when SA Query is offloaded
Check driver support for SA Query offload in AP mode and skip starting SA Query timer on CSA for OCV enabled STAs when the driver indicates support for offloading SA Query procedures. Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
parent
f5c8697c04
commit
a91072503c
4 changed files with 31 additions and 6 deletions
|
@ -1011,7 +1011,9 @@ void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
|
|||
hostapd_neighbor_set_own_report(hapd->iface->bss[i]);
|
||||
|
||||
#ifdef CONFIG_OCV
|
||||
if (hapd->conf->ocv) {
|
||||
if (hapd->conf->ocv &&
|
||||
!(hapd->iface->drv_flags2 &
|
||||
WPA_DRIVER_FLAGS2_SA_QUERY_OFFLOAD_AP)) {
|
||||
struct sta_info *sta;
|
||||
bool check_sa_query = false;
|
||||
|
||||
|
|
|
@ -2027,6 +2027,8 @@ struct wpa_driver_capa {
|
|||
#define WPA_DRIVER_FLAGS2_OCV 0x0000000000000080ULL
|
||||
/** Driver expects user space implementation of SME in AP mode */
|
||||
#define WPA_DRIVER_FLAGS2_AP_SME 0x0000000000000100ULL
|
||||
/** Driver handles SA Query procedures in AP mode */
|
||||
#define WPA_DRIVER_FLAGS2_SA_QUERY_OFFLOAD_AP 0x0000000000000200ULL
|
||||
u64 flags2;
|
||||
|
||||
#define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
|
||||
|
|
|
@ -4656,10 +4656,24 @@ static int wpa_driver_nl80211_set_ap(void *priv,
|
|||
nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)))
|
||||
goto fail;
|
||||
|
||||
if (drv->device_ap_sme &&
|
||||
(params->key_mgmt_suites & WPA_KEY_MGMT_SAE) &&
|
||||
nla_put_flag(msg, NL80211_ATTR_EXTERNAL_AUTH_SUPPORT))
|
||||
goto fail;
|
||||
if (drv->device_ap_sme) {
|
||||
u32 flags = 0;
|
||||
|
||||
if (params->key_mgmt_suites & WPA_KEY_MGMT_SAE) {
|
||||
/* Add the previously used flag attribute to support
|
||||
* older kernel versions and the newer flag bit for
|
||||
* newer kernels. */
|
||||
if (nla_put_flag(msg,
|
||||
NL80211_ATTR_EXTERNAL_AUTH_SUPPORT))
|
||||
goto fail;
|
||||
flags |= NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT;
|
||||
}
|
||||
|
||||
flags |= NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT;
|
||||
|
||||
if (nla_put_u32(msg, NL80211_ATTR_AP_SETTINGS_FLAGS, flags))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG, "nl80211: pairwise_ciphers=0x%x",
|
||||
params->pairwise_ciphers);
|
||||
|
|
|
@ -920,8 +920,15 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
|
|||
wiphy_info_tdls(capa, tb[NL80211_ATTR_TDLS_SUPPORT],
|
||||
tb[NL80211_ATTR_TDLS_EXTERNAL_SETUP]);
|
||||
|
||||
if (tb[NL80211_ATTR_DEVICE_AP_SME])
|
||||
if (tb[NL80211_ATTR_DEVICE_AP_SME]) {
|
||||
u32 ap_sme_features_flags =
|
||||
nla_get_u32(tb[NL80211_ATTR_DEVICE_AP_SME]);
|
||||
|
||||
if (ap_sme_features_flags & NL80211_AP_SME_SA_QUERY_OFFLOAD)
|
||||
capa->flags2 |= WPA_DRIVER_FLAGS2_SA_QUERY_OFFLOAD_AP;
|
||||
|
||||
info->device_ap_sme = 1;
|
||||
}
|
||||
|
||||
wiphy_info_feature_flags(info, tb[NL80211_ATTR_FEATURE_FLAGS]);
|
||||
wiphy_info_ext_feature_flags(info, tb[NL80211_ATTR_EXT_FEATURES]);
|
||||
|
|
Loading…
Add table
Reference in a new issue