Browse Source

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
Vignesh Viswanathan 6 years ago
parent
commit
b2dcdd024f

+ 1 - 0
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;

+ 12 - 11
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,

+ 2 - 2
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

+ 2 - 0
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)) {

+ 3 - 1
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,