TDLS: Disappearing AP Trick Implementation as part of Oxygen support.
This commit introduces Disappearing AP Trick requirement as part of
oxygen implementation.
Change-Id: Ie8d687c433777b305c5ad9e1ed70d692e7d3320b
CRs-fixed: 471056
diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h
index c0e8bda..f461757 100644
--- a/CORE/HDD/inc/wlan_hdd_tdls.h
+++ b/CORE/HDD/inc/wlan_hdd_tdls.h
@@ -140,6 +140,9 @@
struct _hddTdlsPeer_t *curr_candidate;
struct work_struct implicit_setup;
v_U32_t magic;
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ v_BOOL_t defer_link_lost_indication;
+#endif
} tdlsCtx_t;
typedef struct _hddTdlsPeer_t {
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index b9e1a6f..b65c2e8 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1996,6 +1996,9 @@
eCsrRoamResult roamResult)
{
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
+#endif
eHalStatus status = eHAL_STATUS_FAILURE ;
tANI_U8 staIdx;
@@ -2007,6 +2010,9 @@
roamResult == eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND ? "DEL_TDLS_PEER_IND" :
roamResult == eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND? "DEL_ALL_TDLS_PEER_IND" :
roamResult == eCSR_ROAM_RESULT_UPDATE_TDLS_PEER? "UPDATE_TDLS_PEER" :
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ roamResult == eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND? "DISAPPEAR_AP_DEREG_STA" :
+#endif
"UNKNOWN",
pRoamInfo->staId,
pRoamInfo->peerMac[0],
@@ -2124,6 +2130,18 @@
complete(&pAdapter->tdls_del_station_comp);
}
break ;
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ case eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND:
+ {
+ if (NULL == pHddTdlsCtx)
+ return status;
+
+ pHddTdlsCtx->defer_link_lost_indication = TRUE;
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN,
+ ("HDD: DISAPPEAR_AP_IND sta id %d"), pRoamInfo->staId) ;
+ }
+ break;
+#endif
case eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND:
{
hddTdlsPeer_t *curr_peer;
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 278d455..7931bad 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5527,6 +5527,38 @@
/*
+ * FUNCTION: wlan_hdd_disconnect
+ * This function is used to issue a disconnect request to SME
+ */
+int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason )
+{
+ int status = 0;
+ hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+ pHddStaCtx->conn_info.connState = eConnectionState_NotConnected;
+ (WLAN_HDD_GET_CTX(pAdapter))->isAmpAllowed = VOS_TRUE;
+ INIT_COMPLETION(pAdapter->disconnect_comp_var);
+ /*issue disconnect*/
+ status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter),
+ pAdapter->sessionId, reason);
+
+ if ( 0 != status )
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s csrRoamDisconnect failure, returned %d \n",
+ __func__, (int)status );
+ return -EINVAL;
+ }
+ wait_for_completion_interruptible_timeout(
+ &pAdapter->disconnect_comp_var,
+ msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT));
+ /*stop tx queues*/
+ netif_tx_disable(pAdapter->dev);
+ netif_carrier_off(pAdapter->dev);
+ return status;
+}
+
+
+/*
* FUNCTION: wlan_hdd_cfg80211_disconnect
* This function is used to issue a disconnect request to SME
*/
@@ -5588,9 +5620,6 @@
reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED;
break;
}
- pHddStaCtx->conn_info.connState = eConnectionState_NotConnected;
- (WLAN_HDD_GET_CTX(pAdapter))->isAmpAllowed = VOS_TRUE;
- INIT_COMPLETION(pAdapter->disconnect_comp_var);
#ifdef FEATURE_WLAN_TDLS
/* First clean up the tdls peers if any */
@@ -5611,26 +5640,14 @@
}
}
#endif
- /*issue disconnect*/
- status = sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter),
- pAdapter->sessionId, reasonCode);
-
- if ( 0 != status)
+ status = wlan_hdd_disconnect(pAdapter, reasonCode);
+ if ( 0 != status )
{
hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s csrRoamDisconnect failure, returned %d \n",
+ "%s wlan_hdd_disconnect failure, returned %d \n",
__func__, (int)status );
return -EINVAL;
}
-
- wait_for_completion_interruptible_timeout(
- &pAdapter->disconnect_comp_var,
- msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT));
-
-
- /*stop tx queues*/
- netif_tx_disable(dev);
- netif_carrier_off(dev);
}
}
else
@@ -5641,6 +5658,7 @@
return status;
}
+
/*
* FUNCTION: wlan_hdd_cfg80211_set_privacy_ibss
* This function is used to initialize the security
@@ -7095,6 +7113,11 @@
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+ int status = 0;
+ tANI_U8 staIdx;
+#endif
#ifdef WLAN_FEATURE_TDLS_DEBUG
const char *tdls_oper_str[]= {
"NL80211_TDLS_DISCOVERY_REQ",
@@ -7214,6 +7237,23 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: TDLS Peer Station doesn't exist.", __func__);
}
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ if (pHddTdlsCtx->defer_link_lost_indication)
+ {
+ if (( TRUE == pHddCtx->cfg_ini->fEnableTDLSOxygenSupport ) &&
+ (wlan_hdd_tdlsConnectedPeers(pAdapter) == 0))
+ {
+ status = wlan_hdd_disconnect(pAdapter, eCSR_DISCONNECT_REASON_UNSPECIFIED);
+ if ( 0 != status)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s wlan_hdd_disconnect failure, returned %d \n",
+ __func__, (int)status );
+ return -EINVAL;
+ }
+ }
+ }
+#endif
}
break;
case NL80211_TDLS_TEARDOWN:
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 8a7423d..6e3519c 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -1364,6 +1364,9 @@
pHddTdlsCtx->threshold_config.tx_period_t,
pHddTdlsCtx->threshold_config.discovery_period_t);
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ pHddTdlsCtx->defer_link_lost_indication = FALSE;
+#endif
if (eTDLS_SUPPORT_ENABLED == pHddCtx->tdls_mode)
{
wlan_hdd_tdls_peer_reset_discovery_processed(pHddTdlsCtx);
@@ -1400,6 +1403,9 @@
mutex_unlock(&tdls_lock);
return;
}
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ pHddTdlsCtx->defer_link_lost_indication = FALSE;
+#endif
pHddTdlsCtx->discovery_sent_cnt = 0;
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 52dc1b7..a23a20b 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3889,6 +3889,16 @@
tANI_U16 length;
tANI_U8 sessionId; // Session ID
} tSirTdlsDelAllPeerInd, *tpSirTdlsDelAllPeerInd;
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+typedef struct sSirTdlsDisappearAPInd
+{
+ tANI_U16 messageType;
+ tANI_U16 length;
+ tANI_U8 sessionId; // Session ID
+ tANI_U16 staId;
+ tSirMacAddr staAddr;
+} tSirTdlsDisappearAPInd, *tpSirTdlsDisappearAPInd;
+#endif
typedef struct sSirMgmtTxCompletionInd
{
tANI_U16 messageType;
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 76655d4..28f87b5 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -343,6 +343,9 @@
eWNI_SME_TDLS_DEL_STA_IND,
eWNI_SME_TDLS_DEL_ALL_PEER_IND,
eWNI_SME_MGMT_FRM_TX_COMPLETION_IND,
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ eWNI_SME_TDLS_AP_DISAPPEAR_IND,
+#endif
#endif
//NOTE: If you are planning to add more mesages, please make sure that
//SIR_LIM_ITC_MSG_TYPES_BEGIN is moved appropriately. It is set as
diff --git a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
index 6f42da6..70b4905 100644
--- a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
+++ b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
@@ -191,6 +191,14 @@
mlmDeauthInd.deauthTrigger = pStaDs->mlmStaContext.cleanupTrigger;
#ifdef FEATURE_WLAN_TDLS
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ if ((TRUE == pMac->lim.gLimTDLSOxygenSupport) &&
+ (limGetTDLSPeerCount(pMac, psessionEntry) != 0)) {
+ limTDLSDisappearAPTrickInd(pMac, pStaDs, psessionEntry);
+ palFreeMemory(pMac->hHdd, pMsg);
+ return ;
+ }
+#endif
/* Delete all TDLS peers connected before leaving BSS*/
limDeleteTDLSPeers(pMac, psessionEntry);
#endif
@@ -371,6 +379,13 @@
tLimMlmDeauthInd mlmDeauthInd;
#ifdef FEATURE_WLAN_TDLS
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ if ((TRUE == pMac->lim.gLimTDLSOxygenSupport) &&
+ (limGetTDLSPeerCount(pMac, psessionEntry) != 0)) {
+ limTDLSDisappearAPTrickInd(pMac, pStaDs, psessionEntry);
+ return;
+ }
+#endif
/* Delete all TDLS peers connected before leaving BSS*/
limDeleteTDLSPeers(pMac, psessionEntry);
#endif
diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
index 1398d48..eedfab7 100644
--- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
@@ -41,7 +41,6 @@
/*
*
- * Airgo Networks, Inc proprietary. All rights reserved.
* This file limProcessDeauthFrame.cc contains the code
* for processing Deauthentication Frame.
* Author: Chandra Modumudi
@@ -376,7 +375,15 @@
}
else
{
- limDeleteTDLSPeers(pMac, psessionEntry);
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ if ((TRUE == pMac->lim.gLimTDLSOxygenSupport) &&
+ (limGetTDLSPeerCount(pMac, psessionEntry) != 0)) {
+ limTDLSDisappearAPTrickInd(pMac, pStaDs, psessionEntry);
+ return;
+ }
+#endif
+
+ limDeleteTDLSPeers(pMac, psessionEntry);
#endif
/**
* This could be Deauthentication frame from
diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
index ff53ced..b35d7f3 100644
--- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
@@ -39,8 +39,6 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-
-
/*
* This file limProcessDisassocFrame.cc contains the code
* for processing Disassocation Frame.
@@ -242,7 +240,6 @@
// Valid reasonCode in received Disassociation frame
break;
- case eSIR_MAC_DEAUTH_LEAVING_BSS_REASON:
case eSIR_MAC_DISASSOC_LEAVING_BSS_REASON:
// Valid reasonCode in received Disassociation frame
// as long as we're not about to channel switch
@@ -343,6 +340,13 @@
limRestorePreReassocState(pMac,eSIR_SME_REASSOC_REFUSED, reasonCode,psessionEntry);
return;
}
+#if defined(FEATURE_WLAN_TDLS) && defined(FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP)
+ if ((TRUE == pMac->lim.gLimTDLSOxygenSupport) &&
+ (limGetTDLSPeerCount(pMac, psessionEntry) != 0)) {
+ limTDLSDisappearAPTrickInd(pMac, pStaDs, psessionEntry);
+ return;
+ }
+#endif
limPostSmeMessage(pMac, LIM_MLM_DISASSOC_IND,
(tANI_U32 *) &mlmDisassocInd);
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index f21a75e..6dc5dfc 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1312,7 +1312,7 @@
tpPESession psessionEntry = &pMac->lim.gpSession[0];
tANI_U8 i;
tANI_U8 p2pGOExists = 0;
-
+
limLog(pMac, LOG1, "LIM received NOA start %x", limMsg->type);
/* Since insert NOA is done and NOA start msg received, we should deactivate the Insert NOA timer */
@@ -1540,6 +1540,26 @@
}
else
{
+#if defined(FEATURE_WLAN_TDLS) && defined(FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP)
+ tpPESession psessionEntry = &pMac->lim.gpSession[0];
+ for (i=0; i < pMac->lim.maxBssId; i++)
+ {
+ psessionEntry = &pMac->lim.gpSession[i];
+ if ((psessionEntry != NULL) && (psessionEntry->valid) &&
+ ((psessionEntry->pePersona == VOS_P2P_CLIENT_MODE) ||
+ (psessionEntry->pePersona == VOS_STA_MODE)))
+ {
+ if ((TRUE == pMac->lim.gLimTDLSOxygenSupport) &&
+ (limGetTDLSPeerCount(pMac, psessionEntry) != 0)) {
+ if (limMsg->bodyptr) {
+ palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr);
+ limMsg->bodyptr = NULL;
+ }
+ return;
+ }
+ }
+ }
+#endif
if (NULL == limMsg->bodyptr)
{
limHandleHeartBeatTimeout(pMac);
@@ -1548,7 +1568,7 @@
{
limHandleHeartBeatTimeoutForSession(pMac, (tpPESession)limMsg->bodyptr);
}
- }
+ }
break;
case SIR_LIM_PROBE_HB_FAILURE_TIMEOUT:
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 84a884b..73f3762 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -5531,5 +5531,52 @@
return eSIR_SUCCESS;
}
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+/* Get the number of TDLS peer connected in the BSS */
+int limGetTDLSPeerCount(tpAniSirGlobal pMac, tpPESession psessionEntry)
+{
+ int i,tdlsPeerCount = 0;
+ /* Check all the set bit in peerAIDBitmap and return the number of TDLS peer counts */
+ for (i = 0; i < sizeof(psessionEntry->peerAIDBitmap)/sizeof(tANI_U32); i++)
+ {
+ tANI_U32 bitmap;
+ bitmap = psessionEntry->peerAIDBitmap[i];
+ while (bitmap)
+ {
+ tdlsPeerCount++;
+ bitmap >>= 1;
+ }
+ }
+ return tdlsPeerCount;
+}
+void limTDLSDisappearAPTrickInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry)
+{
+ tSirMsgQ mmhMsg;
+ tSirTdlsDisappearAPInd *pSirTdlsDisappearAPInd;
+
+ if ( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pSirTdlsDisappearAPInd, sizeof(tSirTdlsDisappearAPInd)))
+ {
+ limLog(pMac, LOGP, FL("palAllocateMemory failed for eWNI_SME_TDLS_DEL_ALL_PEER_IND"));
+ return;
+ }
+
+ //messageType
+ pSirTdlsDisappearAPInd->messageType = eWNI_SME_TDLS_AP_DISAPPEAR_IND;
+ pSirTdlsDisappearAPInd->length = sizeof(tSirTdlsDisappearAPInd);
+
+ //sessionId
+ pSirTdlsDisappearAPInd->sessionId = psessionEntry->smeSessionId;
+ pSirTdlsDisappearAPInd->staId = pStaDs->staIndex ;
+ palCopyMemory( pMac->hHdd, pSirTdlsDisappearAPInd->staAddr,
+ (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr));
+
+ mmhMsg.type = eWNI_SME_TDLS_AP_DISAPPEAR_IND;
+ mmhMsg.bodyptr = pSirTdlsDisappearAPInd;
+ mmhMsg.bodyval = 0;
+
+
+ limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
+}
+#endif
#endif
diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h
index 1ddfae2..9e7143c 100644
--- a/CORE/MAC/src/pe/lim/limTypes.h
+++ b/CORE/MAC/src/pe/lim/limTypes.h
@@ -746,6 +746,10 @@
tpPESession psessionEntry,
tANI_U32 txCompleteStatus);
tSirRetStatus limDeleteTDLSPeers(tpAniSirGlobal pMac, tpPESession psessionEntry);
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+void limTDLSDisappearAPTrickInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry);
+int limGetTDLSPeerCount(tpAniSirGlobal pMac, tpPESession psessionEntry);
+#endif
eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg, tpPESession);
tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac,
tSirMacAddr peerMac, tANI_U16 reason, tANI_U8 responder, tpPESession psessionEntry,
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 711292a..879369f 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -555,6 +555,9 @@
eCSR_ROAM_RESULT_DELETE_TDLS_PEER,
eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND,
eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND,
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND,
+#endif
#endif
}eCsrRoamResult;
diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c
index 08831f0..684627d 100644
--- a/CORE/SME/src/csr/csrTdlsProcess.c
+++ b/CORE/SME/src/csr/csrTdlsProcess.c
@@ -965,6 +965,19 @@
eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND);
break ;
}
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ case eWNI_SME_TDLS_AP_DISAPPEAR_IND:
+ {
+ tpSirTdlsDisappearAPInd pSirTdlsDisappearAPInd = (tpSirTdlsDisappearAPInd) pMsgBuf;
+ tCsrRoamInfo roamInfo = {0} ;
+ roamInfo.staId = pSirTdlsDisappearAPInd->staId ;
+ /* Sending the TEARDOWN indication to HDD. */
+ csrRoamCallCallback(pMac, pSirTdlsDisappearAPInd->sessionId, &roamInfo, 0,
+ eCSR_ROAM_TDLS_STATUS_UPDATE,
+ eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND);
+ break ;
+ }
+#endif
case eWNI_SME_TDLS_DEL_ALL_PEER_IND:
{
tpSirTdlsDelAllPeerInd pSirTdlsDelAllPeerInd = (tpSirTdlsDelAllPeerInd) pMsgBuf ;
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index c2b03b4..30b8687 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1716,6 +1716,9 @@
case eWNI_SME_TDLS_DEL_STA_IND:
case eWNI_SME_TDLS_DEL_ALL_PEER_IND:
case eWNI_SME_MGMT_FRM_TX_COMPLETION_IND:
+#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
+ case eWNI_SME_TDLS_AP_DISAPPEAR_IND:
+#endif
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eWNI_SME_TDLS_DISCOVERY_START_RSP:
case eWNI_SME_TDLS_DISCOVERY_START_IND: