diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index b86250172e05..d0745180e0b2 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -357,11 +357,26 @@ QDF_STATUS hdd_roam_deregister_sta(struct hdd_adapter *adapter, uint8_t sta_id); #ifdef WLAN_FEATURE_ROAM_OFFLOAD void hdd_wma_send_fastreassoc_cmd(struct hdd_adapter *adapter, const tSirMacAddr bssid, int channel); +/** + * hdd_save_gtk_params() - Save GTK offload params + * @adapter: HDD adapter + * @csr_roam_info: CSR roam info + * @is_reassoc: boolean to indicate roaming + * + * Return: None + */ +void hdd_save_gtk_params(struct hdd_adapter *adapter, + tCsrRoamInfo *csr_roam_info, bool is_reassoc); #else static inline void hdd_wma_send_fastreassoc_cmd(struct hdd_adapter *adapter, const tSirMacAddr bssid, int channel) { } +static inline void hdd_save_gtk_params(struct hdd_adapter *adapter, + tCsrRoamInfo *csr_roam_info, + bool is_reassoc) +{ +} #endif #endif diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 635d4ffdf474..a72f7bc43c52 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -2052,6 +2052,32 @@ static inline void hdd_send_roamed_ind(struct net_device *dev, } #endif +#if defined(WLAN_FEATURE_ROAM_OFFLOAD) +void hdd_save_gtk_params(struct hdd_adapter *adapter, + tCsrRoamInfo *csr_roam_info, bool is_reassoc) +{ + uint8_t *kek; + uint32_t kek_len; + + if (is_reassoc) { + kek = csr_roam_info->kek; + kek_len = csr_roam_info->kek_len; + } else { + /* + * This should come for FILS case only. + * Caller should make sure fils_join_rsp is + * not NULL, if there is need to use else where. + */ + kek = csr_roam_info->fils_join_rsp->kek; + kek_len = csr_roam_info->fils_join_rsp->kek_len; + } + + wlan_hdd_save_gtk_offload_params(adapter, NULL, kek, kek_len, + csr_roam_info->replay_ctr, true); + + hdd_debug("Kek len %d", kek_len); +} +#endif /** * hdd_send_re_assoc_event() - send reassoc event * @dev: pointer to net device @@ -2187,10 +2213,7 @@ static void hdd_send_re_assoc_event(struct net_device *dev, (u8 *)pCsrRoamInfo->pbFrames + pCsrRoamInfo->nBeaconLength, pCsrRoamInfo->nAssocReqLength); - wlan_hdd_save_gtk_offload_params(adapter, NULL, - pCsrRoamInfo->kek, - pCsrRoamInfo->kek_len, - pCsrRoamInfo->replay_ctr, true); + hdd_save_gtk_params(adapter, pCsrRoamInfo, true); hdd_debug("ReAssoc Req IE dump"); QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, @@ -2200,7 +2223,6 @@ static void hdd_send_re_assoc_event(struct net_device *dev, assoc_req_ies, pCsrRoamInfo->nAssocReqLength, rspRsnIe, rspRsnLength, pCsrRoamInfo); - hdd_debug("Kek len %d", pCsrRoamInfo->kek_len); hdd_update_hlp_info(dev, pCsrRoamInfo); diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 96435f479965..40139745b3d2 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -5400,7 +5400,7 @@ void wlan_hdd_save_gtk_offload_params(struct hdd_adapter *adapter, } #endif -#ifdef WLAN_FEATURE_FILS_SK +#if defined(WLAN_FEATURE_FILS_SK) && defined(WLAN_FEATURE_ROAM_OFFLOAD) /** * wlan_hdd_add_fils_params_roam_auth_event() - Adds FILS params in roam auth * @skb: SK buffer @@ -19765,6 +19765,7 @@ static void hdd_update_chan_info(struct hdd_context *hdd_ctx, #undef MAX_COUNT #if defined(WLAN_FEATURE_FILS_SK) &&\ + defined(CFG80211_FILS_SK_OFFLOAD_SUPPORT) &&\ (defined(CFG80211_UPDATE_CONNECT_PARAMS) ||\ (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))) @@ -20217,6 +20218,7 @@ static struct cfg80211_ops wlan_hdd_cfg80211_ops = { .abort_scan = wlan_hdd_cfg80211_abort_scan, #endif #if defined(WLAN_FEATURE_FILS_SK) &&\ + defined(CFG80211_FILS_SK_OFFLOAD_SUPPORT) &&\ (defined(CFG80211_UPDATE_CONNECT_PARAMS) ||\ (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))) .update_connect_params = wlan_hdd_cfg80211_update_connect_params, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index b5ff9ff8c954..7508ec4e8912 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -5007,10 +5007,7 @@ static void hdd_connect_done(struct net_device *dev, const u8 *bssid, roam_fils_params->fils_pmk_len, roam_fils_params->fils_pmkid, roam_info->fils_seq_num); - wlan_hdd_save_gtk_offload_params(adapter, NULL, - roam_fils_params->kek, - roam_fils_params->kek_len, - roam_info->replay_ctr, true); + hdd_save_gtk_params(adapter, roam_info, false); } hdd_debug("FILS indicate connect status %d seq no %d", fils_params.status, diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index a67e53aede02..96e845df9e5c 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1364,6 +1364,8 @@ typedef struct tagCsrUpdateConfigParam { #define csr_roamIsRoamOffloadEnabled(pMac) \ (pMac->roam.configParam.isRoamOffloadEnabled) #define DEFAULT_REASSOC_FAILURE_TIMEOUT 1000 +#else +#define csr_roamIsRoamOffloadEnabled(pMac) false #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index ad2472851b4e..0a5be5fceaba 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -7162,7 +7162,7 @@ QDF_STATUS sme_update_fils_config(tHalHandle hal, uint8_t session_id, } csr_update_fils_config(mac, session_id, src_profile); - if (mac->roam.configParam.isRoamOffloadEnabled) { + if (csr_roamIsRoamOffloadEnabled(mac)) { sme_debug("Updating fils config to fw"); csr_roam_offload_scan(mac, session_id, ROAM_SCAN_OFFLOAD_UPDATE_CFG, diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index dd87fe2851eb..9301e15065c9 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -20640,7 +20640,7 @@ void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo *roam_info, } #endif -#if defined(WLAN_FEATURE_FILS_SK) +#if defined(WLAN_FEATURE_FILS_SK) && defined(WLAN_FEATURE_ROAM_OFFLOAD) static void csr_copy_fils_join_rsp_roam_info(tCsrRoamInfo *roam_info, roam_offload_synch_ind *roam_synch_data) {