diff options
author | Ashish Kumar Dhanotiya <adhanoti@codeaurora.org> | 2017-10-13 12:41:19 +0530 |
---|---|---|
committer | snandini <snandini@codeaurora.org> | 2017-10-24 11:15:05 -0700 |
commit | fddd32c0f9f13d7790bbe6ccb12fbacea8cf8f60 (patch) | |
tree | f537dc5ecd8bdf9cab9db2d34008ef267a5d94b1 /core/sme/src/csr/csr_api_roam.c | |
parent | 87dfcde2adc14032b80bc312758ab1612917d0bf (diff) | |
download | qcacld-fddd32c0f9f13d7790bbe6ccb12fbacea8cf8f60.tar.gz |
qcacld-3.0: Cache deleted station's information in case of SAP
During disconnection process, cache disconnecting STA information
so that the same information is updated to upper-layer on receiving
GET_STATION vendor command, after disconnection.
Change-Id: I2e5a0be42d81b86e6f4490de1bdf9d7e0797506d
CRs-Fixed: 2126182
Diffstat (limited to 'core/sme/src/csr/csr_api_roam.c')
-rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index fc6a9ab47d..708be02d11 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -3794,6 +3794,11 @@ QDF_STATUS csr_roam_call_callback(tpAniSirGlobal pMac, uint32_t sessionId, pSession->connectedProfile.operationChannel = pRoamInfo->channelChangeRespEvent->newChannelNumber; + if (eCSR_ROAM_RESULT_LOSTLINK == u2 || + eCSR_ROAM_LOSTLINK_DETECTED == u1) { + sme_debug("eCSR_ROAM_RESULT_LOSTLINK "); + } + if (NULL != pSession->callback) { if (pRoamInfo) { pRoamInfo->sessionId = (uint8_t) sessionId; @@ -10299,6 +10304,10 @@ void csr_roam_joined_state_msg_processor(tpAniSirGlobal pMac, void *pMsgBuf) pRoamInfo->max_mcs_idx = pUpperLayerAssocCnf->max_mcs_idx; pRoamInfo->rx_mcs_map = pUpperLayerAssocCnf->rx_mcs_map; pRoamInfo->tx_mcs_map = pUpperLayerAssocCnf->tx_mcs_map; + if (pUpperLayerAssocCnf->HTCaps.present) + pRoamInfo->ht_caps = pUpperLayerAssocCnf->HTCaps; + if (pUpperLayerAssocCnf->VHTCaps.present) + pRoamInfo->vht_caps = pUpperLayerAssocCnf->VHTCaps; if (CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile)) { pMac->roam.roamSession[sessionId].connectState = eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED; @@ -11172,17 +11181,26 @@ csr_roam_chk_lnk_assoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr) roam_info_ptr->addIELen = (uint8_t) pAssocInd->addIE.length; roam_info_ptr->paddIE = pAssocInd->addIE.addIEdata; qdf_mem_copy(roam_info_ptr->peerMac.bytes, - pAssocInd->peerMacAddr, - sizeof(tSirMacAddr)); + pAssocInd->peerMacAddr, sizeof(tSirMacAddr)); qdf_mem_copy(roam_info_ptr->bssid.bytes, - pAssocInd->bssId, - sizeof(struct qdf_mac_addr)); + pAssocInd->bssId, + sizeof(struct qdf_mac_addr)); roam_info_ptr->wmmEnabledSta = pAssocInd->wmmEnabledSta; roam_info_ptr->timingMeasCap = pAssocInd->timingMeasCap; roam_info_ptr->ecsa_capable = pAssocInd->ecsa_capable; qdf_mem_copy(&roam_info_ptr->chan_info, &pAssocInd->chan_info, sizeof(tSirSmeChanInfo)); + + if (pAssocInd->HTCaps.present) + qdf_mem_copy(&roam_info_ptr->ht_caps, + &pAssocInd->HTCaps, + sizeof(tDot11fIEHTCaps)); + if (pAssocInd->VHTCaps.present) + qdf_mem_copy(&roam_info_ptr->vht_caps, + &pAssocInd->VHTCaps, + sizeof(tDot11fIEVHTCaps)); + if (CSR_IS_INFRA_AP(roam_info_ptr->u.pConnectedProfile)) { if (session->pCurRoamProfile && CSR_IS_ENC_TYPE_STATIC( @@ -12640,6 +12658,9 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId, sme_err("session: %d not found", sessionId); return QDF_STATUS_E_FAILURE; } + + qdf_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); + pSession->fCancelRoaming = false; if (eWNI_SME_DISASSOC_IND == type) { result = eCSR_ROAM_RESULT_DISASSOC_IND; @@ -12647,20 +12668,35 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId, pSession->roamingStatusCode = pDisassocIndMsg->statusCode; pSession->joinFailStatusCode.reasonCode = pDisassocIndMsg->reasonCode; + + qdf_copy_macaddr(&roamInfo.peerMac, + &pDisassocIndMsg->peer_macaddr); + roamInfo.staId = (uint8_t)pDisassocIndMsg->staId; } else if (eWNI_SME_DEAUTH_IND == type) { result = eCSR_ROAM_RESULT_DEAUTH_IND; pDeauthIndMsg = (tSirSmeDeauthInd *) pSirMsg; pSession->roamingStatusCode = pDeauthIndMsg->statusCode; pSession->joinFailStatusCode.reasonCode = pDeauthIndMsg->reasonCode; + + qdf_copy_macaddr(&roamInfo.peerMac, + &pDeauthIndMsg->peer_macaddr); + roamInfo.staId = (uint8_t)pDeauthIndMsg->staId; + roamInfo.rxRssi = pDeauthIndMsg->rssi; } else { sme_warn("gets an unknown type (%d)", type); result = eCSR_ROAM_RESULT_NONE; pSession->joinFailStatusCode.reasonCode = 1; } + roamInfo.statusCode = (tSirResultCodes) pSession->roamingStatusCode; + roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; + + sme_debug("RC: %d", roamInfo.reasonCode); - /* call profile lost link routine here */ - if (!CSR_IS_INFRA_AP(&pSession->connectedProfile)) + if (type == eWNI_SME_DISASSOC_IND || type == eWNI_SME_DEAUTH_IND) + csr_roam_call_callback(pMac, sessionId, &roamInfo, 0, + eCSR_ROAM_LOSTLINK_DETECTED, result); + else csr_roam_call_callback(pMac, sessionId, NULL, 0, eCSR_ROAM_LOSTLINK_DETECTED, result); @@ -12669,24 +12705,6 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId, else if (eWNI_SME_DEAUTH_IND == type) status = csr_send_mb_deauth_cnf_msg(pMac, pDeauthIndMsg); - /* prepare to tell HDD to disconnect */ - qdf_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); - roamInfo.statusCode = (tSirResultCodes) pSession->roamingStatusCode; - roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode; - if (eWNI_SME_DISASSOC_IND == type) { - /* staMacAddr */ - qdf_copy_macaddr(&roamInfo.peerMac, - &pDisassocIndMsg->peer_macaddr); - roamInfo.staId = (uint8_t) pDisassocIndMsg->staId; - roamInfo.reasonCode = pDisassocIndMsg->reasonCode; - } else if (eWNI_SME_DEAUTH_IND == type) { - /* staMacAddr */ - qdf_copy_macaddr(&roamInfo.peerMac, - &pDeauthIndMsg->peer_macaddr); - roamInfo.staId = (uint8_t) pDeauthIndMsg->staId; - roamInfo.reasonCode = pDeauthIndMsg->reasonCode; - roamInfo.rxRssi = pDeauthIndMsg->rssi; - } sme_debug("roamInfo.staId: %d", roamInfo.staId); return status; @@ -16051,6 +16069,11 @@ QDF_STATUS csr_send_assoc_ind_to_upper_layer_cnf_msg(tpAniSirGlobal pMac, pBuf = (uint8_t *)&pMsg->tx_mcs_map; *pBuf = pAssocInd->tx_mcs_map; + if (pAssocInd->HTCaps.present) + pMsg->HTCaps = pAssocInd->HTCaps; + if (pAssocInd->VHTCaps.present) + pMsg->VHTCaps = pAssocInd->VHTCaps; + msgQ.type = eWNI_SME_UPPER_LAYER_ASSOC_CNF; msgQ.bodyptr = pMsg; msgQ.bodyval = 0; |