diff options
| author | Rakesh Sunki <rsunki@qca.qualcomm.com> | 2014-10-10 12:24:07 -0700 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2014-10-16 17:03:10 +0530 |
| commit | 1c132aa1c879352dea6808c58fdfd7e86191016f (patch) | |
| tree | 79d683da9d38ddc68f4c7cab780f3296a7422fb5 | |
| parent | a7e14e43023d1841beab9e4f4b45c71f529574ee (diff) | |
qcacld: Fix to drop Assoc Request, when ACK is lost on STA side.
Add, a sanity check to drop the assoc request retransmit frame, when
STA is already present in DPH and it is initiating a Assoc re-transmit.
Change-Id: Id47d4af4ed0aace4553df0a32506a4deafc08e28
CRs-Fixed: 737386
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index d6f42cbc0b38..cb6a21363066 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -246,6 +246,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tPmfSaQueryTimerId timerId; tANI_U32 retryInterval; #endif + tANI_U16 assocId = 0; limGetPhyMode(pMac, &phyMode, psessionEntry); @@ -260,8 +261,6 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, psessionEntry->peSessionId, psessionEntry->limSystemRole, psessionEntry->limMlmState, MAC_ADDR_ARRAY(pHdr->sa)); - lim_check_sta_in_pe_entries(pMac, pHdr); - if (psessionEntry->limSystemRole == eLIM_STA_ROLE || psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE ) { limLog(pMac, LOGE, FL("received unexpected ASSOC REQ on sessionid: %d " @@ -273,6 +272,30 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, return; } + /* + * If a STA is already present in DPH and it + * is initiating a Assoc re-transmit, do not + * process it. This can happen when first Assoc Req frame + * is received but ACK lost at STA side. The ACK for this + * dropped Assoc Req frame should be sent by HW. Host simply + * does not process it once the entry for the STA is already + * present in DPH. + */ + pStaDs = dphLookupHashEntry(pMac, pHdr->sa, &assocId, + &psessionEntry->dph.dphHashTable); + if ((NULL != pStaDs) && (pHdr->fc.retry > 0)) + { + limLog(pMac, LOGE, + FL("STA is initiating Assoc Req after ACK lost.So, do not Process" + "sessionid: %d sys subType=%d for role=%d from: "MAC_ADDRESS_STR), + psessionEntry->peSessionId, + subType, psessionEntry->limSystemRole, MAC_ADDR_ARRAY(pHdr->sa)); + + return; + } + + lim_check_sta_in_pe_entries(pMac, pHdr); + // Get pointer to Re/Association Request frame body pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); |
