wlan: Fix for DHCP failure in GO + STA.
TL handles STA with TDLS peer similiar as AP mode or concurrent mode
LIM->SME properly propagate TDLSDelStaRsp to HDD and HDD maintains PTeerTable accordingly
Merging using lhoonki_prima_1.2_to_dev_tdls.
CRs-Fixed: 443359
Change-Id: I3354578f32a2c14d2cca7a323fe2da53a6327478
diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c
index 6a6fb50..6c52f39 100644
--- a/CORE/TL/src/wlan_qct_tl.c
+++ b/CORE/TL/src/wlan_qct_tl.c
@@ -533,6 +533,10 @@
pTLConfig->uMinFramesProcThres;
#endif
+#ifdef FEATURE_WLAN_TDLS
+ pTLCb->ucTdlsPeerCount = 0;
+#endif
+
pTLCb->tlConfigInfo.uDelayedTriggerFrmInt =
pTLConfig->uDelayedTriggerFrmInt;
@@ -1360,6 +1364,10 @@
VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
" %s fails to start forwarding", __func__);
}
+#ifdef FEATURE_WLAN_TDLS
+ if( WLAN_STA_TDLS == pwSTADescType->wSTAType )
+ pTLCb->ucTdlsPeerCount++;
+#endif
#ifdef WLAN_SOFTAP_FEATURE
}
#endif
@@ -1443,6 +1451,13 @@
WLANTL_BaSessionDel (pvosGCtx, ucSTAId, ucIndex);
}
+#ifdef FEATURE_WLAN_TDLS
+ /* decrement ucTdlsPeerCount only if it is non-zero */
+ if(WLAN_STA_TDLS == pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType
+ && pTLCb->ucTdlsPeerCount)
+ pTLCb->ucTdlsPeerCount--;
+#endif
+
/*------------------------------------------------------------------------
Clear station
------------------------------------------------------------------------*/
@@ -1639,7 +1654,7 @@
if ( 0 == pTLCb->atlSTAClients[ucSTAId].ucExists )
{
- TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
+ TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN,
"WLAN TL:Station was not previously registered on WLANTL_GetSTAState"));
return VOS_STATUS_E_EXISTS;
}
@@ -1764,10 +1779,17 @@
through WLANTL_TX_STAID_AC_IND message.
-----------------------------------------------------------------------*/
#ifdef WLAN_SOFTAP_FEATURE
+#ifdef FETURE_WLAN_TDLS
+ if ((WLAN_STA_SOFTAP != pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType) &&
+ !(vos_concurrent_sessions_running()) &&
+ !pTLCb->ucTdlsPeerCount)
+ {
+#else
if ((WLAN_STA_SOFTAP != pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType) &&
!(vos_concurrent_sessions_running()))
{
#endif
+#endif
pTLCb->atlSTAClients[ucSTAId].aucACMask[ucAc] = 1;
@@ -5970,9 +5992,16 @@
/*------------------------------------------------------------------------
Fetch packet from HDD
------------------------------------------------------------------------*/
+#ifdef FEATURE_WLAN_TDLS
+ if ((WLAN_STA_SOFTAP != pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType) &&
+ (!vos_concurrent_sessions_running()) &&
+ !pTLCb->ucTdlsPeerCount)
+ {
+#else
if ((WLAN_STA_SOFTAP != pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType) &&
(!vos_concurrent_sessions_running()))
{
+#endif
ucAC = pTLCb->atlSTAClients[ucSTAId].ucCurrentAC;
/*-------------------------------------------------------------------
@@ -6314,10 +6343,17 @@
Fetch packet from HDD
------------------------------------------------------------------------*/
#ifdef WLAN_SOFTAP_FEATURE
+#ifdef FEATURE_WLAN_TDLS
+ if ((WLAN_STA_SOFTAP != pTLCb->atlSTAClients[ucSTAId].wSTADesc.wSTAType) &&
+ (!vos_concurrent_sessions_running()) &&
+ !pTLCb->ucTdlsPeerCount)
+ {
+#else
if ((WLAN_STA_SOFTAP != pStaClient->wSTADesc.wSTAType) &&
(!vos_concurrent_sessions_running()))
{
#endif
+#endif
ucAC = pStaClient->ucCurrentAC;
/*-------------------------------------------------------------------
@@ -6860,7 +6896,7 @@
/* that we get an EAPOL packet in WAPI mode or vice versa? */
if ( WLANTL_LLC_8021X_TYPE != usEtherType && WLANTL_LLC_WAI_TYPE != usEtherType )
{
- VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
+ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_WARN,
"WLAN TL:RX Frame not EAPOL or WAI EtherType %d - dropping", usEtherType );
/* Drop packet */
vos_pkt_return_packet(vosDataBuff);
@@ -8349,7 +8385,8 @@
#ifdef FEATURE_WLAN_TDLS
- if( WLAN_STA_INFRA == pTLCb->atlSTAClients[ucStaId].wSTADesc.wSTAType )
+ if( WLAN_STA_INFRA == pTLCb->atlSTAClients[ucStaId].wSTADesc.wSTAType
+ && pTLCb->ucTdlsPeerCount)
{
v_U8_t ucIndex = 0;
for ( ucIndex = 0; ucIndex < WLAN_MAX_STA_COUNT ; ucIndex++)
@@ -9514,12 +9551,7 @@
}
systemRole = wdaGetGlobalSystemRole(pMac);
- if ((eSYSTEM_AP_ROLE == systemRole) || (vos_concurrent_sessions_running()))
- {
- return WLAN_TLAPGetNextTxIds(pvosGCtx,pucSTAId);
- }
-
/*------------------------------------------------------------------------
Extract TL control block
------------------------------------------------------------------------*/
@@ -9531,6 +9563,16 @@
return VOS_STATUS_E_FAULT;
}
+#ifdef FEATURE_WLAN_TDLS
+ if ((eSYSTEM_AP_ROLE == systemRole) || (vos_concurrent_sessions_running()) || pTLCb->ucTdlsPeerCount)
+#else
+ if ((eSYSTEM_AP_ROLE == systemRole) || (vos_concurrent_sessions_running()))
+#endif
+ {
+ return WLAN_TLAPGetNextTxIds(pvosGCtx,pucSTAId);
+ }
+
+
if ( VOS_STATUS_SUCCESS != WDA_DS_GetTxFlowMask( pvosGCtx, &uFlowMask ) )
{
TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
diff --git a/CORE/TL/src/wlan_qct_tli.h b/CORE/TL/src/wlan_qct_tli.h
index d3aa20a..1f0bc7b 100644
--- a/CORE/TL/src/wlan_qct_tli.h
+++ b/CORE/TL/src/wlan_qct_tli.h
@@ -834,6 +834,12 @@
v_U8_t done_once;
v_U8_t uFramesProcThres;
#endif
+#ifdef FEATURE_WLAN_TDLS
+ /*number of total TDLS peers registered to TL
+ Incremented at WLANTL_RegisterSTAClient(staType == WLAN_STA_TDLS)
+ Decremented at WLANTL_ClearSTAClient(staType == WLAN_STA_TDLS) */
+ v_U8_t ucTdlsPeerCount;
+#endif
/*whether we are in BMPS/UAPSD/WOWL mode, since the latter 2 need to be BMPS first*/
v_BOOL_t isBMPS;
/* Whether WDA_DS_TX_START_XMIT msg is pending or not */