diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index 9693d122c3fb..11da0deaa8f1 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -487,10 +487,6 @@ struct pe_session { /* Fast Transition (FT) */ tftPEContext ftPEContext; bool isNonRoamReassoc; -#ifdef WLAN_FEATURE_11W - qdf_mc_timer_t pmfComebackTimer; - struct comeback_timer_info pmfComebackTimerInfo; -#endif /* WLAN_FEATURE_11W */ uint8_t is_key_installed; /* timer for resetting protection fileds at regular intervals */ qdf_mc_timer_t protection_fields_reset_timer; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 63d601094514..d7777f5fbfc9 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -601,9 +601,6 @@ static void pe_shutdown_notifier_cb(void *ctx) if (LIM_IS_AP_ROLE(session)) qdf_mc_timer_stop(&session-> protection_fields_reset_timer); -#ifdef WLAN_FEATURE_11W - qdf_mc_timer_stop(&session->pmfComebackTimer); -#endif } } } diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c index c256f6f2a456..931a3999007e 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c @@ -466,6 +466,50 @@ static void lim_stop_reassoc_retry_timer(struct mac_context *mac_ctx) lim_deactivate_and_change_timer(mac_ctx, eLIM_REASSOC_FAIL_TIMER); } +#ifdef WLAN_FEATURE_11W +static void +lim_handle_assoc_reject_status(struct mac_context *mac_ctx, + struct pe_session *session_entry, + tpSirAssocRsp assoc_rsp, + tSirMacAddr source_addr) +{ + struct sir_rssi_disallow_lst ap_info = {{0}}; + uint32_t timeout_value = + assoc_rsp->TimeoutInterval.timeoutValue; + + if (!(session_entry->limRmfEnabled && + assoc_rsp->statusCode == eSIR_MAC_TRY_AGAIN_LATER && + (assoc_rsp->TimeoutInterval.present && + (assoc_rsp->TimeoutInterval.timeoutType == + SIR_MAC_TI_TYPE_ASSOC_COMEBACK)))) + return; + + /* + * Add to rssi reject list, which takes care of retry + * delay too. Fill the RSSI as 0, so the only param + * which will allow the bssid to connect is retry delay. + */ + ap_info.retry_delay = timeout_value; + qdf_mem_copy(ap_info.bssid.bytes, source_addr, + QDF_MAC_ADDR_SIZE); + ap_info.expected_rssi = LIM_MIN_RSSI; + lim_assoc_rej_add_to_rssi_based_reject_list(mac_ctx, + &ap_info); + + pe_debug("ASSOC res with eSIR_MAC_TRY_AGAIN_LATER recvd. Add to time reject list(rssi reject in mac_ctx %d", + timeout_value); + +} +#else +static void +lim_handle_assoc_reject_status(struct mac_context *mac_ctx, + struct pe_session *session_entry, + tpSirAssocRsp assoc_rsp, + tSirMacAddr source_addr) +{ +} +#endif + /** * lim_process_assoc_rsp_frame() - Processes assoc response * @mac_ctx: Pointer to Global MAC structure @@ -697,19 +741,23 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, else lim_stop_reassoc_retry_timer(mac_ctx); + lim_handle_assoc_reject_status(mac_ctx, session_entry, assoc_rsp, + hdr->sa); + if (eSIR_MAC_XS_FRAME_LOSS_POOR_CHANNEL_RSSI_STATUS == assoc_rsp->statusCode && - assoc_rsp->rssi_assoc_rej.present) - lim_assoc_rej_add_to_rssi_based_reject_list(mac_ctx, - &assoc_rsp->rssi_assoc_rej, hdr->sa, - WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info)); + assoc_rsp->rssi_assoc_rej.present) { + struct sir_rssi_disallow_lst ap_info = {{0}}; - if (assoc_rsp->statusCode != eSIR_MAC_SUCCESS_STATUS -#ifdef WLAN_FEATURE_11W - && (!session_entry->limRmfEnabled || - assoc_rsp->statusCode != eSIR_MAC_TRY_AGAIN_LATER) -#endif - ) { + ap_info.retry_delay = assoc_rsp->rssi_assoc_rej.retry_delay * + QDF_MC_TIMER_TO_MS_UNIT; + qdf_mem_copy(ap_info.bssid.bytes, hdr->sa, QDF_MAC_ADDR_SIZE); + ap_info.expected_rssi = assoc_rsp->rssi_assoc_rej.delta_rssi + + WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info); + lim_assoc_rej_add_to_rssi_based_reject_list(mac_ctx, + &ap_info); + } + if (assoc_rsp->statusCode != eSIR_MAC_SUCCESS_STATUS) { /* *Re/Association response was received * either with failure code. @@ -765,63 +813,6 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, * NOTE: for BTAMP case, it is being handled in * lim_process_mlm_assoc_req */ -#ifdef WLAN_FEATURE_11W - if (session_entry->limRmfEnabled && - assoc_rsp->statusCode == eSIR_MAC_TRY_AGAIN_LATER) { - if (assoc_rsp->TimeoutInterval.present && - (assoc_rsp->TimeoutInterval.timeoutType == - SIR_MAC_TI_TYPE_ASSOC_COMEBACK)) { - uint16_t timeout_value = - assoc_rsp->TimeoutInterval.timeoutValue; - if (timeout_value < 10) { - /* - * if this value is less than 10 then our timer - * will fail to start and due to this we will - * never re-attempt. Better modify the timer - * value here. - */ - timeout_value = 10; - } - pe_debug("ASSOC res with eSIR_MAC_TRY_AGAIN_LATER recvd.Starting timer to wait timeout: %d", - timeout_value); - if (QDF_STATUS_SUCCESS != - qdf_mc_timer_start( - &session_entry->pmfComebackTimer, - timeout_value)) { - pe_err("Failed to start comeback timer"); - - assoc_cnf.resultCode = eSIR_SME_ASSOC_REFUSED; - assoc_cnf.protStatusCode = - eSIR_MAC_UNSPEC_FAILURE_STATUS; - - /* - * Delete Pre-auth context for the - * associated BSS - */ - if (lim_search_pre_auth_list(mac_ctx, hdr->sa)) - lim_delete_pre_auth_node(mac_ctx, - hdr->sa); - - goto assocReject; - } - } else { - pe_warn("ASSOC resp with try again event recvd, but try again time interval IE is wrong"); - - assoc_cnf.resultCode = eSIR_SME_ASSOC_REFUSED; - assoc_cnf.protStatusCode = - eSIR_MAC_UNSPEC_FAILURE_STATUS; - - /* Delete Pre-auth context for the associated BSS */ - if (lim_search_pre_auth_list(mac_ctx, hdr->sa)) - lim_delete_pre_auth_node(mac_ctx, hdr->sa); - - goto assocReject; - } - qdf_mem_free(beacon); - qdf_mem_free(assoc_rsp); - return; - } -#endif if (!lim_is_roam_synch_in_progress(session_entry)) { if (lim_set_link_state (mac_ctx, eSIR_LINK_POSTASSOC_STATE, diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 171aa8414cba..6d626dc4407b 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -1166,19 +1166,6 @@ static void lim_process_mlm_assoc_req(struct mac_context *mac_ctx, uint32_t *msg /* map the session entry pointer to the AssocFailureTimer */ mac_ctx->lim.limTimers.gLimAssocFailureTimer.sessionId = mlm_assoc_req->sessionId; -#ifdef WLAN_FEATURE_11W - /* - * Store current MLM state in case ASSOC response returns with - * TRY_AGAIN_LATER return code. - */ - if (session_entry->limRmfEnabled) { - session_entry->pmfComebackTimerInfo.lim_prev_mlm_state = - session_entry->limPrevMlmState; - session_entry->pmfComebackTimerInfo.lim_mlm_state = - session_entry->limMlmState; - } -#endif /* WLAN_FEATURE_11W */ - session_entry->limPrevMlmState = session_entry->limMlmState; session_entry->limMlmState = eLIM_MLM_WT_ASSOC_RSP_STATE; MTRACE(mac_trace(mac_ctx, TRACE_CODE_MLM_STATE, diff --git a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c index f4d1136d58de..e01a2f37b78e 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c @@ -412,30 +412,6 @@ static void lim_send_mlm_assoc_req(struct mac_context *mac_ctx, (uint32_t *) assoc_req); } -#ifdef WLAN_FEATURE_11W -/** - * lim_pmf_comeback_timer_callback() -PMF callback handler - * @context: Timer context - * - * This function is called to processes the PMF comeback - * callback - * - * Return: None - */ -void lim_pmf_comeback_timer_callback(void *context) -{ - struct comeback_timer_info *info = context; - struct mac_context *mac_ctx = info->mac; - struct pe_session *pe_session = &mac_ctx->lim.gpSession[info->session_id]; - - pe_err("comeback later timer expired. sending MLM ASSOC req"); - /* set MLM state such that ASSOC REQ packet will be sent out */ - pe_session->limPrevMlmState = info->lim_prev_mlm_state; - pe_session->limMlmState = info->lim_mlm_state; - lim_send_mlm_assoc_req(mac_ctx, pe_session); -} -#endif /* WLAN_FEATURE_11W */ - /** * lim_process_mlm_auth_cnf()-Process Auth confirmation * @mac_ctx: Pointer to Global MAC structure diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index 35d594efec20..0f47489786de 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -269,36 +269,6 @@ restart_timer: } } -#ifdef WLAN_FEATURE_11W -/** - * pe_init_pmf_comeback_timer: init PMF comeback timer - * @mac_ctx: pointer to global adapter context - * @session: pe session - * @session_id: session ID - * - * Return: void - */ -static void pe_init_pmf_comeback_timer(struct mac_context *mac_ctx, -struct pe_session *session, uint8_t session_id) -{ - QDF_STATUS status; - - session->pmfComebackTimerInfo.mac = mac_ctx; - session->pmfComebackTimerInfo.session_id = session_id; - status = qdf_mc_timer_init(&session->pmfComebackTimer, - QDF_TIMER_TYPE_SW, lim_pmf_comeback_timer_callback, - (void *)&session->pmfComebackTimerInfo); - if (!QDF_IS_STATUS_SUCCESS(status)) - pe_err("cannot init pmf comeback timer"); -} -#else -static inline void -pe_init_pmf_comeback_timer(struct mac_context *mac_ctx, - struct pe_session *session, uint8_t session_id) -{ -} -#endif - #ifdef WLAN_FEATURE_FILS_SK /** * pe_delete_fils_info: API to delete fils session info @@ -701,7 +671,6 @@ struct pe_session *pe_create_session(struct mac_context *mac, pe_err("cannot create ap_ecsa_timer"); } pe_init_fils_info(session_ptr); - pe_init_pmf_comeback_timer(mac, session_ptr, *sessionId); session_ptr->ht_client_cnt = 0; /* following is invalid value since seq number is 12 bit */ session_ptr->prev_auth_seq_num = 0xFFFF; @@ -1032,12 +1001,6 @@ void pe_delete_session(struct mac_context *mac_ctx, struct pe_session *session) session->add_ie_params.probeRespBCNData_buff = NULL; session->add_ie_params.probeRespBCNDataLen = 0; } -#ifdef WLAN_FEATURE_11W - if (QDF_TIMER_STATE_RUNNING == - qdf_mc_timer_get_current_state(&session->pmfComebackTimer)) - qdf_mc_timer_stop(&session->pmfComebackTimer); - qdf_mc_timer_destroy(&session->pmfComebackTimer); -#endif pe_delete_fils_info(session); session->valid = false; diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 9bf804b64ba2..ac28a3019114 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -7461,9 +7461,9 @@ lim_rem_blacklist_entry_with_lowest_delta(qdf_list_t *list) return QDF_STATUS_E_INVAL; } -void lim_assoc_rej_add_to_rssi_based_reject_list(struct mac_context *mac_ctx, - tDot11fTLVrssi_assoc_rej *rssi_assoc_rej, - tSirMacAddr bssid, int8_t rssi) +void lim_assoc_rej_add_to_rssi_based_reject_list( + struct mac_context *mac_ctx, + struct sir_rssi_disallow_lst *ap_info) { struct sir_rssi_disallow_lst *entry; QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -7472,16 +7472,12 @@ void lim_assoc_rej_add_to_rssi_based_reject_list(struct mac_context *mac_ctx, if (!entry) return; - pe_debug("%pM: assoc resp rssi %d, delta rssi %d retry delay %d sec and list size %d", - bssid, rssi, rssi_assoc_rej->delta_rssi, - rssi_assoc_rej->retry_delay, + pe_debug("%pM: assoc resp, expected rssi %d retry delay %d sec and list size %d", + ap_info->bssid.bytes, ap_info->expected_rssi, + ap_info->retry_delay, qdf_list_size(&mac_ctx->roam.rssi_disallow_bssid)); - qdf_mem_copy(entry->bssid.bytes, - bssid, QDF_MAC_ADDR_SIZE); - entry->retry_delay = rssi_assoc_rej->retry_delay * - QDF_MC_TIMER_TO_MS_UNIT; - entry->expected_rssi = rssi + rssi_assoc_rej->delta_rssi; + *entry = *ap_info; entry->time_during_rejection = qdf_do_div(qdf_get_monotonic_boottime(), QDF_MC_TIMER_TO_MS_UNIT); diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index 22aad1250fcc..533d39e4dd42 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -744,7 +744,6 @@ bool lim_check_disassoc_deauth_ack_pending(struct mac_context *mac, #ifdef WLAN_FEATURE_11W void lim_pmf_sa_query_timer_handler(void *pMacGlobal, uint32_t param); -void lim_pmf_comeback_timer_callback(void *context); void lim_set_protected_bit(struct mac_context *mac, struct pe_session *pe_session, tSirMacAddr peer, tpSirMacMgmtHdr pMacHdr); @@ -1305,9 +1304,7 @@ QDF_STATUS lim_populate_he_mcs_set(struct mac_context *mac_ctx, * lim_assoc_rej_add_to_rssi_based_reject_list() - Add BSSID to the rssi based * rejection list * @mac_ctx: mac ctx - * @rssi_assoc_rej: rssi assoc reject attribute - * @bssid : BSSID of the AP - * @rssi : RSSI of the assoc resp + * @ap_info: ap's info which is to be rejected. * * Add BSSID to the rssi based rejection list. Also if number * of entries is greater than MAX_RSSI_AVOID_BSSID_LIST @@ -1315,9 +1312,9 @@ QDF_STATUS lim_populate_he_mcs_set(struct mac_context *mac_ctx, * * Return: void */ -void lim_assoc_rej_add_to_rssi_based_reject_list(struct mac_context *mac_ctx, - tDot11fTLVrssi_assoc_rej *rssi_assoc_rej, - tSirMacAddr bssid, int8_t rssi); +void lim_assoc_rej_add_to_rssi_based_reject_list( + struct mac_context *mac_ctx, + struct sir_rssi_disallow_lst *ap_info); /** * lim_decrement_pending_mgmt_count: Decrement mgmt frame count