wlan: Retry Auth if AP gives MAX_ASSOC_STA_REACHED
This is IOT issue with the AP who has 5G prefer feature.
The AP rejects with eSIR_MAC_MAX_ASSOC_STA_REACHED_STATUS
in AUTH frame when the 2.4G STA tries AUTH process for
the first 2 times. If STA tries the 3rd time in 2.4G,
then the AUTH process will success.
Change-Id: I8afa43cb9728f73172f543bfb9aac65b0b225aa2
CRs-Fixed: 1111136
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 2c9a860..2e382d9 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -773,8 +773,41 @@
return;
}
+void limDoSendAuthMgmtFrame(tpAniSirGlobal pMac, tpPESession psessionEntry)
+{
+ tSirMacAuthFrameBody authFrameBody;
-
+ //Prepare & send Authentication frame
+ authFrameBody.authAlgoNumber =
+ (tANI_U8) pMac->lim.gpLimMlmAuthReq->authType;
+ authFrameBody.authTransactionSeqNumber = SIR_MAC_AUTH_FRAME_1;
+ authFrameBody.authStatusCode = 0;
+ pMac->authAckStatus = LIM_AUTH_ACK_NOT_RCD;
+ limSendAuthMgmtFrame(pMac,
+ &authFrameBody,
+ pMac->lim.gpLimMlmAuthReq->peerMacAddr,
+ LIM_NO_WEP_IN_FC, psessionEntry, eSIR_TRUE);
+ if (tx_timer_activate(&pMac->lim.limTimers.gLimAuthFailureTimer)
+ != TX_SUCCESS) {
+ //Could not start Auth failure timer.
+ //Log error
+ limLog(pMac, LOGP,
+ FL("could not start Auth failure timer"));
+ //Cleanup as if auth timer expired
+ limProcessAuthFailureTimeout(pMac);
+ } else {
+ MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE,
+ psessionEntry->peSessionId, eLIM_AUTH_RETRY_TIMER));
+ //Activate Auth Retry timer
+ if (tx_timer_activate
+ (&pMac->lim.limTimers.gLimPeriodicAuthRetryTimer)
+ != TX_SUCCESS) {
+ limLog(pMac, LOGP,
+ FL("could not activate Auth Retry timer"));
+ }
+ }
+ return;
+}
/*
* Creates a Raw frame to be sent before every Scan, if required.
@@ -2397,7 +2430,6 @@
{
tANI_U32 numPreAuthContexts;
tSirMacAddr currentBssId;
- tSirMacAuthFrameBody authFrameBody;
tLimMlmAuthCnf mlmAuthCnf;
struct tLimPreAuthNode *preAuthNode;
tpDphHashNode pStaDs;
@@ -2524,17 +2556,6 @@
psessionEntry->limMlmState = eLIM_MLM_WT_AUTH_FRAME2_STATE;
MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));
- /// Prepare & send Authentication frame
- authFrameBody.authAlgoNumber =
- (tANI_U8) pMac->lim.gpLimMlmAuthReq->authType;
- authFrameBody.authTransactionSeqNumber = SIR_MAC_AUTH_FRAME_1;
- authFrameBody.authStatusCode = 0;
- pMac->authAckStatus = LIM_AUTH_ACK_NOT_RCD;
- limSendAuthMgmtFrame(pMac,
- &authFrameBody,
- pMac->lim.gpLimMlmAuthReq->peerMacAddr,
- LIM_NO_WEP_IN_FC, psessionEntry, eSIR_TRUE);
-
//assign appropriate sessionId to the timer object
pMac->lim.limTimers.gLimAuthFailureTimer.sessionId = sessionId;
/* assign appropriate sessionId to the timer object */
@@ -2542,27 +2563,8 @@
limDeactivateAndChangeTimer(pMac, eLIM_AUTH_RETRY_TIMER);
// Activate Auth failure timer
MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_AUTH_FAIL_TIMER));
- if (tx_timer_activate(&pMac->lim.limTimers.gLimAuthFailureTimer)
- != TX_SUCCESS)
- {
- /// Could not start Auth failure timer.
- // Log error
- limLog(pMac, LOGP,
- FL("could not start Auth failure timer"));
- // Cleanup as if auth timer expired
- limProcessAuthFailureTimeout(pMac);
- }
- else
- {
- MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE,
- psessionEntry->peSessionId, eLIM_AUTH_RETRY_TIMER));
- // Activate Auth Retry timer
- if (tx_timer_activate(&pMac->lim.limTimers.gLimPeriodicAuthRetryTimer)
- != TX_SUCCESS)
- {
- limLog(pMac, LOGP, FL("could not activate Auth Retry timer"));
- }
- }
+
+ limDoSendAuthMgmtFrame(pMac, psessionEntry);
return;
}
else