summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoddar, Siddarth <siddpodd@qti.qualcomm.com>2016-06-27 14:06:39 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-06-28 19:55:21 +0530
commit5b0dcd0a80892c03d7ece9481bb517cd3b59ec40 (patch)
tree4d653c389f2cf99a9d28e3e6aaeb373bda5036eb
parent37699ca29a56fb1fec966880d5b875fc12ef6aa5 (diff)
qcacld-2.0: Delete PMF Sta from previous vdev
If a PMF Sta is already connected to one interface and try to switch to other interface without sending deauth/disassoc, sta entry is not deleted from previous vdev and one more entry is created on current vdev. Due to this htt is not able to get valid peer for EAPOL packets and EAPOL packets are dropped leading to connection failure. To fix this, Add check to delete PMF Sta from one vdev when assoc request is received on another vdev. Change-Id: Ida2e20fe08af3c6ed426822a71db1fd6854a0bea CRs-Fixed: 1033224
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c35
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAuthFrame.c4
2 files changed, 21 insertions, 18 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index 4d6fb1f821bb..cc24b8f76fae 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -156,20 +156,22 @@ limConvertSupportedChannels(tpAniSirGlobal pMac,
pMlmAssocInd->supportedChannels.numChnl);)
}
-/**---------------------------------------------------------------
-\fn lim_check_sta_in_pe_entries
-\brief This function is called by limProcessAssocReqFrame()
-\ to check if STA entry already exists in any of the
-\ PE entries of the AP. If it exists, deauth will be
-\ sent on that session and the STA deletion will
-\ happen. After this, the ASSOC request will be
-\ processed
-\
-\param pMac - A pointer to Global MAC structure
-\param pHdr - A pointer to the MAC header
-\return None
-------------------------------------------------------------------*/
-void lim_check_sta_in_pe_entries(tpAniSirGlobal pMac, tpSirMacMgmtHdr pHdr)
+/**
+ * lim_check_sta_in_pe_entries() - to check if sta entry already exists
+ * @pMac - A pointer to Global MAC structure
+ * @pHdr - A pointer to the MAC header
+ * @sessionid - session id for which session is initiated
+ *
+ * This function is called by limProcessAssocReqFrame()
+ * to check if STA entry already exists in any of the
+ * PE entries of the AP. If it exists, deauth will be
+ * sent on that session and the STA deletion will
+ * happen. After this, the ASSOC request will be processed
+ *
+ * Return: None
+ */
+void lim_check_sta_in_pe_entries(tpAniSirGlobal pMac, tpSirMacMgmtHdr pHdr,
+ uint16_t sessionid)
{
tANI_U8 i;
tANI_U16 assocId = 0;
@@ -188,7 +190,8 @@ void lim_check_sta_in_pe_entries(tpAniSirGlobal pMac, tpSirMacMgmtHdr pHdr)
&psessionEntry->dph.dphHashTable);
if (pStaDs
#ifdef WLAN_FEATURE_11W
- && !pStaDs->rmfEnabled
+ && (!pStaDs->rmfEnabled ||
+ (sessionid != psessionEntry->peSessionId))
#endif
) {
limLog(pMac, LOGE,
@@ -321,7 +324,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,
}
}
- lim_check_sta_in_pe_entries(pMac, pHdr);
+ lim_check_sta_in_pe_entries(pMac, pHdr, psessionEntry->peSessionId);
// Get pointer to Re/Association Request frame body
pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
index 61028eca0667..1fcaab0ceb13 100644
--- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
@@ -661,7 +661,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse
eLIM_AUTH_RSP_TIMER,
pAuthNode->authNodeIdx);
}
- PELOGE(limLog(pMac, LOGE, FL("STA is initiating brand-new Authentication ..."));)
+ limLog(pMac, LOGW, FL("STA is initiating brand-new Authentication ..."));
limDeletePreAuthNode(pMac,
pHdr->sa);
/**
@@ -710,7 +710,7 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse
* but ACK lost at STA side, in this case 2nd auth frame is already
* in transmission queue
* */
- PELOGE(limLog(pMac, LOGE, FL("STA is initiating Authentication after ACK lost..."));)
+ limLog(pMac, LOGW, FL("STA is initiating Authentication after ACK lost..."));
return;
}
}