qcacld-3.0: Clear same pmk info while processing del/flush pmk
Clear sae_single_pmk info while processing del/flush pmk command from supplicant, if required. Change-Id: Idd974822ef0426461cd9971e54d8244d64b246b5 CRs-Fixed: 2616036
This commit is contained in:
@@ -2335,6 +2335,15 @@ wlan_mlme_update_sae_single_pmk(struct wlan_objmgr_vdev *vdev,
|
|||||||
void
|
void
|
||||||
wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||||
struct wlan_mlme_sae_single_pmk *pmksa);
|
struct wlan_mlme_sae_single_pmk *pmksa);
|
||||||
|
/**
|
||||||
|
* wlan_mlme_clear_sae_single_pmk_info - API to clear mlme_pmkid_info ap caps
|
||||||
|
* @vdev: vdev object
|
||||||
|
* @pmk : pmk info to clear
|
||||||
|
*
|
||||||
|
* Return : None
|
||||||
|
*/
|
||||||
|
void wlan_mlme_clear_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct mlme_pmk_info *pmk);
|
||||||
#else
|
#else
|
||||||
static inline void
|
static inline void
|
||||||
wlan_mlme_set_sae_single_pmk_bss_cap(struct wlan_objmgr_psoc *psoc,
|
wlan_mlme_set_sae_single_pmk_bss_cap(struct wlan_objmgr_psoc *psoc,
|
||||||
@@ -2353,7 +2362,14 @@ wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
|||||||
struct wlan_mlme_sae_single_pmk *pmksa)
|
struct wlan_mlme_sae_single_pmk *pmksa)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void wlan_mlme_clear_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct mlme_pmk_info *pmk)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mlme_get_roam_fail_reason_str() - Get fail string from enum
|
* mlme_get_roam_fail_reason_str() - Get fail string from enum
|
||||||
* WMI_ROAM_FAIL_REASON_ID
|
* WMI_ROAM_FAIL_REASON_ID
|
||||||
|
@@ -3666,6 +3666,37 @@ void wlan_mlme_get_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
|||||||
qdf_mem_zero(pmksa->pmk_info.pmk, sizeof(*pmksa->pmk_info.pmk));
|
qdf_mem_zero(pmksa->pmk_info.pmk, sizeof(*pmksa->pmk_info.pmk));
|
||||||
pmksa->pmk_info.pmk_len = 0;
|
pmksa->pmk_info.pmk_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlan_mlme_clear_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct mlme_pmk_info *pmk_recv)
|
||||||
|
{
|
||||||
|
struct mlme_legacy_priv *mlme_priv;
|
||||||
|
struct wlan_mlme_sae_single_pmk sae_single_pmk;
|
||||||
|
|
||||||
|
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||||
|
if (!mlme_priv) {
|
||||||
|
mlme_legacy_err("vdev legacy private object is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sae_single_pmk = mlme_priv->mlme_roam.sae_single_pmk;
|
||||||
|
|
||||||
|
if (!pmk_recv) {
|
||||||
|
/* Process flush pmk cmd */
|
||||||
|
mlme_legacy_debug("Flush sae_single_pmk info");
|
||||||
|
qdf_mem_zero(&sae_single_pmk.pmk_info,
|
||||||
|
sizeof(sae_single_pmk.pmk_info));
|
||||||
|
} else if (pmk_recv->pmk_len != sae_single_pmk.pmk_info.pmk_len) {
|
||||||
|
mlme_legacy_debug("Invalid pmk len");
|
||||||
|
return;
|
||||||
|
} else if (!qdf_mem_cmp(&sae_single_pmk.pmk_info.pmk, pmk_recv->pmk,
|
||||||
|
pmk_recv->pmk_len)) {
|
||||||
|
/* Process delete pmk cmd */
|
||||||
|
mlme_legacy_debug("Clear sae_single_pmk info");
|
||||||
|
qdf_mem_zero(&sae_single_pmk.pmk_info,
|
||||||
|
sizeof(sae_single_pmk.pmk_info));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *mlme_get_roam_fail_reason_str(uint32_t result)
|
char *mlme_get_roam_fail_reason_str(uint32_t result)
|
||||||
|
@@ -21432,7 +21432,6 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy,
|
|||||||
{
|
{
|
||||||
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
mac_handle_t mac_handle;
|
|
||||||
QDF_STATUS result = QDF_STATUS_SUCCESS;
|
QDF_STATUS result = QDF_STATUS_SUCCESS;
|
||||||
int status;
|
int status;
|
||||||
tPmkidCacheInfo *pmk_cache;
|
tPmkidCacheInfo *pmk_cache;
|
||||||
@@ -21470,8 +21469,6 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy,
|
|||||||
if (!pmk_cache)
|
if (!pmk_cache)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
mac_handle = hdd_ctx->mac_handle;
|
|
||||||
|
|
||||||
hdd_fill_pmksa_info(adapter, pmk_cache, pmksa, false);
|
hdd_fill_pmksa_info(adapter, pmk_cache, pmksa, false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -21487,7 +21484,7 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy,
|
|||||||
TRACE_CODE_HDD_CFG80211_SET_PMKSA,
|
TRACE_CODE_HDD_CFG80211_SET_PMKSA,
|
||||||
adapter->vdev_id, result);
|
adapter->vdev_id, result);
|
||||||
|
|
||||||
sme_set_del_pmkid_cache(mac_handle, adapter->vdev_id,
|
sme_set_del_pmkid_cache(hdd_ctx->psoc, adapter->vdev_id,
|
||||||
pmk_cache, true);
|
pmk_cache, true);
|
||||||
|
|
||||||
qdf_mem_zero(pmk_cache, sizeof(pmk_cache));
|
qdf_mem_zero(pmk_cache, sizeof(pmk_cache));
|
||||||
@@ -21538,7 +21535,6 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy,
|
|||||||
{
|
{
|
||||||
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
mac_handle_t mac_handle;
|
|
||||||
int status = 0;
|
int status = 0;
|
||||||
tPmkidCacheInfo *pmk_cache;
|
tPmkidCacheInfo *pmk_cache;
|
||||||
|
|
||||||
@@ -21569,14 +21565,16 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy,
|
|||||||
if (!pmk_cache)
|
if (!pmk_cache)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
mac_handle = hdd_ctx->mac_handle;
|
|
||||||
|
|
||||||
qdf_mtrace(QDF_MODULE_ID_HDD, QDF_MODULE_ID_HDD,
|
qdf_mtrace(QDF_MODULE_ID_HDD, QDF_MODULE_ID_HDD,
|
||||||
TRACE_CODE_HDD_CFG80211_DEL_PMKSA,
|
TRACE_CODE_HDD_CFG80211_DEL_PMKSA,
|
||||||
adapter->vdev_id, 0);
|
adapter->vdev_id, 0);
|
||||||
|
|
||||||
hdd_fill_pmksa_info(adapter, pmk_cache, pmksa, true);
|
hdd_fill_pmksa_info(adapter, pmk_cache, pmksa, true);
|
||||||
|
|
||||||
|
/* clear single_pmk_info information */
|
||||||
|
sme_clear_sae_single_pmk_info(hdd_ctx->psoc,adapter->vdev_id,
|
||||||
|
pmk_cache);
|
||||||
|
|
||||||
/* Delete the PMKID CSR cache */
|
/* Delete the PMKID CSR cache */
|
||||||
if (QDF_STATUS_SUCCESS !=
|
if (QDF_STATUS_SUCCESS !=
|
||||||
wlan_hdd_del_pmksa_cache(adapter, pmk_cache)) {
|
wlan_hdd_del_pmksa_cache(adapter, pmk_cache)) {
|
||||||
@@ -21588,8 +21586,9 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy,
|
|||||||
status = -EINVAL;
|
status = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sme_set_del_pmkid_cache(mac_handle, adapter->vdev_id, pmk_cache,
|
sme_set_del_pmkid_cache(hdd_ctx->psoc, adapter->vdev_id, pmk_cache,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
qdf_mem_zero(pmk_cache, sizeof(*pmk_cache));
|
qdf_mem_zero(pmk_cache, sizeof(*pmk_cache));
|
||||||
qdf_mem_free(pmk_cache);
|
qdf_mem_free(pmk_cache);
|
||||||
|
|
||||||
@@ -21637,7 +21636,6 @@ static int __wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy,
|
|||||||
{
|
{
|
||||||
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
mac_handle_t mac_handle;
|
|
||||||
int errno;
|
int errno;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
|
||||||
@@ -21658,15 +21656,13 @@ static int __wlan_hdd_cfg80211_flush_pmksa(struct wiphy *wiphy,
|
|||||||
if (errno)
|
if (errno)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
mac_handle = hdd_ctx->mac_handle;
|
|
||||||
|
|
||||||
status = wlan_hdd_flush_pmksa_cache(adapter);
|
status = wlan_hdd_flush_pmksa_cache(adapter);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
hdd_err("Cannot flush PMKIDCache");
|
hdd_err("Cannot flush PMKIDCache");
|
||||||
errno = -EINVAL;
|
errno = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sme_set_del_pmkid_cache(mac_handle, adapter->vdev_id, NULL, false);
|
sme_set_del_pmkid_cache(hdd_ctx->psoc, adapter->vdev_id, NULL, false);
|
||||||
hdd_exit();
|
hdd_exit();
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
@@ -2756,17 +2756,33 @@ QDF_STATUS sme_set_vc_mode_config(uint32_t vc_bitmap);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* sme_set_del_pmkid_cache() - API to update PMKID cache
|
* sme_set_del_pmkid_cache() - API to update PMKID cache
|
||||||
* @mac_handle: Opaque handle to the global MAC context
|
* @psoc: psoc common object
|
||||||
* @session_id: Session id
|
* @session_id: Session id
|
||||||
* @pmk_cache_info: Pointer to PMK cache info
|
* @pmk_cache_info: Pointer to PMK cache info
|
||||||
* @is_add: boolean that implies whether to add or delete PMKID entry
|
* @is_add: boolean that implies whether to add or delete PMKID entry
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
QDF_STATUS sme_set_del_pmkid_cache(mac_handle_t mac_handle, uint8_t session_id,
|
QDF_STATUS sme_set_del_pmkid_cache(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t session_id,
|
||||||
tPmkidCacheInfo *pmk_cache_info,
|
tPmkidCacheInfo *pmk_cache_info,
|
||||||
bool is_add);
|
bool is_add);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sme_clear_sae_single_pmk_info() - Clear sae_single_pmk onfo
|
||||||
|
* @psoc: Psoc object
|
||||||
|
* @session_id: session id
|
||||||
|
* @pmk_cache_info: pmk cache info
|
||||||
|
*
|
||||||
|
* This function will clear sae_single_pmk info while processing delete pmk
|
||||||
|
* command from userspace.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void sme_clear_sae_single_pmk_info(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t session_id,
|
||||||
|
tPmkidCacheInfo *pmk_cache_info);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sme_send_hlp_ie_info() - API to send HLP IE info to fw
|
* sme_send_hlp_ie_info() - API to send HLP IE info to fw
|
||||||
* @mac_handle: Opaque handle to the global MAC context
|
* @mac_handle: Opaque handle to the global MAC context
|
||||||
|
@@ -60,6 +60,7 @@
|
|||||||
#include "cfg_ucfg_api.h"
|
#include "cfg_ucfg_api.h"
|
||||||
#include "wlan_fwol_ucfg_api.h"
|
#include "wlan_fwol_ucfg_api.h"
|
||||||
#include <wlan_coex_ucfg_api.h>
|
#include <wlan_coex_ucfg_api.h>
|
||||||
|
#include "wlan_crypto_global_api.h"
|
||||||
|
|
||||||
static QDF_STATUS init_sme_cmd_list(struct mac_context *mac);
|
static QDF_STATUS init_sme_cmd_list(struct mac_context *mac);
|
||||||
|
|
||||||
@@ -14166,7 +14167,33 @@ QDF_STATUS sme_fast_reassoc(mac_handle_t mac_handle,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QDF_STATUS sme_set_del_pmkid_cache(mac_handle_t mac_handle, uint8_t session_id,
|
void sme_clear_sae_single_pmk_info(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t session_id,
|
||||||
|
tPmkidCacheInfo *pmk_cache_info)
|
||||||
|
{
|
||||||
|
struct wlan_crypto_pmksa *pmksa;
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
tPmkidCacheInfo pmk_to_del;
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, session_id,
|
||||||
|
WLAN_LEGACY_SME_ID);
|
||||||
|
if (!vdev) {
|
||||||
|
sme_err("Invalid vdev");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pmksa = wlan_crypto_get_pmksa(vdev, &pmk_cache_info->BSSID);
|
||||||
|
if (!pmksa) {
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qdf_mem_copy(&pmk_to_del.pmk, pmksa->pmk, pmksa->pmk_len);
|
||||||
|
pmk_to_del.pmk_len = pmksa->pmk_len;
|
||||||
|
csr_clear_sae_single_pmk(psoc, session_id, &pmk_to_del);
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS sme_set_del_pmkid_cache(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t session_id,
|
||||||
tPmkidCacheInfo *pmk_cache_info,
|
tPmkidCacheInfo *pmk_cache_info,
|
||||||
bool is_add)
|
bool is_add)
|
||||||
{
|
{
|
||||||
@@ -14183,6 +14210,7 @@ QDF_STATUS sme_set_del_pmkid_cache(mac_handle_t mac_handle, uint8_t session_id,
|
|||||||
|
|
||||||
if (!pmk_cache_info) {
|
if (!pmk_cache_info) {
|
||||||
pmk_cache->is_flush_all = true;
|
pmk_cache->is_flush_all = true;
|
||||||
|
csr_clear_sae_single_pmk(psoc, session_id, NULL);
|
||||||
goto send_flush_cmd;
|
goto send_flush_cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14582,7 +14582,7 @@ QDF_STATUS csr_roam_set_psk_pmk(struct mac_context *mac, uint32_t sessionId,
|
|||||||
pSession->pmk_len = pmk_len;
|
pSession->pmk_len = pmk_len;
|
||||||
|
|
||||||
if (csr_is_auth_type_ese(mac->roam.roamSession[sessionId].
|
if (csr_is_auth_type_ese(mac->roam.roamSession[sessionId].
|
||||||
connectedProfile.AuthType)) {
|
connectedProfile.AuthType)) {
|
||||||
sme_debug("PMK update is not required for ESE");
|
sme_debug("PMK update is not required for ESE");
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -14605,6 +14605,37 @@ static void csr_mem_zero_psk_pmk(struct csr_roam_session *session)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
|
void csr_clear_sae_single_pmk(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, tPmkidCacheInfo *pmk_cache)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
uint32_t keymgmt;
|
||||||
|
struct mlme_pmk_info pmk_info;
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||||
|
WLAN_LEGACY_SME_ID);
|
||||||
|
if (!vdev) {
|
||||||
|
sme_err("vdev is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
keymgmt = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
|
||||||
|
if (!(keymgmt & (1 << WLAN_CRYPTO_KEY_MGMT_SAE))) {
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pmk_cache) {
|
||||||
|
qdf_mem_copy(&pmk_info.pmk, pmk_cache->pmk, pmk_cache->pmk_len);
|
||||||
|
pmk_info.pmk_len = pmk_cache->pmk_len;
|
||||||
|
wlan_mlme_clear_sae_single_pmk_info(vdev, &pmk_info);
|
||||||
|
} else {
|
||||||
|
wlan_mlme_clear_sae_single_pmk_info(vdev, NULL);
|
||||||
|
}
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS csr_roam_del_pmkid_from_cache(struct mac_context *mac,
|
QDF_STATUS csr_roam_del_pmkid_from_cache(struct mac_context *mac,
|
||||||
uint32_t sessionId,
|
uint32_t sessionId,
|
||||||
tPmkidCacheInfo *pmksa,
|
tPmkidCacheInfo *pmksa,
|
||||||
@@ -14632,12 +14663,17 @@ QDF_STATUS csr_roam_del_pmkid_from_cache(struct mac_context *mac,
|
|||||||
/* Flush the entire cache */
|
/* Flush the entire cache */
|
||||||
qdf_mem_zero(pSession->PmkidCacheInfo,
|
qdf_mem_zero(pSession->PmkidCacheInfo,
|
||||||
sizeof(tPmkidCacheInfo) * CSR_MAX_PMKID_ALLOWED);
|
sizeof(tPmkidCacheInfo) * CSR_MAX_PMKID_ALLOWED);
|
||||||
|
/* flush single_pmk_info information */
|
||||||
|
csr_clear_sae_single_pmk(mac->psoc, pSession->vdev_id, NULL);
|
||||||
pSession->NumPmkidCache = 0;
|
pSession->NumPmkidCache = 0;
|
||||||
pSession->curr_cache_idx = 0;
|
pSession->curr_cache_idx = 0;
|
||||||
csr_mem_zero_psk_pmk(pSession);
|
csr_mem_zero_psk_pmk(pSession);
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clear single_pmk_info information */
|
||||||
|
csr_clear_sae_single_pmk(mac->psoc, pSession->vdev_id, pmksa);
|
||||||
|
|
||||||
/* !flush_cache - so look up in the cache */
|
/* !flush_cache - so look up in the cache */
|
||||||
for (Index = 0; Index < CSR_MAX_PMKID_ALLOWED; Index++) {
|
for (Index = 0; Index < CSR_MAX_PMKID_ALLOWED; Index++) {
|
||||||
cached_pmksa = &pSession->PmkidCacheInfo[Index];
|
cached_pmksa = &pSession->PmkidCacheInfo[Index];
|
||||||
|
@@ -919,6 +919,26 @@ QDF_STATUS csr_roam_del_pmkid_from_cache(struct mac_context *mac,
|
|||||||
tPmkidCacheInfo *pmksa,
|
tPmkidCacheInfo *pmksa,
|
||||||
bool flush_cache);
|
bool flush_cache);
|
||||||
|
|
||||||
|
#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
|
/**
|
||||||
|
* csr_clear_sae_single_pmk - API to clear single_pmk_info cache
|
||||||
|
* @psoc: psoc common object
|
||||||
|
* @vdev_id: session id
|
||||||
|
* @pmksa: pmk info
|
||||||
|
*
|
||||||
|
* Return : None
|
||||||
|
*/
|
||||||
|
void csr_clear_sae_single_pmk(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, tPmkidCacheInfo *pmksa);
|
||||||
|
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
csr_clear_sae_single_pmk(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||||
|
tPmkidCacheInfo *pmksa)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS csr_send_ext_change_channel(struct mac_context *mac_ctx,
|
QDF_STATUS csr_send_ext_change_channel(struct mac_context *mac_ctx,
|
||||||
uint32_t channel, uint8_t session_id);
|
uint32_t channel, uint8_t session_id);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user