void limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession psessionEntry) { tANI_U8 *pBody; tANI_U32 frameLen = 0; tSirMacAddr currentBssId; tpSirMacMgmtHdr pHdr; tSirProbeRespBeacon probeRsp; tANI_U8 qosEnabled = false; tANI_U8 wmeEnabled = false; probeRsp.ssId.length = 0; probeRsp.wpa.length = 0; probeRsp.propIEinfo.apName.length = 0; #if (WNI_POLARIS_FW_PACKAGE == ADVANCED) probeRsp.propIEinfo.aniIndicator = 0; probeRsp.propIEinfo.wdsLength = 0; #endif pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); PELOG2(limLog(pMac, LOG2, FL("Received Probe Response frame with length=%d from "), WDA_GET_RX_MPDU_LEN(pRxPacketInfo)); limPrintMacAddr(pMac, pHdr->sa, LOG2);) if (limDeactivateMinChannelTimerDuringScan(pMac) != eSIR_SUCCESS)
void limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession psessionEntry) { tANI_U8 *pBody; tANI_U32 frameLen = 0; tSirMacAddr currentBssId; tpSirMacMgmtHdr pHdr; tSirProbeRespBeacon *pProbeRsp; tANI_U8 qosEnabled = false; tANI_U8 wmeEnabled = false; if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd, (void **)&pProbeRsp, sizeof(tSirProbeRespBeacon))) { limLog(pMac, LOGE, FL("Unable to PAL allocate memory in limProcessProbeRspFrame") ); return; } pProbeRsp->ssId.length = 0; pProbeRsp->wpa.length = 0; pProbeRsp->propIEinfo.apName.length = 0; pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); PELOG2(limLog(pMac, LOG2, FL("Received Probe Response frame with length=%d from "), WDA_GET_RX_MPDU_LEN(pRxPacketInfo)); limPrintMacAddr(pMac, pHdr->sa, LOG2);) if (limDeactivateMinChannelTimerDuringScan(pMac) != eSIR_SUCCESS)
void limDeletePreAuthNode(tpAniSirGlobal pMac, tSirMacAddr macAddr) { struct tLimPreAuthNode *pPrevNode, *pTempNode; pTempNode = pPrevNode = pMac->lim.pLimPreAuthList; if (pTempNode == NULL) return; if (vos_mem_compare( (tANI_U8 *) macAddr, (tANI_U8 *) &pTempNode->peerMacAddr, sizeof(tSirMacAddr)) ) { // First node to be deleted pMac->lim.pLimPreAuthList = pTempNode->next; limLog(pMac, LOG1, FL(" first node to delete")); limLog(pMac, LOG1, FL(" Release data entry:%p idx %d peer: " MAC_ADDRESS_STR), pTempNode, pTempNode->authNodeIdx, MAC_ADDR_ARRAY(macAddr)); limReleasePreAuthNode(pMac, pTempNode); return; } pTempNode = pTempNode->next; while (pTempNode != NULL) { if (vos_mem_compare( (tANI_U8 *) macAddr, (tANI_U8 *) &pTempNode->peerMacAddr, sizeof(tSirMacAddr)) ) { // Found node to be deleted pPrevNode->next = pTempNode->next; limLog(pMac, LOG1, FL(" subsequent node to delete")); limLog(pMac, LOG1, FL("Release data entry: %p id %d peer: "MAC_ADDRESS_STR), pTempNode, pTempNode->authNodeIdx, MAC_ADDR_ARRAY(macAddr)); limReleasePreAuthNode(pMac, pTempNode); return; } pPrevNode = pTempNode; pTempNode = pTempNode->next; } // Should not be here // Log error limLog(pMac, LOGP, FL("peer not found in pre-auth list, addr= ")); limPrintMacAddr(pMac, macAddr, LOGP); } /*** end limDeletePreAuthNode() ***/
/*-------------------------------------------------------------------------- \brief peFindSessionByBssid() - looks up the PE session given the BSSID. This function returns the session context and the session ID if the session corresponding to the given BSSID is found in the PE session table. \param pMac - pointer to global adapter context \param bssid - BSSID of the session \param sessionId -session ID is returned here, if session is found. \return tpPESession - pointer to the session context or NULL if session is not found. \sa --------------------------------------------------------------------------*/ tpPESession peFindSessionByBssid(tpAniSirGlobal pMac, tANI_U8* bssid, tANI_U8* sessionId) { tANI_U8 i; for(i =0; i < pMac->lim.maxBssId; i++) { /* If BSSID matches return corresponding tables address*/ if( (pMac->lim.gpSession[i].valid) && (sirCompareMacAddr(pMac->lim.gpSession[i].bssId, bssid))) { *sessionId = i; return(&pMac->lim.gpSession[i]); } } limLog(pMac, LOG4, FL("Session lookup fails for BSSID: \n ")); limPrintMacAddr(pMac, bssid, LOG4); return(NULL); }
void limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession psessionEntry) { tpSirMacMgmtHdr pHdr; tSchBeaconStruct *pBeacon; pMac->lim.gLimNumBeaconsRcvd++; /* here is it required to increment session specific heartBeat beacon counter */ pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); PELOG2(limLog(pMac, LOG2, FL("Received Beacon frame with length=%d from "), WDA_GET_RX_MPDU_LEN(pRxPacketInfo)); limPrintMacAddr(pMac, pHdr->sa, LOG2);) if (!pMac->fScanOffload)
void limProcessProbeRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession psessionEntry) { tANI_U8 *pBody; tANI_U32 frameLen = 0; tSirMacAddr currentBssId; tpSirMacMgmtHdr pHdr; tSirProbeRespBeacon *pProbeRsp; tANI_U8 qosEnabled = false; tANI_U8 wmeEnabled = false; if (!psessionEntry) { limLog(pMac, LOGE, FL("psessionEntry is NULL") ); return; } limLog(pMac,LOG1,"SessionId:%d ProbeRsp Frame is received", psessionEntry->peSessionId); pProbeRsp = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); if ( NULL == pProbeRsp ) { limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessProbeRspFrame") ); return; } pProbeRsp->ssId.length = 0; pProbeRsp->wpa.length = 0; pProbeRsp->propIEinfo.apName.length = 0; pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); PELOG2(limLog(pMac, LOG2, FL("Received Probe Response frame with length=%d from "), WDA_GET_RX_MPDU_LEN(pRxPacketInfo)); limPrintMacAddr(pMac, pHdr->sa, LOG2);) if (!pMac->fScanOffload)
tpPESession peFindSessionByPeerSta(tpAniSirGlobal pMac, tANI_U8* sa, tANI_U8* sessionId) { tANI_U8 i; tpDphHashNode pSta; tANI_U16 aid; for(i =0; i < pMac->lim.maxBssId; i++) { if( (pMac->lim.gpSession[i].valid)) { pSta = dphLookupHashEntry(pMac, sa, &aid, &pMac->lim.gpSession[i].dph.dphHashTable); if (pSta != NULL) { *sessionId = i; return &pMac->lim.gpSession[i]; } } } limLog(pMac, LOG1, FL("Session lookup fails for Peer StaId: \n ")); limPrintMacAddr(pMac, sa, LOG1); return NULL; }
void limProcessBeaconFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession psessionEntry) { tpSirMacMgmtHdr pHdr; tSchBeaconStruct *pBeacon; pMac->lim.gLimNumBeaconsRcvd++; /* here is it required to increment session specific heartBeat beacon counter */ pHdr = WDA_GET_RX_MAC_HEADER(pRxPacketInfo); limLog(pMac, LOG2, FL("Received Beacon frame with length=%d from "), WDA_GET_RX_MPDU_LEN(pRxPacketInfo)); limPrintMacAddr(pMac, pHdr->sa, LOG2); if (!pMac->fScanOffload) { if (limDeactivateMinChannelTimerDuringScan(pMac) != eSIR_SUCCESS) return; } /** * Expect Beacon only when * 1. STA is in Scan mode waiting for Beacon/Probe response or * 2. STA is waiting for Beacon/Probe Respose Frame * to announce join success. * 3. STA/AP is in Learn mode */ if ((pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE) || (pMac->lim.gLimMlmState == eLIM_MLM_PASSIVE_SCAN_STATE) || (pMac->lim.gLimMlmState == eLIM_MLM_LEARN_STATE) || (psessionEntry->limMlmState == eLIM_MLM_WT_JOIN_BEACON_STATE) || pMac->fScanOffload ) { pBeacon = vos_mem_malloc(sizeof(tSchBeaconStruct)); if ( NULL == pBeacon ) { limLog(pMac, LOGE, FL("Unable to allocate memory in limProcessBeaconFrame") ); return; } // Parse received Beacon if (sirConvertBeaconFrame2Struct(pMac, (tANI_U8 *) pRxPacketInfo, pBeacon) != eSIR_SUCCESS) { // Received wrongly formatted/invalid Beacon. // Ignore it and move on. limLog(pMac, LOGW, FL("Received invalid Beacon in state %d"), psessionEntry->limMlmState); limPrintMlmState(pMac, LOGW, psessionEntry->limMlmState); if ((!psessionEntry->currentBssBeaconCnt) && (sirCompareMacAddr( psessionEntry->bssId, pHdr->sa))) limParseBeaconForTim(pMac, (tANI_U8 *) pRxPacketInfo, psessionEntry); vos_mem_free(pBeacon); return; } /*during scanning, when any session is active, and beacon/Pr belongs to one of the session, fill up the following, TBD - HB couter */ if ((!psessionEntry->lastBeaconDtimPeriod) && (sirCompareMacAddr( psessionEntry->bssId, pBeacon->bssid))) { vos_mem_copy(( tANI_U8* )&psessionEntry->lastBeaconTimeStamp, ( tANI_U8* )pBeacon->timeStamp, sizeof(tANI_U64) ); psessionEntry->lastBeaconDtimCount = pBeacon->tim.dtimCount; psessionEntry->lastBeaconDtimPeriod= pBeacon->tim.dtimPeriod; psessionEntry->currentBssBeaconCnt++; } MTRACE(macTrace(pMac, TRACE_CODE_RX_MGMT_TSF, 0, pBeacon->timeStamp[0]);)