summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRakesh Sunki <rsunki@qca.qualcomm.com>2014-10-10 12:24:07 -0700
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-10-16 17:03:10 +0530
commit1c132aa1c879352dea6808c58fdfd7e86191016f (patch)
tree79d683da9d38ddc68f4c7cab780f3296a7422fb5
parenta7e14e43023d1841beab9e4f4b45c71f529574ee (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.c27
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);