diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 50458cda66..b949baa8cb 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1769,6 +1769,7 @@ struct bss_load_trigger { #define AKM_SAE 3 #define AKM_OWE 4 #define AKM_SUITEB 5 +#define AKM_SAE_EXT 6 #define LFR3_STA_ROAM_DISABLE_BY_P2P BIT(0) #define LFR3_STA_ROAM_DISABLE_BY_NAN BIT(1) diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c index 5a202a0e05..ecd86f686b 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c @@ -57,10 +57,15 @@ #define CM_IS_FW_SAE_ROAM_SUPPORTED(fw_akm_bitmap) \ (((fw_akm_bitmap) & (1 << AKM_SAE)) ? true : false) + +#define CM_IS_FW_SAE_EXT_ROAM_SUPPORTED(fw_akm_bitmap) \ + (((fw_akm_bitmap) & (1 << AKM_SAE_EXT)) ? true : false) #else #define CM_IS_FW_FT_SAE_SUPPORTED(fw_akm_bitmap) (false) #define CM_IS_FW_SAE_ROAM_SUPPORTED(fw_akm_bitmap) (false) + +#define CM_IS_FW_SAE_EXT_SUPPORTED(fw_akm_bitmap) (false) #endif /** @@ -1581,6 +1586,8 @@ static uint32_t cm_get_rsn_wmi_auth_type(int32_t akm) return WMI_AUTH_RSNA_SUITE_B_8021X_SHA384; else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384)) return WMI_AUTH_FT_RSNA_SUITE_B_8021X_SHA384; + else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE_EXT_KEY)) + return WMI_AUTH_WPA3_SAE_SHA384; else return WMI_AUTH_NONE; } @@ -3480,6 +3487,12 @@ cm_akm_roam_allowed(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_NOSUPPORT; } + if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE_EXT_KEY) && + !CM_IS_FW_SAE_EXT_ROAM_SUPPORTED(fw_akm_bitmap)) { + mlme_info("Roaming not supported for SAE EXT akm"); + return QDF_STATUS_E_NOSUPPORT; + } + if ((QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B) || QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192)) && !(fw_akm_bitmap & (1 << AKM_SUITEB))) { diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 79ee04a7f1..b07d561f01 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -6178,6 +6178,11 @@ static void wma_set_mlme_caps(struct wlan_objmgr_psoc *psoc) if (tgt_cap) akm_bitmap |= (1 << AKM_SUITEB); + tgt_cap = wmi_service_enabled(wma->wmi_handle, + wmi_service_wpa3_sha384_roam_support); + if (tgt_cap) + akm_bitmap |= (1 << AKM_SAE_EXT); + status = mlme_set_tgt_wpa3_roam_cap(psoc, akm_bitmap); if (QDF_IS_STATUS_ERROR(status)) wma_err("Failed to set sae roam support");