wlan: Limit further ADDBA requests if AP/STA declines the request
Currently DUT sends ADDBA request for every 1 sec even when AP/STA declines
every request due to its configuration to reject ADDBA request.
To address this, increase BA timestamp to (failure_count * 5) mins for
each rejection and stop sending ADDBA request after 10 rejections.
Change-Id: I93dc66c00279b7e77bf20990151e4b5bbe0bfbc2
CRS-Fixed: 1037741
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index cb3dbb4..1d50dbf 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -255,6 +255,11 @@
void *pMlmDeauthReq;
}tLimDisassocDeauthCnfReq;
+typedef struct {
+ tANI_U32 failed_count[MAX_TIDS];
+ v_TIME_t failed_timestamp[MAX_TIDS];
+} tLimStaBAInfo;
+
typedef struct sAniSirLim
{
////////////////////////////////////// TIMER RELATED START ///////////////////////////////////////////
@@ -908,6 +913,7 @@
tANI_U32 remOnChnSeqNum;
tANI_U32 txBdToken;
tANI_U32 EnableTdls2040BSSCoexIE;
+ tLimStaBAInfo staBaInfo[WLAN_MAX_STA_COUNT];
} tAniSirLim, *tpAniSirLim;
typedef struct sLimMgmtFrameRegistration
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 6d34461..f49aa01 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -444,6 +444,7 @@
pMac->lim.gHTDualCTSProtection = 0;
pMac->lim.gHTSTBCBasicMCS = 0;
pMac->lim.gAddBA_Declined = 0; // Flag to Decline the BAR if the particular bit (0-7) is being set
+ vos_mem_set(&pMac->lim.staBaInfo, sizeof(pMac->lim.staBaInfo), 0);
}
static tSirRetStatus __limInitConfig( tpAniSirGlobal pMac )
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index cb91604..ab54e41 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -1541,6 +1541,10 @@
if( eSIR_MAC_SUCCESS_STATUS == frmAddBARsp.Status.status )
{
tANI_U32 val;
+ pMac->lim.staBaInfo[pSta->staIndex].
+ failed_count[frmAddBARsp.AddBAParameterSet.tid] = 0;
+ pMac->lim.staBaInfo[pSta->staIndex].
+ failed_timestamp[frmAddBARsp.AddBAParameterSet.tid] = 0;
if (wlan_cfgGetInt(pMac, WNI_CFG_NUM_BUFF_ADVERT , &val) != eSIR_SUCCESS)
{
limLog(pMac, LOG1, FL("Unable to get WNI_CFG_NUM_BUFF_ADVERT"));
@@ -1567,8 +1571,13 @@
}
}
else
+ {
+ pMac->lim.staBaInfo[pSta->staIndex].
+ failed_count[frmAddBARsp.AddBAParameterSet.tid]++;
+ pMac->lim.staBaInfo[pSta->staIndex].failed_timestamp[
+ frmAddBARsp.AddBAParameterSet.tid] = jiffies_to_msecs(jiffies);
goto returnAfterError;
-
+ }
// Change STA state to wait for ADDBA Rsp from HAL
LIM_SET_STA_BA_STATE(pSta, frmAddBARsp.AddBAParameterSet.tid, eLIM_BA_STATE_WT_ADD_RSP);