From b2dcdd024fee2fc5228085672b9b3d92848a3edb Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Thu, 24 May 2018 11:48:12 +0530 Subject: [PATCH] qcacld-3.0: Send SME session ID in eWNI_SME_DISCONNECT_DONE_IND Currently PE session ID is filled in eWNI_SME_DISCONNECT_DONE_IND __lim_process_sme_disassoc_cnf but this command is expected to fill SME session ID instead. Send SME session ID instead of PE session ID for eWNI_SME_DISCONNECT_DONE_IND in __lim_process_sme_disassoc_cnf function. Change-Id: I50f7ec31eea265d04a94d9717415227bde09bdb5 CRs-Fixed: 2246024 --- core/mac/inc/sir_api.h | 1 + .../src/pe/lim/lim_process_sme_req_messages.c | 23 ++++++++++--------- .../src/pe/lim/lim_send_sme_rsp_messages.c | 4 ++-- core/sme/src/csr/csr_api_roam.c | 2 ++ core/sme/src/csr/csr_cmd_process.c | 4 +++- 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index caa6dc75a397..5b191c10c50a 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -1473,6 +1473,7 @@ typedef struct sSirSmeDisassocInd { typedef struct sSirSmeDisassocCnf { uint16_t messageType; /* eWNI_SME_DISASSOC_CNF */ uint16_t length; + uint8_t sme_session_id; tSirResultCodes statusCode; struct qdf_mac_addr bssid; struct qdf_mac_addr peer_macaddr; diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 0a88fc0d286c..705f10675e9f 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -2298,7 +2298,7 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu if (psessionEntry == NULL) { pe_err("session does not exist for given bssId"); status = lim_prepare_disconnect_done_ind(pMac, &msg, - CSR_SESSION_ID_INVALID, + smeDisassocCnf.sme_session_id, eSIR_SME_INVALID_SESSION, NULL); if (QDF_IS_STATUS_SUCCESS(status)) @@ -2310,7 +2310,8 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu if (!lim_is_sme_disassoc_cnf_valid(pMac, &smeDisassocCnf, psessionEntry)) { pe_err("received invalid SME_DISASSOC_CNF message"); - status = lim_prepare_disconnect_done_ind(pMac, &msg, sessionId, + status = lim_prepare_disconnect_done_ind(pMac, &msg, + psessionEntry->smeSessionId, eSIR_SME_INVALID_PARAMETERS, &smeDisassocCnf.bssid.bytes[0]); if (QDF_IS_STATUS_SUCCESS(status)) @@ -2341,10 +2342,9 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu lim_print_sme_state(pMac, LOGE, psessionEntry->limSmeState); status = lim_prepare_disconnect_done_ind(pMac, &msg, - sessionId, - eSIR_SME_INVALID_STATE, - &smeDisassocCnf.bssid. - bytes[0]); + psessionEntry->smeSessionId, + eSIR_SME_INVALID_STATE, + &smeDisassocCnf.bssid.bytes[0]); if (QDF_IS_STATUS_SUCCESS(status)) lim_send_sme_disassoc_deauth_ntf(pMac, QDF_STATUS_SUCCESS, @@ -2361,7 +2361,8 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu default: /* eLIM_UNKNOWN_ROLE */ pe_err("received unexpected SME_DISASSOC_CNF role %d", GET_LIM_SYSTEM_ROLE(psessionEntry)); - status = lim_prepare_disconnect_done_ind(pMac, &msg, sessionId, + status = lim_prepare_disconnect_done_ind(pMac, &msg, + psessionEntry->smeSessionId, eSIR_SME_INVALID_STATE, &smeDisassocCnf.bssid.bytes[0]); if (QDF_IS_STATUS_SUCCESS(status)) @@ -2382,7 +2383,7 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu MAC_ADDRESS_STR, MAC_ADDR_ARRAY(smeDisassocCnf.peer_macaddr.bytes)); status = lim_prepare_disconnect_done_ind(pMac, &msg, - sessionId, + psessionEntry->smeSessionId, eSIR_SME_INVALID_PARAMETERS, &smeDisassocCnf.bssid.bytes[0]); if (QDF_IS_STATUS_SUCCESS(status)) @@ -2400,9 +2401,9 @@ static void __lim_process_sme_disassoc_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBu MAC_ADDR_ARRAY(smeDisassocCnf.peer_macaddr.bytes), pStaDs->mlmStaContext.mlmState); status = lim_prepare_disconnect_done_ind(pMac, &msg, - CSR_SESSION_ID_INVALID, - eSIR_SME_SUCCESS, - NULL); + psessionEntry->smeSessionId, + eSIR_SME_SUCCESS, + NULL); if (QDF_IS_STATUS_SUCCESS(status)) lim_send_sme_disassoc_deauth_ntf(pMac, QDF_STATUS_SUCCESS, diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index 2cca3084fd33..e86b4cef8adb 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -1189,8 +1189,8 @@ QDF_STATUS lim_prepare_disconnect_done_ind(tpAniSirGlobal mac_ctx, sir_sme_dis_ind->length = sizeof(*sir_sme_dis_ind); sir_sme_dis_ind->session_id = session_id; if (peer_mac_addr) - qdf_mem_copy(&sir_sme_dis_ind->peer_mac, - &peer_mac_addr, ETH_ALEN); + qdf_mem_copy(sir_sme_dis_ind->peer_mac, + peer_mac_addr, ETH_ALEN); /* * Instead of sending deauth reason code as 505 which is diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 19bd043974aa..1ab0a4e416d5 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -16191,6 +16191,7 @@ QDF_STATUS csr_send_mb_disassoc_cnf_msg(tpAniSirGlobal pMac, pMsg->messageType = eWNI_SME_DISASSOC_CNF; pMsg->statusCode = eSIR_SME_SUCCESS; pMsg->length = sizeof(tSirSmeDisassocCnf); + pMsg->sme_session_id = pDisassocInd->sessionId; qdf_copy_macaddr(&pMsg->peer_macaddr, &pDisassocInd->peer_macaddr); status = QDF_STATUS_SUCCESS; @@ -16228,6 +16229,7 @@ QDF_STATUS csr_send_mb_deauth_cnf_msg(tpAniSirGlobal pMac, pMsg->messageType = eWNI_SME_DEAUTH_CNF; pMsg->statusCode = eSIR_SME_SUCCESS; pMsg->length = sizeof(tSirSmeDeauthCnf); + pMsg->sme_session_id = pDeauthInd->sessionId; qdf_copy_macaddr(&pMsg->bssid, &pDeauthInd->bssid); status = QDF_STATUS_SUCCESS; if (!QDF_IS_STATUS_SUCCESS(status)) { diff --git a/core/sme/src/csr/csr_cmd_process.c b/core/sme/src/csr/csr_cmd_process.c index 16f697ef4a7d..2d0285ba3f95 100644 --- a/core/sme/src/csr/csr_cmd_process.c +++ b/core/sme/src/csr/csr_cmd_process.c @@ -76,7 +76,9 @@ QDF_STATUS csr_msg_processor(tpAniSirGlobal mac_ctx, void *msg_buf) * due to failure or finding the condition meets both * SAP and infra/IBSS requirement. */ - if (eWNI_SME_SETCONTEXT_RSP == sme_rsp->messageType) { + if (eWNI_SME_SETCONTEXT_RSP == sme_rsp->messageType || + eWNI_SME_DISCONNECT_DONE_IND == + sme_rsp->messageType) { sme_warn("handling msg 0x%X CSR state is %d", sme_rsp->messageType, cur_state); csr_roam_check_for_link_status_change(mac_ctx,