qcacld-3.0: Move sme_ft_api to connection manager ucfg api
Move sme_ft_api to connection manager ucfg apis. Change-Id: If710be0d8a4a9d45d37f588389e40f66c62c7487 CRs-Fixed: 2990112
This commit is contained in:
parent
d8cb4f5401
commit
7f9ad91112
1
Kbuild
1
Kbuild
@ -736,7 +736,6 @@ SME_CSR_OBJS := $(SME_SRC_DIR)/csr/csr_api_roam.o \
|
||||
SME_QOS_OBJS := $(SME_SRC_DIR)/qos/sme_qos.o
|
||||
|
||||
SME_CMN_OBJS := $(SME_SRC_DIR)/common/sme_api.o \
|
||||
$(SME_SRC_DIR)/common/sme_ft_api.o \
|
||||
$(SME_SRC_DIR)/common/sme_power_save.o \
|
||||
$(SME_SRC_DIR)/common/sme_trace.o
|
||||
|
||||
|
@ -162,4 +162,75 @@ ucfg_cm_update_fils_config(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* ucfg_cm_set_ft_ies() - to set FT IEs
|
||||
* @pdev: pdev ctx
|
||||
* @vdev_id: vdev identifier
|
||||
* @ft_ies: pointer to FT IEs
|
||||
* @ft_ies_length: length of FT IEs
|
||||
*
|
||||
* Each time the supplicant sends down the FT IEs to the driver. This function
|
||||
* is called in SME. This function packages and sends the FT IEs to PE.
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length);
|
||||
|
||||
/**
|
||||
* ucfg_cm_check_ft_status() - Check for key wait status in FT mode
|
||||
* @pdev: pdev ctx
|
||||
* @vdev_id: vdev identifier
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* ucfg_cm_ft_key_ready_for_install() - API to check ft key ready for install
|
||||
* @vdev: pdev handle
|
||||
*
|
||||
* It is only applicable for LFR2.0 enabled
|
||||
*
|
||||
* Return: true when ft key is ready otherwise false
|
||||
*/
|
||||
bool ucfg_cm_ft_key_ready_for_install(struct wlan_objmgr_vdev *vdev);
|
||||
void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev, bool state);
|
||||
|
||||
#else /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
static inline void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev) {}
|
||||
static inline
|
||||
void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length) {}
|
||||
|
||||
static inline
|
||||
QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static inline void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev,
|
||||
bool state) {}
|
||||
#endif /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
/**
|
||||
* ucfg_cm_reset_key() -Reset key information
|
||||
* @pdev: pdev handle
|
||||
* @vdev_id: vdev identifier
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
|
||||
#else
|
||||
static inline void
|
||||
ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id) {}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
#endif /* _WLAN_CM_ROAM_UCFG_API_H_ */
|
||||
|
@ -260,3 +260,216 @@ ucfg_wlan_cm_roam_invoke(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
{
|
||||
return wlan_cm_roam_invoke(pdev, vdev_id, bssid, ch_freq, source);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev, bool state)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
return;
|
||||
|
||||
mlme_priv->connect_info.ft_info.set_ft_preauth_state = state;
|
||||
}
|
||||
|
||||
static bool ucfg_cm_get_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
return false;
|
||||
|
||||
return mlme_priv->connect_info.ft_info.set_ft_preauth_state;
|
||||
}
|
||||
|
||||
void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
if (!ft_ies) {
|
||||
mlme_err("ft ies is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
|
||||
WLAN_MLME_CM_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
status = cm_roam_acquire_lock(vdev);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto end;
|
||||
|
||||
mlme_debug("FT IEs Req is received in state %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
|
||||
/* Global Station FT State */
|
||||
switch (mlme_priv->connect_info.ft_info.ft_state) {
|
||||
case FT_START_READY:
|
||||
case FT_AUTH_REQ_READY:
|
||||
mlme_debug("ft_ies_length: %d", ft_ies_length);
|
||||
ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
|
||||
mlme_priv->connect_info.ft_info.auth_ie_len = ft_ies_length;
|
||||
qdf_mem_copy(mlme_priv->connect_info.ft_info.auth_ft_ie,
|
||||
ft_ies, ft_ies_length);
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_AUTH_REQ_READY;
|
||||
break;
|
||||
|
||||
case FT_REASSOC_REQ_WAIT:
|
||||
/*
|
||||
* We are done with pre-auth, hence now waiting for
|
||||
* reassoc req. This is the new FT Roaming in place At
|
||||
* this juncture we'r ready to start sending Reassoc req
|
||||
*/
|
||||
|
||||
ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
|
||||
|
||||
mlme_debug("New Reassoc Req: %pK in state %d",
|
||||
ft_ies, mlme_priv->connect_info.ft_info.ft_state);
|
||||
mlme_priv->connect_info.ft_info.reassoc_ie_len =
|
||||
ft_ies_length;
|
||||
qdf_mem_copy(mlme_priv->connect_info.ft_info.reassoc_ft_ie,
|
||||
ft_ies, ft_ies_length);
|
||||
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_SET_KEY_WAIT;
|
||||
mlme_debug("ft_ies_length: %d state: %d", ft_ies_length,
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
|
||||
default:
|
||||
mlme_warn("Unhandled state: %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
}
|
||||
cm_roam_release_lock(vdev);
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
|
||||
WLAN_MLME_CM_ID);
|
||||
if (!vdev)
|
||||
return status;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
status = cm_roam_acquire_lock(vdev);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto end;
|
||||
|
||||
mlme_debug("FT update key is received in state %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
|
||||
/* Global Station FT State */
|
||||
switch (mlme_priv->connect_info.ft_info.ft_state) {
|
||||
case FT_SET_KEY_WAIT:
|
||||
if (ucfg_cm_get_ft_pre_auth_state(vdev)) {
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
|
||||
mlme_debug("state changed to %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
default:
|
||||
mlme_debug("Unhandled state:%d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
break;
|
||||
}
|
||||
cm_roam_release_lock(vdev);
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
bool ucfg_cm_ft_key_ready_for_install(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
bool ret = false;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
return ret;
|
||||
|
||||
if (ucfg_cm_get_ft_pre_auth_state(vdev) &&
|
||||
mlme_priv->connect_info.ft_info.ft_state == FT_START_READY) {
|
||||
ret = true;
|
||||
ucfg_cm_set_ft_pre_auth_state(vdev, false);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
return;
|
||||
|
||||
qdf_mem_zero(&mlme_priv->connect_info.ft_info,
|
||||
sizeof(struct ft_context));
|
||||
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
static void
|
||||
ucfg_cm_reset_esecckm_info(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct rso_config *rso_cfg;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
|
||||
WLAN_MLME_CM_ID);
|
||||
if (!vdev) {
|
||||
mlme_err("vdev object is NULL for vdev %d", vdev_id);
|
||||
return;
|
||||
}
|
||||
rso_cfg = wlan_cm_get_rso_config(vdev);
|
||||
if (!rso_cfg) {
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(rso_cfg->krk, WMI_KRK_KEY_LEN);
|
||||
qdf_mem_zero(rso_cfg->btk, WMI_BTK_KEY_LEN);
|
||||
rso_cfg->is_ese_assoc = false;
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
void ucfg_cm_reset_esecckm_info(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
|
||||
{
|
||||
wlan_cm_set_psk_pmk(pdev, vdev_id, NULL, 0);
|
||||
ucfg_cm_reset_esecckm_info(pdev, vdev_id);
|
||||
}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
@ -525,16 +525,14 @@ bool hdd_is_roam_sync_in_progress(struct hdd_context *hdd_ctx, uint8_t vdev_id);
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
/**
|
||||
* wlan_hdd_ft_set_key_delay() - hdd set key delayed for FT mode
|
||||
* @mac_handle: mac handler
|
||||
* @adapter: pointer to adapter context
|
||||
* @vdev: vdev
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void
|
||||
wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter);
|
||||
void wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev);
|
||||
#else
|
||||
static inline void
|
||||
wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
|
||||
wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
@ -89,6 +89,7 @@
|
||||
#include "wlan_roam_debug.h"
|
||||
|
||||
#include "wlan_hdd_twt.h"
|
||||
#include "wlan_cm_roam_ucfg_api.h"
|
||||
|
||||
/* These are needed to recognize WPA and RSN suite types */
|
||||
#define HDD_WPA_OUI_SIZE 4
|
||||
@ -2056,24 +2057,15 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
void
|
||||
wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
|
||||
void wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
int errno = 0;
|
||||
uint32_t session_id = adapter->vdev_id;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
if (sme_ft_key_ready_for_install(mac_handle, session_id))
|
||||
if (ucfg_cm_ft_key_ready_for_install(vdev))
|
||||
errno =
|
||||
wlan_cfg80211_crypto_add_key(vdev,
|
||||
WLAN_CRYPTO_KEY_TYPE_UNICAST,
|
||||
0, false);
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||
|
||||
if (errno)
|
||||
hdd_err("ft set key failed");
|
||||
}
|
||||
|
@ -18363,9 +18363,9 @@ static int wlan_hdd_add_key_sap(struct hdd_adapter *adapter,
|
||||
return errno;
|
||||
}
|
||||
|
||||
static int wlan_hdd_add_key_sta(struct hdd_adapter *adapter,
|
||||
bool pairwise, u8 key_index,
|
||||
mac_handle_t mac_handle, bool *ft_mode)
|
||||
static int wlan_hdd_add_key_sta(struct wlan_objmgr_pdev *pdev,
|
||||
struct hdd_adapter *adapter,
|
||||
bool pairwise, u8 key_index, bool *ft_mode)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
int errno;
|
||||
@ -18375,7 +18375,7 @@ static int wlan_hdd_add_key_sta(struct hdd_adapter *adapter,
|
||||
* pre-authentication is done. Save the key in the
|
||||
* UMAC and install it after association
|
||||
*/
|
||||
status = sme_check_ft_status(mac_handle, adapter->vdev_id);
|
||||
status = ucfg_cm_check_ft_status(pdev, adapter->vdev_id);
|
||||
if (status == QDF_STATUS_SUCCESS) {
|
||||
*ft_mode = true;
|
||||
return 0;
|
||||
@ -18482,8 +18482,8 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy,
|
||||
break;
|
||||
case QDF_STA_MODE:
|
||||
case QDF_P2P_CLIENT_MODE:
|
||||
errno = wlan_hdd_add_key_sta(adapter, pairwise, key_index,
|
||||
mac_handle, &ft_mode);
|
||||
errno = wlan_hdd_add_key_sta(hdd_ctx->pdev, adapter, pairwise,
|
||||
key_index, &ft_mode);
|
||||
if (ft_mode)
|
||||
return 0;
|
||||
break;
|
||||
@ -20143,7 +20143,6 @@ __wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy,
|
||||
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||
struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
int status;
|
||||
mac_handle_t mac_handle;
|
||||
|
||||
hdd_enter();
|
||||
|
||||
@ -20171,10 +20170,8 @@ __wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy,
|
||||
}
|
||||
hdd_debug("called with Ie of length = %zu", ftie->ie_len);
|
||||
|
||||
/* Pass the received FT IEs to SME */
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
sme_set_ft_ies(mac_handle, adapter->vdev_id,
|
||||
(const u8 *)ftie->ie, ftie->ie_len);
|
||||
ucfg_cm_set_ft_ies(hdd_ctx->pdev, adapter->vdev_id,
|
||||
(const u8 *)ftie->ie, ftie->ie_len);
|
||||
hdd_exit();
|
||||
return 0;
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <net/cfg80211.h>
|
||||
#include "wlan_cm_public_struct.h"
|
||||
#include "osif_cm_util.h"
|
||||
#include "wlan_cm_roam_ucfg_api.h"
|
||||
|
||||
/**
|
||||
* wlan_hdd_cm_connect() - cfg80211 connect api
|
||||
@ -191,10 +192,13 @@ void __hdd_cm_disconnect_handler_pre_user_update(struct hdd_adapter *adapter);
|
||||
* __hdd_cm_disconnect_handler_post_user_update() - Handle disconnect indication
|
||||
* after updating to user space
|
||||
* @adapter: Pointer to adapter
|
||||
* @vdev: vdev ptr
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter);
|
||||
void
|
||||
__hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* hdd_cm_set_peer_authenticate() - set peer as authenticated
|
||||
|
@ -480,7 +480,7 @@ hdd_cm_connect_failure_post_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
|
||||
hdd_clear_roam_profile_ie(adapter);
|
||||
sme_reset_key(hdd_ctx->mac_handle, adapter->vdev_id);
|
||||
ucfg_cm_reset_key(hdd_ctx->pdev, adapter->vdev_id);
|
||||
hdd_wmm_dscp_initial_state(adapter);
|
||||
hdd_debug("Disabling queues");
|
||||
wlan_hdd_netif_queue_control(adapter,
|
||||
@ -848,7 +848,7 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
mac_handle = hdd_adapter_get_mac_handle(adapter);
|
||||
|
||||
wlan_hdd_ft_set_key_delay(mac_handle, adapter);
|
||||
wlan_hdd_ft_set_key_delay(vdev);
|
||||
hdd_cm_update_rssi_snr_by_bssid(adapter);
|
||||
hdd_cm_save_connect_status(adapter, rsp->status_code);
|
||||
|
||||
@ -1352,7 +1352,7 @@ QDF_STATUS hdd_cm_ft_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
sme_set_ft_pre_auth_state(mac_handle, wlan_vdev_get_id(vdev), true);
|
||||
ucfg_cm_set_ft_pre_auth_state(vdev, true);
|
||||
|
||||
ft_event.target_ap = ft_ie;
|
||||
ft_event.ies = (u8 *)(ft_ie + QDF_MAC_ADDR_SIZE);
|
||||
|
@ -141,32 +141,27 @@ void __hdd_cm_disconnect_handler_pre_user_update(struct hdd_adapter *adapter)
|
||||
hdd_place_marker(adapter, "DISCONNECTED", NULL);
|
||||
}
|
||||
|
||||
void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter)
|
||||
void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
mac_handle_t mac_handle;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
|
||||
/* update P2P connection status */
|
||||
ucfg_p2p_status_disconnect(adapter->vdev);
|
||||
ucfg_p2p_status_disconnect(vdev);
|
||||
|
||||
hdd_wmm_adapter_clear(adapter);
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
sme_ft_reset(mac_handle, adapter->vdev_id);
|
||||
sme_reset_key(mac_handle, adapter->vdev_id);
|
||||
ucfg_cm_ft_reset(vdev);
|
||||
ucfg_cm_reset_key(hdd_ctx->pdev, adapter->vdev_id);
|
||||
hdd_clear_roam_profile_ie(adapter);
|
||||
|
||||
if (adapter->device_mode == QDF_STA_MODE) {
|
||||
vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_ID);
|
||||
if (vdev) {
|
||||
wlan_crypto_reset_vdev_params(vdev);
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||
}
|
||||
}
|
||||
if (adapter->device_mode == QDF_STA_MODE)
|
||||
wlan_crypto_reset_vdev_params(vdev);
|
||||
|
||||
hdd_remove_beacon_filter(adapter);
|
||||
|
||||
if (sme_is_beacon_report_started(mac_handle, adapter->vdev_id)) {
|
||||
hdd_debug("Sending beacon pause indication to userspace");
|
||||
hdd_beacon_recv_pause_indication((hdd_handle_t)hdd_ctx,
|
||||
@ -185,7 +180,7 @@ void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter)
|
||||
hdd_debug("Failed to set RTS_PROFILE");
|
||||
|
||||
hdd_init_scan_reject_params(hdd_ctx);
|
||||
ucfg_pmo_flush_gtk_offload_req(adapter->vdev);
|
||||
ucfg_pmo_flush_gtk_offload_req(vdev);
|
||||
|
||||
if ((QDF_STA_MODE == adapter->device_mode) ||
|
||||
(QDF_P2P_CLIENT_MODE == adapter->device_mode)) {
|
||||
@ -352,7 +347,7 @@ hdd_cm_disconnect_complete_post_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
adapter, FTM_TIME_SYNC_STA_DISCONNECTED);
|
||||
}
|
||||
|
||||
__hdd_cm_disconnect_handler_post_user_update(adapter);
|
||||
__hdd_cm_disconnect_handler_post_user_update(adapter, vdev);
|
||||
wlan_twt_concurrency_update(hdd_ctx);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
@ -7807,8 +7807,8 @@ static int __iw_set_fties(struct net_device *dev, struct iw_request_info *info,
|
||||
hdd_debug("called with Ie of length = %d", wrqu->data.length);
|
||||
|
||||
/* Pass the received FT IEs to SME */
|
||||
sme_set_ft_ies(hdd_ctx->mac_handle, adapter->vdev_id,
|
||||
extra, wrqu->data.length);
|
||||
ucfg_cm_set_ft_ies(hdd_ctx->pdev, adapter->vdev_id,
|
||||
extra, wrqu->data.length);
|
||||
hdd_exit();
|
||||
return 0;
|
||||
}
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "sir_api.h"
|
||||
|
||||
#include "csr_api.h"
|
||||
#include "sme_ft_api.h"
|
||||
#include "csr_support.h"
|
||||
#include "sme_internal.h"
|
||||
#include "sap_api.h"
|
||||
|
@ -1,105 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016, 2018, 2019-2021 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#if !defined(__SME_FTAPI_H)
|
||||
#define __SME_FTAPI_H
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
|
||||
void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId);
|
||||
|
||||
/**
|
||||
* sme_set_ft_ies() - to set FT IEs
|
||||
* @mac_handle: opaque handle to the global MAC context
|
||||
* @session_id: sme session id
|
||||
* @ft_ies: pointer to FT IEs
|
||||
* @ft_ies_length: length of FT IEs
|
||||
*
|
||||
* Each time the supplicant sends down the FT IEs to the driver. This function
|
||||
* is called in SME. This function packages and sends the FT IEs to PE.
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t sessionId,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length);
|
||||
|
||||
/**
|
||||
* sme_check_ft_status() - Check for key wait status in FT mode
|
||||
* @mac_handle: MAC handle
|
||||
* @session_id: vdev identifier
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle, uint8_t session_id);
|
||||
|
||||
/**
|
||||
* sme_ft_key_ready_for_install() - API to check ft key ready for install
|
||||
* @mac_handle: MAC handle
|
||||
* @session_id: vdev identifier
|
||||
*
|
||||
* It is only applicable for LFR2.0 enabled
|
||||
*
|
||||
* Return: true when ft key is ready otherwise false
|
||||
*/
|
||||
bool sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id);
|
||||
void sme_set_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId,
|
||||
bool state);
|
||||
bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId);
|
||||
|
||||
#else /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
static inline void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId) {}
|
||||
static inline
|
||||
void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t sessionId,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length) {}
|
||||
|
||||
static inline QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle,
|
||||
uint8_t session_id)
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void sme_set_ft_pre_auth_state(mac_handle_t mac_handle,
|
||||
uint8_t sessionId, bool state) {}
|
||||
static inline bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle,
|
||||
uint8_t sessionId)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
/**
|
||||
* sme_reset_key() -Reset key information
|
||||
* @mac_handle: MAC handle
|
||||
* @vdev_id: vdev identifier
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id);
|
||||
#else
|
||||
static inline void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id) {}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
#endif
|
@ -1,289 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <sir_common.h>
|
||||
#include <ani_global.h>
|
||||
#include <csr_inside_api.h>
|
||||
#include "wlan_cm_roam_api.h"
|
||||
#include <sir_api.h>
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
|
||||
void sme_set_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId,
|
||||
bool state)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
mlme_priv->connect_info.ft_info.set_ft_preauth_state = state;
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
}
|
||||
|
||||
bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
bool val = false;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return val;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
val = mlme_priv->connect_info.ft_info.set_ft_preauth_state;
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t session_id,
|
||||
const uint8_t *ft_ies, uint16_t ft_ies_length)
|
||||
{
|
||||
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
if (!ft_ies) {
|
||||
sme_err("ft ies is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev, session_id,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
status = sme_acquire_global_lock(&mac_ctx->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto end;
|
||||
|
||||
sme_debug("FT IEs Req is received in state %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
|
||||
/* Global Station FT State */
|
||||
switch (mlme_priv->connect_info.ft_info.ft_state) {
|
||||
case FT_START_READY:
|
||||
case FT_AUTH_REQ_READY:
|
||||
sme_debug("ft_ies_length: %d", ft_ies_length);
|
||||
ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
|
||||
mlme_priv->connect_info.ft_info.auth_ie_len = ft_ies_length;
|
||||
qdf_mem_copy(mlme_priv->connect_info.ft_info.auth_ft_ie,
|
||||
ft_ies, ft_ies_length);
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_AUTH_REQ_READY;
|
||||
break;
|
||||
|
||||
case FT_REASSOC_REQ_WAIT:
|
||||
/*
|
||||
* We are done with pre-auth, hence now waiting for
|
||||
* reassoc req. This is the new FT Roaming in place At
|
||||
* this juncture we'r ready to start sending Reassoc req
|
||||
*/
|
||||
|
||||
ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
|
||||
|
||||
sme_debug("New Reassoc Req: %pK in state %d",
|
||||
ft_ies, mlme_priv->connect_info.ft_info.ft_state);
|
||||
mlme_priv->connect_info.ft_info.reassoc_ie_len =
|
||||
ft_ies_length;
|
||||
qdf_mem_copy(mlme_priv->connect_info.ft_info.reassoc_ft_ie,
|
||||
ft_ies, ft_ies_length);
|
||||
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_SET_KEY_WAIT;
|
||||
sme_debug("ft_ies_length: %d state: %d", ft_ies_length,
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
|
||||
default:
|
||||
sme_warn("Unhandled state: %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
}
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
}
|
||||
|
||||
QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle, uint8_t session_id)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, session_id,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return status;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
status = sme_acquire_global_lock(&mac->sme);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto end;
|
||||
|
||||
sme_debug("FT update key is received in state %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
|
||||
/* Global Station FT State */
|
||||
switch (mlme_priv->connect_info.ft_info.ft_state) {
|
||||
case FT_SET_KEY_WAIT:
|
||||
if (sme_get_ft_pre_auth_state(mac_handle, session_id)) {
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
|
||||
sme_debug("state changed to %d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
default:
|
||||
sme_debug("Unhandled state:%d",
|
||||
mlme_priv->connect_info.ft_info.ft_state);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
break;
|
||||
}
|
||||
sme_release_global_lock(&mac->sme);
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
bool sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id)
|
||||
{
|
||||
bool ret = false;
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, session_id,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return ret;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
if (sme_get_ft_pre_auth_state(mac_handle, session_id) &&
|
||||
mlme_priv->connect_info.ft_info.ft_state == FT_START_READY) {
|
||||
ret = true;
|
||||
sme_set_ft_pre_auth_state(mac_handle, session_id, false);
|
||||
}
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Reset the FT context. */
|
||||
void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
struct csr_roam_session *pSession = NULL;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
pSession = CSR_GET_SESSION(mac, sessionId);
|
||||
if (!pSession)
|
||||
return;
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv)
|
||||
goto end;
|
||||
|
||||
qdf_mem_zero(&mlme_priv->connect_info.ft_info,
|
||||
sizeof(struct ft_context));
|
||||
|
||||
mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
}
|
||||
|
||||
#endif /* WLAN_FEATURE_HOST_ROAM */
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
static void sme_reset_esecckm_info(struct mac_context *mac, uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct rso_config *rso_cfg;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, vdev_id,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!vdev) {
|
||||
sme_err("vdev object is NULL for vdev %d", vdev_id);
|
||||
return;
|
||||
}
|
||||
rso_cfg = wlan_cm_get_rso_config(vdev);
|
||||
if (!rso_cfg) {
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(rso_cfg->krk, WMI_KRK_KEY_LEN);
|
||||
qdf_mem_zero(rso_cfg->btk, WMI_BTK_KEY_LEN);
|
||||
rso_cfg->is_ese_assoc = false;
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
|
||||
}
|
||||
#else
|
||||
static void sme_reset_esecckm_info(struct mac_context *mac, uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
|
||||
if (!mac) {
|
||||
sme_err("mac is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
wlan_cm_set_psk_pmk(mac->pdev, vdev_id, NULL, 0);
|
||||
sme_reset_esecckm_info(mac, vdev_id);
|
||||
}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
Loading…
Reference in New Issue
Block a user