diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index ff151d84f032..22a9b405b5b3 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2041,6 +2041,28 @@ enum hdd_dot11_mode { #define CFG_ROAM_DENSE_RSSI_THRE_OFFSET_MAX (20) #define CFG_ROAM_DENSE_RSSI_THRE_OFFSET_DEFAULT (10) +/* + * + * enable_ftopen - enable/disable FT open feature + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This INI is used to enable/disable FT open feature +* +* Related: None +* +* Supported Feature: Roaming +* +* Usage: External +* +* +*/ +#define CFG_ROAM_FT_OPEN_ENABLE_NAME "enable_ftopen" +#define CFG_ROAM_FT_OPEN_ENABLE_MIN (0) +#define CFG_ROAM_FT_OPEN_ENABLE_MAX (1) +#define CFG_ROAM_FT_OPEN_ENABLE_DEFAULT (1) + /* * * groam_dense_min_aps - Sets minimum number of AP for dense roam @@ -14765,6 +14787,7 @@ struct hdd_config { uint8_t enable_tx_sch_delay; HDD_GREEN_AP_CFG_FIELDS bool is_unit_test_framework_enabled; + bool enable_ftopen; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index f89d6cc90684..014525ac31b1 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -5328,6 +5328,13 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_UINT_TEST_FRAMEWORK_DEFAULT, CFG_ENABLE_UNIT_TEST_FRAMEWORK_MIN, CFG_ENABLE_UNIT_TEST_FRAMEWORK_MAX), + + REG_VARIABLE(CFG_ROAM_FT_OPEN_ENABLE_NAME, WLAN_PARAM_Integer, + struct hdd_config, enable_ftopen, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ROAM_FT_OPEN_ENABLE_DEFAULT, + CFG_ROAM_FT_OPEN_ENABLE_MIN, + CFG_ROAM_FT_OPEN_ENABLE_MAX), }; @@ -7204,6 +7211,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_debug("Name = [%s] value = [0x%x]", CFG_ENABLE_UNIT_TEST_FRAMEWORK_NAME, hdd_ctx->config->is_unit_test_framework_enabled); + hdd_debug("Name = [%s] Value = [%u]", + CFG_ROAM_FT_OPEN_ENABLE_NAME, + hdd_ctx->config->enable_ftopen); } @@ -8799,6 +8809,8 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->config->scan_adaptive_dwell_mode_nc; smeConfig->csrConfig.roamscan_adaptive_dwell_mode = hdd_ctx->config->roamscan_adaptive_dwell_mode; + smeConfig->csrConfig.enable_ftopen = + hdd_ctx->config->enable_ftopen; hdd_update_per_config_to_sme(hdd_ctx, smeConfig); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index ae6d226996ee..79f0c2dab858 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -2894,6 +2894,7 @@ typedef struct sSirRoamOffloadScanReq { uint8_t ValidChannelCount; uint8_t ValidChannelList[SIR_ROAM_MAX_CHANNELS]; bool IsESEAssoc; + bool is_11r_assoc; uint8_t nProbes; uint16_t HomeAwayTime; tSirRoamNetworkType ConnectedNetwork; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index ec8dc9672612..6f0cd088dc88 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1306,6 +1306,7 @@ typedef struct tagCsrConfigParam { uint32_t offload_11k_enable_bitmask; bool wep_tkip_in_he; struct csr_neighbor_report_offload_params neighbor_report_offload; + bool enable_ftopen; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 011cefaa5807..4953ae16e8c0 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -610,6 +610,7 @@ struct csr_config { uint32_t offload_11k_enable_bitmask; bool wep_tkip_in_he; struct csr_neighbor_report_offload_params neighbor_report_offload; + bool enable_ftopen; }; struct csr_channel_powerinfo { diff --git a/core/sme/inc/csr_support.h b/core/sme/inc/csr_support.h index e1820b0a0625..bb1f0d84c5a1 100644 --- a/core/sme/inc/csr_support.h +++ b/core/sme/inc/csr_support.h @@ -357,8 +357,9 @@ QDF_STATUS csr_reassoc(tpAniSirGlobal pMac, uint32_t sessionId, QDF_STATUS csr_validate_mcc_beacon_interval(tpAniSirGlobal pMac, uint8_t channelId, uint16_t *beaconInterval, uint32_t cursessionId, enum QDF_OPMODE currBssPersona); -bool csr_is_profile11r(struct csr_roam_profile *pProfile); -bool csr_is_auth_type11r(eCsrAuthType AuthType, uint8_t mdiePresent); +bool csr_is_profile11r(tpAniSirGlobal mac, struct csr_roam_profile *pProfile); +bool csr_is_auth_type11r(tpAniSirGlobal mac, eCsrAuthType AuthType, + uint8_t mdiePresent); #ifdef FEATURE_WLAN_ESE bool csr_is_profile_ese(struct csr_roam_profile *pProfile); #endif diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 1ed3754393b4..c9b71a5a1427 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2988,6 +2988,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, roam_bad_rssi_thresh_offset_2g = pParam->roam_bad_rssi_thresh_offset_2g; + pMac->roam.configParam.enable_ftopen = + pParam->enable_ftopen; pMac->roam.configParam.scan_adaptive_dwell_mode = pParam->scan_adaptive_dwell_mode; pMac->roam.configParam.scan_adaptive_dwell_mode_nc = @@ -3308,6 +3310,7 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->roam_bad_rssi_thresh_offset_2g = cfg_params->roam_params.roam_bad_rssi_thresh_offset_2g; + pParam->enable_ftopen = cfg_params->enable_ftopen; pParam->scan_adaptive_dwell_mode = cfg_params->scan_adaptive_dwell_mode; pParam->scan_adaptive_dwell_mode_nc = @@ -15479,7 +15482,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, ese_config = pMac->roam.configParam.isEseIniFeatureEnabled; #endif pProfile->MDID.mdiePresent = pBssDescription->mdiePresent; - if (csr_is_profile11r(pProfile) + if (csr_is_profile11r(pMac, pProfile) #ifdef FEATURE_WLAN_ESE && !((pProfile->negotiatedAuthType == @@ -18271,9 +18274,10 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx, eCSR_AUTH_TYPE_OPEN_SYSTEM) || (csr_is_auth_type_ese(req_buf-> ConnectedNetwork.authentication))); + req_buf->is_11r_assoc = roam_info->is11rAssoc; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - "IsEseAssoc: %d middle of roaming: %d ese_neighbor_list_recvd: %d cur no of chan: %d", - req_buf->IsESEAssoc, + "IsEseAssoc: %d is_11r_assoc: %d middle of roaming: %d ese_neighbor_list_recvd: %d cur no of chan: %d", + req_buf->IsESEAssoc, req_buf->is_11r_assoc, req_buf->middle_of_roaming, ese_neighbor_list_recvd, curr_ch_lst_info->numOfChannels); diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 408c749869a5..e988b6319dad 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -1000,7 +1000,7 @@ static void csr_neighbor_roam_info_ctx_init( /* Based on the auth scheme tell if we are 11r */ if (csr_is_auth_type11r - (session->connectedProfile.AuthType, + (pMac, session->connectedProfile.AuthType, session->connectedProfile.MDID.mdiePresent)) { if (pMac->roam.configParam.isFastTransitionEnabled) init_ft_flag = true; diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index 07a45f4064fe..639d773c0124 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -2701,16 +2701,19 @@ QDF_STATUS csr_validate_mcc_beacon_interval(tpAniSirGlobal mac_ctx, /** * csr_is_auth_type11r() - Check if Authentication type is 11R + * @mac: pointer to mac context * @auth_type: The authentication type that is used to make the connection * @mdie_present: Is MDIE IE present * * Return: true if is 11R auth type, false otherwise */ -bool csr_is_auth_type11r(eCsrAuthType auth_type, uint8_t mdie_present) +bool csr_is_auth_type11r(tpAniSirGlobal mac, eCsrAuthType auth_type, + uint8_t mdie_present) { switch (auth_type) { case eCSR_AUTH_TYPE_OPEN_SYSTEM: - if (mdie_present) + if (mdie_present && + mac->roam.configParam.enable_ftopen) return true; break; case eCSR_AUTH_TYPE_FT_RSN_PSK: @@ -2723,9 +2726,10 @@ bool csr_is_auth_type11r(eCsrAuthType auth_type, uint8_t mdie_present) } /* Function to return true if the profile is 11r */ -bool csr_is_profile11r(struct csr_roam_profile *pProfile) +bool csr_is_profile11r(tpAniSirGlobal mac, + struct csr_roam_profile *pProfile) { - return csr_is_auth_type11r(pProfile->negotiatedAuthType, + return csr_is_auth_type11r(mac, pProfile->negotiatedAuthType, pProfile->MDID.mdiePresent); } diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index d9b74e3538a9..19b0a127df71 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -360,6 +360,7 @@ QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, params->fw_pmksa_cache = roam_req->pmkid_modes.fw_pmksa_cache; #endif params->is_ese_assoc = roam_req->IsESEAssoc; + params->is_11r_assoc = roam_req->is_11r_assoc; params->mdid.mdie_present = roam_req->MDID.mdiePresent; params->mdid.mobility_domain = roam_req->MDID.mobilityDomain; params->assoc_ie_length = roam_req->assoc_ie.length;