Merge "prima: TDLS: Disable tdls channel switch when prohibited by AP"
diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h
index 53e66e0..08d5005 100644
--- a/CORE/MAC/src/include/parserApi.h
+++ b/CORE/MAC/src/include/parserApi.h
@@ -268,6 +268,7 @@
tDot11fIEVHTCaps VHTCaps;
tDot11fIEVHTOperation VHTOperation;
#endif
+ tDot11fIEExtCap ExtCap;
tDot11fIEOBSSScanParameters OBSSScanParameters;
tSirQosMapSet QosMapSet;
} tSirAssocRsp, *tpSirAssocRsp;
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index 9a7c7a6..8238f48 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -338,6 +338,7 @@
tANI_U16 gLimNumOfCurrentSTAs;
#ifdef FEATURE_WLAN_TDLS
tANI_U32 peerAIDBitmap[2];
+ tANI_BOOLEAN tdlsChanSwitProhibited;
#endif
tANI_BOOLEAN fWaitForProbeRsp;
tANI_BOOLEAN fIgnoreCapsChange;
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
index 806291e..84cae75 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
@@ -467,7 +467,12 @@
return;
}
-
+ if(pAssocRsp->ExtCap.present)
+ {
+ limLog(pMac, LOGE, FL("Filling tdls prohibited in session entry"));
+ psessionEntry->tdlsChanSwitProhibited =
+ pAssocRsp->ExtCap.TDLSChanSwitProhibited ;
+ }
if(!pAssocRsp->suppRatesPresent)
{
PELOGE(limLog(pMac, LOGE, FL("assoc response does not have supported rate set"));)
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 2afbfb8..aaa0e66 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -5675,8 +5675,15 @@
pMsgTdlsLinkEstablishReq->isBufsta = pTdlsLinkEstablishReq->isBufSta;
pMsgTdlsLinkEstablishReq->isOffChannelSupported =
pTdlsLinkEstablishReq->isOffChannelSupported;
- pMsgTdlsLinkEstablishReq->isOffChannelSupported = 1;
-
+ if (psessionEntry->tdlsChanSwitProhibited)
+ {
+ pMsgTdlsLinkEstablishReq->isOffChannelSupported = 3;
+ limLog(pMac, LOG1, FL("Channel Switch Prohibited by AP"));
+ }
+ else
+ {
+ pMsgTdlsLinkEstablishReq->isOffChannelSupported = 1;
+ }
if ((pTdlsLinkEstablishReq->supportedChannelsLen > 0) &&
(pTdlsLinkEstablishReq->supportedChannelsLen <= SIR_MAC_MAX_SUPP_CHANNELS))
{
diff --git a/CORE/MAC/src/pe/lim/limSession.c b/CORE/MAC/src/pe/lim/limSession.c
index 198127c..3c85332 100644
--- a/CORE/MAC/src/pe/lim/limSession.c
+++ b/CORE/MAC/src/pe/lim/limSession.c
@@ -184,6 +184,7 @@
#ifdef FEATURE_WLAN_TDLS
vos_mem_set(pMac->lim.gpSession[i].peerAIDBitmap,
sizeof(pMac->lim.gpSession[i].peerAIDBitmap), 0);
+ pMac->lim.gpSession[i].tdlsChanSwitProhibited = 0;
#endif
pMac->lim.gpSession[i].fWaitForProbeRsp = 0;
pMac->lim.gpSession[i].fIgnoreCapsChange = 0;
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index b8bba76..a053a46 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -2450,8 +2450,13 @@
pAssocRsp->edcaPresent = 1;
ConvertEDCAParam( pMac, &pAssocRsp->edca, &ar.EDCAParamSet );
}
-
-
+ if (ar.ExtCap.present)
+ {
+ vos_mem_copy(&pAssocRsp->ExtCap, &ar.ExtCap, sizeof(tDot11fIEExtCap));
+ limLog(pMac, LOG1,
+ FL("ExtCap is present, TDLSChanSwitProhibited: %d"),
+ ar.ExtCap.TDLSChanSwitProhibited);
+ }
if ( ar.WMMParams.present )
{
pAssocRsp->wmeEdcaPresent = 1;