diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 7de6a51caba6..8abf45b8447e 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1443,6 +1443,7 @@ struct bss_load_trigger { #define AKM_FT_FILS 2 #define AKM_SAE 3 #define AKM_OWE 4 +#define AKM_SUITEB 5 #define LFR3_STA_ROAM_DISABLE_BY_P2P BIT(0) #define LFR3_STA_ROAM_DISABLE_BY_NAN BIT(1) diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 7a84642df684..e10d92de7687 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1280,6 +1280,9 @@ typedef QDF_STATUS (*csr_session_close_cb)(uint8_t session_id); #define CSR_IS_FW_FT_FILS_SUPPORTED(fw_akm_bitmap) \ (((fw_akm_bitmap) & (1 << AKM_FT_FILS)) ? true : false) +#define CSR_IS_FW_SUITEB_ROAM_SUPPORTED(fw_akm_bitmap) \ + (((fw_akm_bitmap) & (1 << AKM_SUITEB)) ? true : false) + QDF_STATUS csr_set_channels(struct mac_context *mac, struct csr_config_params *pParam); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index ad2b39e2b6da..cef6c11e2027 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -224,6 +224,8 @@ enum mgmt_auth_type diag_auth_type_from_csr_type(enum csr_akm_type authtype) n = AUTH_WPA_PSK; break; case eCSR_AUTH_TYPE_RSN: + case eCSR_AUTH_TYPE_SUITEB_EAP_SHA256: + case eCSR_AUTH_TYPE_SUITEB_EAP_SHA384: #ifdef WLAN_FEATURE_11W case eCSR_AUTH_TYPE_RSN_8021X_SHA256: #endif @@ -6222,6 +6224,8 @@ static QDF_STATUS csr_roam_save_params(struct mac_context *mac_ctx, (eCSR_AUTH_TYPE_FT_RSN_PSK == auth_type) || (eCSR_AUTH_TYPE_FT_SAE == auth_type) || (eCSR_AUTH_TYPE_FT_SUITEB_EAP_SHA384 == auth_type) || + (eCSR_AUTH_TYPE_SUITEB_EAP_SHA256 == auth_type) || + (eCSR_AUTH_TYPE_SUITEB_EAP_SHA384 == auth_type) || #if defined WLAN_FEATURE_11W (eCSR_AUTH_TYPE_RSN_PSK_SHA256 == auth_type) || (eCSR_AUTH_TYPE_RSN_8021X_SHA256 == auth_type) || @@ -6405,6 +6409,8 @@ csr_roam_save_security_rsp_ie(struct mac_context *mac, (eCSR_AUTH_TYPE_FT_RSN_PSK == authType) || (eCSR_AUTH_TYPE_FT_SAE == authType) || (eCSR_AUTH_TYPE_FT_SUITEB_EAP_SHA384 == authType) + || (eCSR_AUTH_TYPE_SUITEB_EAP_SHA256 == authType) + || (eCSR_AUTH_TYPE_SUITEB_EAP_SHA384 == authType) #ifdef FEATURE_WLAN_WAPI || (eCSR_AUTH_TYPE_WAPI_WAI_PSK == authType) || (eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE == authType) @@ -18824,6 +18830,13 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id, return QDF_STATUS_SUCCESS; } + if ((roam_profile_akm == eCSR_AUTH_TYPE_SUITEB_EAP_SHA256 || + roam_profile_akm == eCSR_AUTH_TYPE_SUITEB_EAP_SHA384) && + !CSR_IS_FW_SUITEB_ROAM_SUPPORTED(fw_akm_bitmap)) { + sme_info("Roaming not supported for SUITEB connection"); + return QDF_STATUS_SUCCESS; + } + /* * If fw doesn't advertise FT SAE, FT-FILS or FT-Suite-B capability, * don't support roaming to that profile diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index d60249d68f25..569dab3cd0b5 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -5599,6 +5599,10 @@ static void wma_set_mlme_caps(struct wlan_objmgr_psoc *psoc) if (tgt_cap) akm_bitmap |= (1 << AKM_SAE); + tgt_cap = wmi_service_enabled(wma->wmi_handle, + wmi_service_suiteb_roam_support); + if (tgt_cap) + akm_bitmap |= (1 << AKM_SUITEB); status = mlme_set_tgt_wpa3_roam_cap(psoc, akm_bitmap); if (QDF_IS_STATUS_ERROR(status))