summaryrefslogtreecommitdiff
path: root/wl1271/stad/src/Data_link/TrafficMonitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'wl1271/stad/src/Data_link/TrafficMonitor.c')
-rw-r--r--wl1271/stad/src/Data_link/TrafficMonitor.c1340
1 files changed, 0 insertions, 1340 deletions
diff --git a/wl1271/stad/src/Data_link/TrafficMonitor.c b/wl1271/stad/src/Data_link/TrafficMonitor.c
deleted file mode 100644
index 08f7f46..0000000
--- a/wl1271/stad/src/Data_link/TrafficMonitor.c
+++ /dev/null
@@ -1,1340 +0,0 @@
-/*
- * TrafficMonitor.c
- *
- * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name Texas Instruments nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/***************************************************************************/
-/* */
-/* MODULE: TrafficMonitor.c */
-/* PURPOSE: Traffic Monitor */
-/* */
-/***************************************************************************/
-#define __FILE_ID__ FILE_ID_55
-#include "TrafficMonitorAPI.h"
-#include "TrafficMonitor.h"
-#include "DataCtrl_Api.h"
-#include "osApi.h"
-#include "report.h"
-#include "timer.h"
-#include "DrvMainModules.h"
-
-
-/* Percentage of max down events test interval to use in our "traffic down" timer */
-#define MIN_INTERVAL_PERCENT 50
-
-/*#define TRAFF_TEST*/
-#ifdef TRAFF_TEST
-/*for TEST Function*/
-TI_HANDLE TestTrafficMonitor;
-TI_HANDLE TestEventTimer;
-TI_HANDLE Alert1;
-TI_HANDLE Alert2;
-TI_HANDLE Alert3;
-TI_HANDLE Alert4;
-void PrintElertStus();
-void TestEventFunc (TI_HANDLE hTrafficMonitor, TI_BOOL bTwdInitOccured);
-#endif
-
-
-/************************************************************************/
-/* Function prototype */
-/************************************************************************/
-static void TimerMonitor_TimeOut (TI_HANDLE hTrafficMonitor, TI_BOOL bTwdInitOccured);
-static void TrafficMonitor_updateBW(BandWidth_t *pBandWidth, TI_UINT32 uCurrentTS);
-static TI_UINT32 TrafficMonitor_calcBW(BandWidth_t *pBandWidth, TI_UINT32 uCurrentTS);
-static TI_BOOL isThresholdDown(TrafficAlertElement_t *AlertElement,TI_UINT32 CurrentTime);
-static TI_BOOL isThresholdUp(TrafficAlertElement_t *AlertElement , TI_UINT32 CurrentTime);
-static void SimpleByteAggregation(TI_HANDLE TraffElem,int Count);
-static void SimpleFrameAggregation(TI_HANDLE TraffElem,int Count);
-static TI_HANDLE TrafficMonitor_ExitFunc(TrafficMonitor_t *TrafficMonitor,TI_HANDLE hOs);
-static TI_STATUS FindRstElemEntryIndex (TrafficMonitor_t *TrafficMonitor,TrafficAlertElement_t *TrafficAlertElement,int *Index);
-static TI_STATUS TrafficMonitor_SetMask(TrafficMonitor_t *TrafficMonitor,TrafficAlertElement_t *TrafficAlertElement,TraffEvntOptNum_t MaskType);
-
-static void TrafficMonitor_UpdateDownTrafficTimerState (TI_HANDLE hTrafficMonitor);
-static void TrafficMonitor_ChangeDownTimerStatus (TI_HANDLE hTrafficMonitor, TI_UINT32 downEventsFound, TI_UINT32 minIntervalTime);
-
-/************************************************************************/
-/* TrafficMonitor_create */
-/************************************************************************/
-TI_HANDLE TrafficMonitor_create(TI_HANDLE hOs)
-{
- TrafficMonitor_t *TrafficMonitor;
-
- /* Allocate the data structure TrafficMonitor*/
- TrafficMonitor = (TrafficMonitor_t*)os_memoryAlloc(hOs, sizeof(TrafficMonitor_t));
- if (TrafficMonitor == NULL)
- return NULL;
-
- os_memoryZero(hOs,TrafficMonitor,sizeof(TrafficMonitor_t));
-
-#ifdef TRAFF_TEST
- TestEventTimer = NULL;
-#endif
-
- TrafficMonitor->hOs = hOs;
-
- /*Creates the list that will hold all the registered alert requests*/
- TrafficMonitor->NotificationRegList = List_create(hOs,MAX_MONITORED_REQ,sizeof(TrafficAlertElement_t));
- if (TrafficMonitor->NotificationRegList == NULL)
- return TrafficMonitor_ExitFunc(TrafficMonitor,hOs);
-
- return (TI_HANDLE)TrafficMonitor;
-}
-
-
-/************************************************************************/
-/* TrafficMonitor_ExitFunc */
-/************************************************************************/
-static TI_HANDLE TrafficMonitor_ExitFunc(TrafficMonitor_t *TrafficMonitor,TI_HANDLE hOs)
-{
- if (TrafficMonitor)
- {
- if(TrafficMonitor->hTrafficMonTimer)
- {
- tmr_DestroyTimer (TrafficMonitor->hTrafficMonTimer);
- }
- os_memoryFree(hOs, TrafficMonitor, sizeof(TrafficMonitor_t));
- }
- return NULL;
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_config */
-/************************************************************************/
-void TrafficMonitor_Init (TStadHandlesList *pStadHandles, TI_UINT32 BWwindowMs)
-{
- TrafficMonitor_t *TrafficMonitor = (TrafficMonitor_t *)(pStadHandles->hTrafficMon);
- TI_UINT32 uCurrTS = os_timeStampMs (TrafficMonitor->hOs);
-
- /* Create the base threshold timer that will serve all the down thresholds*/
- TrafficMonitor->hTrafficMonTimer = tmr_CreateTimer (pStadHandles->hTimer);
-
- TrafficMonitor->Active = TI_FALSE;
-
- TrafficMonitor->hRxData = pStadHandles->hRxData;
- TrafficMonitor->hTxCtrl = pStadHandles->hTxCtrl;
- TrafficMonitor->hTimer = pStadHandles->hTimer;
-
- /*Init All the bandwidth elements in the system */
- os_memoryZero(TrafficMonitor->hOs,&TrafficMonitor->DirectTxFrameBW,sizeof(BandWidth_t));
- os_memoryZero(TrafficMonitor->hOs,&TrafficMonitor->DirectRxFrameBW,sizeof(BandWidth_t));
- TrafficMonitor->DirectRxFrameBW.auFirstEventsTS[0] = uCurrTS;
- TrafficMonitor->DirectTxFrameBW.auFirstEventsTS[0] = uCurrTS;
-
- /*Registering to the RX module for notification.*/
- TrafficMonitor->RxRegReqHandle = rxData_RegNotif (pStadHandles->hRxData,
- DIRECTED_FRAMES_RECV,
- TrafficMonitor_Event,
- TrafficMonitor,
- RX_TRAFF_MODULE);
-
- /*Registering to the TX module for notification .*/
- TrafficMonitor->TxRegReqHandle = txCtrlParams_RegNotif (pStadHandles->hTxCtrl,
- DIRECTED_FRAMES_XFER,
- TrafficMonitor_Event,
- TrafficMonitor,
- TX_TRAFF_MODULE);
-
- TrafficMonitor->DownTimerEnabled = TI_FALSE;
- TrafficMonitor->trafficDownTestIntervalPercent = MIN_INTERVAL_PERCENT;
-
-#ifdef TRAFF_TEST
- TestTrafficMonitor = TrafficMonitor;
- TestEventTimer = tmr_CreateTimer (pStadHandles->hTimer);
- tmr_StartTimer (TestEventTimer, TestEventFunc, (TI_HANDLE)TrafficMonitor, 5000, TI_TRUE);
-#endif
-}
-
-/************************************************************************/
-/* TrafficMonitor_Start */
-/************************************************************************/
-TI_STATUS TrafficMonitor_Start(TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
- TI_UINT32 CurentTime;
-
-
- if(TrafficMonitor == NULL)
- return TI_NOK;
-
- /*starts the bandwidth TIMER*/
- if(!TrafficMonitor->Active) /*To prevent double call to timer start*/
- {
- TrafficMonitor_UpdateDownTrafficTimerState (TrafficMonitor);
- }
-
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
- CurentTime = os_timeStampMs(TrafficMonitor->hOs);
-
- /* go over all the Down elements and reload the timer*/
- while(AlertElement)
- {
- if(AlertElement->CurrentState != ALERT_WAIT_FOR_RESET)
- {
- AlertElement->EventCounter = 0;
- AlertElement->TimeOut = AlertElement->TimeIntervalMs + CurentTime;
- }
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
- TrafficMonitor->Active = TI_TRUE;
-
- return TI_OK;
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_Stop */
-/************************************************************************/
-TI_STATUS TrafficMonitor_Stop(TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *pTrafficMonitor = (TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
-
- if (pTrafficMonitor == NULL)
- {
- return TI_NOK;
- }
-
- if (pTrafficMonitor->Active) /*To prevent double call to timer stop*/
- {
-
- pTrafficMonitor->Active = TI_FALSE;
-
- pTrafficMonitor->DownTimerEnabled = TI_FALSE;
- tmr_StopTimer (pTrafficMonitor->hTrafficMonTimer);
- }
-
- /* Set all events state to ALERT_OFF to enable them to "kick" again once after TrafficMonitor is started */
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(pTrafficMonitor->NotificationRegList);
-
- while(AlertElement)
- {
- AlertElement->CurrentState = ALERT_OFF;
- AlertElement = (TrafficAlertElement_t*)List_GetNext(pTrafficMonitor->NotificationRegList);
- }
-
- return TI_OK;
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_Destroy */
-/************************************************************************/
-TI_STATUS TrafficMonitor_Destroy(TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *TrafficMonitor = (TrafficMonitor_t*)hTrafficMonitor;
-
- if (TrafficMonitor)
- {
- /*Unregister from the RX/TX module for the required notification*/
- txCtrlParams_UnRegNotif(TrafficMonitor->hTxCtrl,TrafficMonitor->TxRegReqHandle);
- rxData_UnRegNotif(TrafficMonitor->hRxData,TrafficMonitor->RxRegReqHandle);
-
- if(TrafficMonitor->NotificationRegList)
- {
- List_Destroy(TrafficMonitor->NotificationRegList);
- }
-
- if(TrafficMonitor->hTrafficMonTimer)
- {
- tmr_DestroyTimer (TrafficMonitor->hTrafficMonTimer);
- }
-
-#ifdef TRAFF_TEST
- if (TestEventTimer)
- {
- tmr_DestroyTimer (TestEventTimer);
- }
-#endif
-
- os_memoryFree(TrafficMonitor->hOs, TrafficMonitor, sizeof(TrafficMonitor_t));
-
- return TI_OK;
- }
-
- return TI_NOK;
-}
-
-
-/***********************************************************************
- * TrafficMonitor_RegEvent
- ***********************************************************************
-DESCRIPTION: Reg event processing function, Perform the following:
-
-
-INPUT: hTrafficMonitor - Traffic Monitor the object.
-
- TrafficAlertRegParm - structure which include values to set for
- the requested Alert event
-
- AutoResetCreate - is only relevant to edge alerts.
- If AutoResetCreate flag is set to true then the registration function will create a conjunction reset element automatic
- this reset element will be with the same threshold but opposite in direction
-
- If AutoResetCreate flag is set to false then the reset element will be supplied afterward by the user with the function
- TrafficMonitor_SetRstCondition() the alert will not be active till the reset function will be set.
-
-OUTPUT:
-
-RETURN: TrafficAlertElement pointer on success, NULL otherwise
-
-************************************************************************/
-TI_HANDLE TrafficMonitor_RegEvent(TI_HANDLE hTrafficMonitor,TrafficAlertRegParm_t *TrafficAlertRegParm,TI_BOOL AutoResetCreate)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement;
- TI_UINT32 CurentTime ;
-
- if(TrafficMonitor == NULL)
- return NULL;
-
- CurentTime = os_timeStampMs(TrafficMonitor->hOs);
-
- /*Gets a TrafficAlertElement_t memory from the list to assign to the registered request*/
- TrafficAlertElement = (TrafficAlertElement_t*)List_AllocElement(TrafficMonitor->NotificationRegList);
- if (TrafficAlertElement == NULL)
- { /* add print*/
- return NULL ;
- }
-
- /*Init the alert element with the registered parameters.*/
- TrafficAlertElement->CallBack = TrafficAlertRegParm->CallBack;
- TrafficAlertElement->Context = TrafficAlertRegParm->Context;
- TrafficAlertElement->Cookie = TrafficAlertRegParm->Cookie;
- TrafficAlertElement->Direction = TrafficAlertRegParm->Direction;
- TrafficAlertElement->Threshold = TrafficAlertRegParm->Threshold;
- TrafficAlertElement->Trigger = TrafficAlertRegParm->Trigger;
- TrafficAlertElement->TimeIntervalMs = TrafficAlertRegParm->TimeIntervalMs;
- TrafficAlertElement->TimeOut = CurentTime + TrafficAlertRegParm->TimeIntervalMs;
- TrafficAlertElement->EventCounter = 0;
- TrafficMonitor_SetMask(TrafficMonitor,TrafficAlertElement,TrafficAlertRegParm->MonitorType);
-
- TrafficAlertElement->CurrentState = ALERT_OFF;
- TrafficAlertElement->AutoCreated = TI_FALSE;
- TrafficAlertElement->Enabled = TI_FALSE;
- /*In case that this is an Edge alert there is a need for a reset condition element*/
- /*corresponding to the Alert request but opposite in the direction.*/
- /*Note that the reset condition for this (new) reset element, is the Alert Element it self.*/
- if(TrafficAlertElement->Trigger == TRAFF_EDGE)
- {
- if(AutoResetCreate)
- {
- /*Gets a TrafficAlertElement_t memory from the list to assign to the reset elemnt*/
- TrafficAlertElement->ResetElment[0] = (TrafficAlertElement_t*)List_AllocElement(TrafficMonitor->NotificationRegList);
- if( TrafficAlertElement->ResetElment[0] == NULL)
- {
- List_FreeElement(TrafficMonitor->NotificationRegList,TrafficAlertElement);
- return NULL;
- }
-
- /*
- copy the Traffic Element init params to the reset Elemnt Except for
- the direction and the call back that is set to null the CurrentState set to disable.
- And the reset condition,that points to the muster alert.
- */
- os_memoryCopy(TrafficMonitor->hOs,TrafficAlertElement->ResetElment[0],TrafficAlertElement,sizeof(TrafficAlertElement_t));
- TrafficAlertElement->ResetElment[0]->CallBack = NULL;
- /*opposite in the direction from the TrafficAlertElement->Direction*/
- if (TrafficAlertRegParm->Direction == TRAFF_UP)
- TrafficAlertElement->ResetElment[0]->Direction = TRAFF_DOWN;
- else
- TrafficAlertElement->ResetElment[0]->Direction = TRAFF_UP;
- TrafficAlertElement->ResetElment[0]->CurrentState = ALERT_WAIT_FOR_RESET;
- TrafficAlertElement->ResetElment[0]->ResetElment[0] = TrafficAlertElement;
- TrafficAlertElement->ResetElment[0]->AutoCreated = TI_TRUE;
-
- TrafficAlertElement->ResetElment[0]->RstWasAssigned = TI_TRUE;
- TrafficAlertElement->RstWasAssigned = TI_TRUE;
-
- }
- else/* The reset element will be supplied afterward by the user in the meanwhile disable the alert till then*/
- {
- TrafficAlertElement->RstWasAssigned = TI_FALSE;
- TrafficAlertElement->CurrentState = ALERT_WAIT_FOR_RESET;
- }
-
- }
-
- TrafficMonitor_UpdateDownTrafficTimerState (TrafficMonitor);
-
- return TrafficAlertElement;
-}
-
-
-/************************************************************************/
-/* FindRstElemEntryIndex */
-/************************************************************************/
-/* Gets a TrafficAlertElement_t memory from the list to assign to the reset elemnt
- * for internal use
- ************************************************************************/
-static TI_STATUS FindRstElemEntryIndex (TrafficMonitor_t *TrafficMonitor,TrafficAlertElement_t *TrafficAlertElement,int *Index)
-{
- int i;
- /*Find an empty Rst element entry*/
- for(i=0;(i<MAX_RST_ELMENT_PER_ALERT) && TrafficAlertElement->ResetElment[i];i++);
- if(i == MAX_RST_ELMENT_PER_ALERT)
- return TI_NOK;
- *Index = i;
- return TI_OK;
-}
-
-/************************************************************************/
-/* TrafficMonitor_SetMask */
-/************************************************************************/
-/*
- * Convert the Mask from the types that declared in the
- * TrafficMonitorAPI to the types that are used in the Rx Tx modules.
- * And update the TX and RX module of the new event req
- * Sets the aggregation function that corresponds to the specific mask type
- ************************************************************************/
-static TI_STATUS TrafficMonitor_SetMask(TrafficMonitor_t *TrafficMonitor,TrafficAlertElement_t *TrafficAlertElement,TraffEvntOptNum_t MaskType)
-{
- TI_UINT32 TxMask = 0;
- TI_UINT32 RxMask = 0;
-
- switch(MaskType) {
- case TX_RX_DIRECTED_FRAMES:
- TxMask = DIRECTED_FRAMES_XFER;
- RxMask = DIRECTED_FRAMES_RECV;
- TrafficAlertElement->ActionFunc = SimpleFrameAggregation;
- break;
- case TX_ALL_MSDU_FRAMES:
- TxMask = DIRECTED_FRAMES_XFER|MULTICAST_FRAMES_XFER|BROADCAST_FRAMES_XFER;
- TrafficAlertElement->ActionFunc = SimpleFrameAggregation;
- break;
- case RX_ALL_MSDU_FRAMES:
- RxMask = DIRECTED_FRAMES_RECV|MULTICAST_FRAMES_RECV|BROADCAST_FRAMES_RECV;
- TrafficAlertElement->ActionFunc = SimpleFrameAggregation;
- break;
- case TX_RX_ALL_MSDU_FRAMES:
- TxMask = DIRECTED_FRAMES_XFER|MULTICAST_FRAMES_XFER|BROADCAST_FRAMES_XFER;
- RxMask = DIRECTED_FRAMES_RECV|MULTICAST_FRAMES_RECV|BROADCAST_FRAMES_RECV;
- TrafficAlertElement->ActionFunc = SimpleFrameAggregation;
- break;
- case TX_RX_ALL_MSDU_IN_BYTES:
- TxMask = DIRECTED_BYTES_XFER|MULTICAST_BYTES_XFER|BROADCAST_BYTES_XFER;
- RxMask = DIRECTED_BYTES_RECV|MULTICAST_BYTES_RECV|BROADCAST_BYTES_RECV;
- TrafficAlertElement->ActionFunc = SimpleByteAggregation;
- break;
- case TX_RX_DIRECTED_IN_BYTES:
- TxMask = DIRECTED_BYTES_XFER;
- RxMask = DIRECTED_BYTES_RECV;
- TrafficAlertElement->ActionFunc = SimpleByteAggregation;
- break;
- case TX_RX_ALL_802_11_DATA_IN_BYTES:
- TxMask = DIRECTED_BYTES_XFER | MULTICAST_BYTES_XFER;
- RxMask = DIRECTED_BYTES_RECV | MULTICAST_BYTES_RECV;
- TrafficAlertElement->ActionFunc = SimpleByteAggregation;
- break;
- case TX_RX_ALL_802_11_DATA_FRAMES:
- TxMask = DIRECTED_FRAMES_XFER | MULTICAST_FRAMES_XFER;
- RxMask = DIRECTED_FRAMES_RECV | MULTICAST_FRAMES_RECV;
- TrafficAlertElement->ActionFunc = SimpleFrameAggregation;
- break;
- default:
- WLAN_OS_REPORT(("TrafficMonitor_SetMask - unknown parameter: %d\n", MaskType));
- return TI_NOK;
- }
-
-
- if(RxMask)
- {
- TrafficAlertElement->MonitorMask[RX_TRAFF_MODULE] = RxMask;
- if(rxData_AddToNotifMask(TrafficMonitor->hRxData,TrafficMonitor->RxRegReqHandle,RxMask) == TI_NOK)
- return TI_NOK;
- }
-
- if(TxMask)
- {
- TrafficAlertElement->MonitorMask[TX_TRAFF_MODULE] = TxMask;
- if(txCtrlParams_AddToNotifMask(TrafficMonitor->hTxCtrl,TrafficMonitor->TxRegReqHandle,TxMask) == TI_NOK)
- return TI_NOK;
- }
-
- return TI_OK;
-}
-
-
-/***********************************************************************
- * TrafficMonitor_SetRstCondition
- ***********************************************************************
-DESCRIPTION: Reg event processing function, Perform the following:
- Sets the given reset element to the Alert element.
- if MutualRst is set, then The operation is done vise versa .
-
-INPUT: hTrafficMonitor - Traffic Monitor the object.
-
- EventHandle - Alert event
-
- ResetEventHandle Alert Event that will be used to as the rest for above.
-
- MutualRst - if the 2 elements are used to reset One another.
-
-NOTE If the reset element event condition is the same as the alert element the user
- have to check the that threshold is bigger or smaller according to the direction
- else it can create a deadlock
-
-OUTPUT:
-
-RETURN: TI_OK on success, TI_NOK otherwise
-
-************************************************************************/
-TI_STATUS TrafficMonitor_SetRstCondition(TI_HANDLE hTrafficMonitor, TI_HANDLE EventHandle,TI_HANDLE ResetEventHandle,TI_BOOL MutualRst)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
- TrafficAlertElement_t *TrafficResetAlertElement = (TrafficAlertElement_t*)ResetEventHandle;
- int i,x;
- TI_UINT32 CurentTime ;
-
- if((TrafficMonitor == NULL) || (EventHandle == NULL) || (TrafficResetAlertElement == NULL))
- return TI_NOK;
-
-
- CurentTime = os_timeStampMs(TrafficMonitor->hOs);
-
- /*
- Check that validity of the reset condition
- 1.The reset condition is edge.
- 2.The direction is opposite from the main alert.
- 3.The threshold is bigger or smaller according to the direction
- This condition is not checked but the user have check it else it can create a deadlock..
- */
- if((TrafficResetAlertElement->Trigger != TRAFF_EDGE) || (TrafficAlertElement->Trigger != TRAFF_EDGE))
- return TI_NOK;
- if(TrafficResetAlertElement->Direction == TrafficAlertElement->Direction)
- return TI_NOK;
-
-
- /*Find an empty Rst element entry*/
- if(FindRstElemEntryIndex(TrafficMonitor,TrafficResetAlertElement,&i) == TI_NOK)
- return TI_NOK;
-
- TrafficResetAlertElement->ResetElment[i] = TrafficAlertElement;
-
- /*if we know for sure that No Rst Element was assigned
- therefore that element was in disable mode and we have to enable it.*/
- if (!(TrafficAlertElement->RstWasAssigned))
- {
- TrafficAlertElement->RstWasAssigned = TI_TRUE;
- TrafficAlertElement->CurrentState = ALERT_OFF;
- TrafficAlertElement->TimeOut = CurentTime + TrafficAlertElement->TimeIntervalMs;
- TrafficAlertElement->EventCounter =0;
- }
-
-
- if(MutualRst)
- {
- /*Find an empty Rst element entry in the TempRstAlertElement*/
- if(FindRstElemEntryIndex(TrafficMonitor,TrafficAlertElement,&x) == TI_NOK)
- {
- /*this clean up is not complete*/
- TrafficResetAlertElement->ResetElment[i] = NULL;
- return TI_NOK;
- }
-
- TrafficAlertElement->ResetElment[x] = TrafficResetAlertElement;
- /*if know for sure that No Rst Element was assigned
- therefore that element was in disable mode and we have to enable it.*/
- if (!(TrafficResetAlertElement->RstWasAssigned))
- {
- TrafficResetAlertElement->RstWasAssigned = TI_TRUE;
- TrafficResetAlertElement->CurrentState = ALERT_OFF;
- TrafficResetAlertElement->TimeOut = CurentTime + TrafficAlertElement->TimeIntervalMs;
- TrafficResetAlertElement->EventCounter = 0;
- }
- }
- return TI_OK;
-}
-
-
-/************************************************************************/
-/* TrafficMonitor_CleanRelatedRef */
-/************************************************************************/
-void TrafficMonitor_CleanRelatedRef(TrafficMonitor_t *TrafficMonitor,TrafficAlertElement_t *TrafficAlertElement)
-{
-
- int i;
- TrafficAlertElement_t *AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
-
- /* go over all the Down elements and check for alert ResetElment that ref to TrafficAlertElement*/
- while(AlertElement)
- {
- for(i=0;i<MAX_RST_ELMENT_PER_ALERT;i++)
- {
- if(AlertElement->ResetElment[i] == TrafficAlertElement)
- AlertElement->ResetElment[i] = NULL;
- }
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_StopNotif */
-/************************************************************************/
-void TrafficMonitor_StopEventNotif(TI_HANDLE hTrafficMonitor,TI_HANDLE EventHandle)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
-
- if(TrafficMonitor == NULL)
- return ;
-
- if(TrafficAlertElement == NULL)
- return ;
-
- TrafficAlertElement->Enabled = TI_FALSE;
- TrafficMonitor_UpdateDownTrafficTimerState (hTrafficMonitor);
-
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_StartNotif */
-/************************************************************************/
-void TrafficMonitor_StartEventNotif(TI_HANDLE hTrafficMonitor, TI_HANDLE EventHandle)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
-
- if(TrafficMonitor == NULL)
- return ;
-
- if(TrafficAlertElement == NULL)
- return ;
-
- TrafficAlertElement->Enabled = TI_TRUE;
- TrafficMonitor_UpdateDownTrafficTimerState (hTrafficMonitor);
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_StartNotif */
-/************************************************************************/
-void TrafficMonitor_ResetEvent(TI_HANDLE hTrafficMonitor, TI_HANDLE EventHandle)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
-
- if(TrafficMonitor == NULL)
- return ;
-
- if(TrafficAlertElement == NULL)
- return ;
-
- TrafficAlertElement->CurrentState = ALERT_OFF;
-
- TrafficMonitor_UpdateDownTrafficTimerState (TrafficMonitor);
-}
-
-
-
-/************************************************************************/
-/* TrafficMonitor_UnregEvent */
-/************************************************************************/
-void TrafficMonitor_UnregEvent(TI_HANDLE hTrafficMonitor, TI_HANDLE EventHandle)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
-
- if(TrafficMonitor == NULL)
- return ;
-
- /*If it was an edge alert then there can be one more alert element to free.*/
- /*one is the alert, and the second is the reset element that corresponds to this alert*/
- /*if it was Auto Created*/
- if (TrafficAlertElement->ResetElment[0])
- if (TrafficAlertElement->ResetElment[0]->AutoCreated)
- List_FreeElement(TrafficMonitor->NotificationRegList,TrafficAlertElement->ResetElment);
-
- TrafficMonitor_CleanRelatedRef(TrafficMonitor,TrafficAlertElement);
-
- List_FreeElement(TrafficMonitor->NotificationRegList,EventHandle);
-
- TrafficMonitor_UpdateDownTrafficTimerState (TrafficMonitor);
-}
-
-
-
-/***********************************************************************
- * isThresholdUp
- ***********************************************************************
-DESCRIPTION: Evaluate if alert element as crossed his threshold
- if yes it operate the callback registered for this alert and take care of the alert state.
- For alert with UP direction the following algorithm is preformed
- If the threshold is passed in the req time interval or less. then
- For Level
- The alert mode is changed to ON & the next timeout is set to the next interval.
- For Edge
- The alert mode is changed to wait for reset and the reset element is set to off.
- And his timeout is set
-
-INPUT:
- EventHandle - Alert event
- CurrentTime - the current time Time stamp
-
-OUTPUT:
-
-RETURN: If threshold crossed TI_TRUE else False
-
-************************************************************************/
-static TI_BOOL isThresholdUp(TrafficAlertElement_t *AlertElement , TI_UINT32 CurrentTime)
-{
- int i;
-
- if (AlertElement->TimeOut < CurrentTime)
- {
- AlertElement->EventCounter = AlertElement->LastCounte;
- AlertElement->TimeOut = CurrentTime + AlertElement->TimeIntervalMs;
- }
-
- if (AlertElement->EventCounter > AlertElement->Threshold)
- {
- AlertElement->EventCounter = 0;
- /*Sets the new due time (time out)*/
- AlertElement->TimeOut = CurrentTime + AlertElement->TimeIntervalMs;
-
- /*For Edge alert change the alert status to wait for reset and
- The corresponding reset element from wait for reset To off.
- That way toggling the two elements*/
- if(AlertElement->Trigger == TRAFF_EDGE)
- {
- AlertElement->CurrentState = ALERT_WAIT_FOR_RESET;
- for(i=0;i<MAX_RST_ELMENT_PER_ALERT;i++)
- {
- TrafficAlertElement_t *rstElmt = AlertElement->ResetElment[i];
- if(rstElmt != NULL)
- if(rstElmt->CurrentState == ALERT_WAIT_FOR_RESET)
- {
- rstElmt->CurrentState = ALERT_OFF;
- rstElmt->EventCounter = 0;
- rstElmt->TimeOut = CurrentTime + rstElmt->TimeIntervalMs;
- }
- }
- }
- else
- AlertElement->CurrentState = ALERT_ON;
-
- /*Call the callback function*/
- if((AlertElement->CallBack != NULL) && AlertElement->Enabled)
- AlertElement->CallBack(AlertElement->Context,AlertElement->Cookie);
- return TI_TRUE;
- }
-
- return TI_FALSE;
-}
-
-
-
-/***********************************************************************
- * isThresholdDown
- ***********************************************************************
-DESCRIPTION: Evaluate if alert element as crossed his threshold
- if yes it operate the callback registered for this alert and take care of the alert state.
- For alert with DOWN direction the following algorithm is preformed
- If the threshold is passed (EventCounter < Threshold) in the req time only. then
- For Level
- The alert mode is changed to ON & the next timeout is set to the next interval.
- If the alert condition will still be on.then the next alert will be in the next time interval
- For Edge
- The alert mode is changed to wait for reset and the reset element is set to off.
- And his timeout is set.
-
-INPUT:
- EventHandle - Alert event
- CurrentTime - the current time Time stamp
-
-OUTPUT:
-
-RETURN: If threshold crossed TI_TRUE else False
-
-************************************************************************/
-static TI_BOOL isThresholdDown(TrafficAlertElement_t *AlertElement , TI_UINT32 CurrentTime)
-{
- int i;
- TI_BOOL returnVal = TI_FALSE;
-
- /*
- if its end of window time.
- */
- if (AlertElement->TimeOut <= CurrentTime)
- {
- /*
- if there was a down edge event.
- */
- if (AlertElement->EventCounter <= AlertElement->Threshold)
- {
- /*For Edge alert change the alert status to wait for reset and
- The corresponding reset element from wait for reset To off.
- That way toggling the two elements*/
- if(AlertElement->Trigger == TRAFF_EDGE)
- {
- AlertElement->CurrentState = ALERT_WAIT_FOR_RESET;
- for(i=0;i<MAX_RST_ELMENT_PER_ALERT;i++)
- {
- TrafficAlertElement_t *rstElmt = AlertElement->ResetElment[i];
- if(rstElmt != NULL)
- if(rstElmt->CurrentState == ALERT_WAIT_FOR_RESET)
- {
- rstElmt->CurrentState = ALERT_OFF;
- rstElmt->EventCounter = 0;
- rstElmt->TimeOut = CurrentTime + rstElmt->TimeIntervalMs;
- }
- }
- }
- else
- AlertElement->CurrentState = ALERT_ON;
-
- /*Call the callback function*/
- if((AlertElement->CallBack != NULL) && AlertElement->Enabled)
- AlertElement->CallBack(AlertElement->Context,AlertElement->Cookie);
-
- returnVal = TI_TRUE;
- }
-
- /* end of time window - clear the event counter for the new window.*/
- AlertElement->EventCounter = 0;
- /*Sets the new due time (time out)*/
- AlertElement->TimeOut = CurrentTime + AlertElement->TimeIntervalMs;
- }
- else
- {
- /*
- In case we find out that the alert condition will not Occur for this frame window,
- therefor start a new alert examine cycle (the next farme window).
- (Not wait till the timeout of this current frame window)
- */
- if(AlertElement->EventCounter > AlertElement->Threshold)
- {
- AlertElement->EventCounter = 0;
- AlertElement->TimeOut = CurrentTime + AlertElement->TimeIntervalMs;
- }
- }
- return returnVal;
-}
-
-
-
-/************************************************************************/
-/* TimerMonitor_TimeOut */
-/************************************************************************/
-/*
- * Timer function that is called for every x time interval
- * That will invoke a process if any down limit as occurred.
- *
- ************************************************************************/
-static void TimerMonitor_TimeOut (TI_HANDLE hTrafficMonitor, TI_BOOL bTwdInitOccured)
-{
-
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
- TI_UINT32 CurentTime;
- TI_UINT32 activeTrafDownEventsNum = 0;
- TI_UINT32 trafficDownMinTimeout = 0xFFFFFFFF;
-
- if(TrafficMonitor == NULL)
- return;
-
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
- CurentTime = os_timeStampMs(TrafficMonitor->hOs);
-
-
- /* go over all the Down elements and check for alert */
- while(AlertElement)
- {
- if(AlertElement->CurrentState != ALERT_WAIT_FOR_RESET)
- {
- if (AlertElement->Direction == TRAFF_DOWN)
- {
- isThresholdDown(AlertElement,CurentTime);
- }
- }
-
- if ((AlertElement->Direction == TRAFF_DOWN) && (AlertElement->Trigger == TRAFF_EDGE) && (AlertElement->CurrentState == ALERT_OFF) && (AlertElement->Enabled == TI_TRUE))
-{
- /* Increase counter of active traffic down events */
- activeTrafDownEventsNum++;
-
- /* Search for the alert with the most short Interval time - will be used to start timer */
- if ((AlertElement->TimeIntervalMs) < (trafficDownMinTimeout))
- trafficDownMinTimeout = AlertElement->TimeIntervalMs;
- }
-
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
-
- TrafficMonitor_ChangeDownTimerStatus (TrafficMonitor,activeTrafDownEventsNum,trafficDownMinTimeout);
-
-}
-
-/***********************************************************************
- * TrafficMonitor_IsEventOn
- ***********************************************************************
-DESCRIPTION: Returns the current status of an event element.
-
-INPUT: TrafficAlertElement_t
-
-
-OUTPUT: bool
-
-RETURN: True = ON false = OFF
-
-************************************************************************/
-TI_BOOL TrafficMonitor_IsEventOn(TI_HANDLE EventHandle)
-{
- TrafficAlertElement_t *TrafficAlertElement = (TrafficAlertElement_t*)EventHandle;
-
- if(TrafficAlertElement == NULL)
- return TI_FALSE;
-
-
- if (TrafficAlertElement->CurrentState == ALERT_OFF)
- return TI_FALSE;
- else
- return TI_TRUE;
-
-}
-
-
-
-/***********************************************************************
- * TrafficMonitor_GetFrameBandwidth
- ***********************************************************************
-DESCRIPTION: Returns the total direct frames in the Rx and Tx per second.
-
-INPUT: hTrafficMonitor - Traffic Monitor the object.
-
-
-OUTPUT:
-
-RETURN: Total BW
-************************************************************************/
-int TrafficMonitor_GetFrameBandwidth(TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *pTrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TI_UINT32 uCurentTS;
-
- if(pTrafficMonitor == NULL)
- return TI_NOK;
-
- uCurentTS = os_timeStampMs(pTrafficMonitor->hOs);
-
- /* Calculate BW for Rx & Tx */
- return ( TrafficMonitor_calcBW(&pTrafficMonitor->DirectRxFrameBW, uCurentTS) +
- TrafficMonitor_calcBW(&pTrafficMonitor->DirectTxFrameBW, uCurentTS) );
-}
-
-/***********************************************************************
-* TrafficMonitor_updateBW
-***********************************************************************
-DESCRIPTION: Upon receiving an event of Tx/Rx (a packet was sent or received), This function is
- called and performs BW calculation.
-
-INPUT:
- pBandWidth - BW of Rx or Tx
- uCurrentTS - current TS of the recent event
-
-OUTPUT: pBandWidth - updated counters and TS
-
-************************************************************************/
-void TrafficMonitor_updateBW(BandWidth_t *pBandWidth, TI_UINT32 uCurrentTS)
-{
- /* Check if we should move to the next window */
- if ( (uCurrentTS - pBandWidth->auFirstEventsTS[pBandWidth->uCurrentWindow]) < (SIZE_OF_WINDOW_MS) )
- {
- pBandWidth->auWindowCounter[pBandWidth->uCurrentWindow]++;
- }
- else /* next window */
- {
- /* increment current window and mark the first event received */
- pBandWidth->uCurrentWindow = (pBandWidth->uCurrentWindow + 1) & CYCLIC_COUNTER_ELEMENT;
- pBandWidth->auFirstEventsTS[pBandWidth->uCurrentWindow] = uCurrentTS;
- pBandWidth->auWindowCounter[pBandWidth->uCurrentWindow] = 1;
- }
-}
-/***********************************************************************
-* TrafficMonitor_calcBW
-***********************************************************************
-DESCRIPTION: Returns the total direct frames in Rx or Tx.
- It is called when outside module request the BW.
- Calculate band width by summing up the sliding windows.
-
-INPUT: pBandWidth - BW of Rx or Tx
- uCurrentTS - current TS
-
-RETURN: Total BW
-************************************************************************/
-TI_UINT32 TrafficMonitor_calcBW(BandWidth_t *pBandWidth, TI_UINT32 uCurrentTS)
-{
- TI_UINT32 uTotalTime = uCurrentTS - pBandWidth->auFirstEventsTS[pBandWidth->uCurrentWindow];
- TI_UINT32 uTotalBW = 0;
- TI_INT32 iter = (TI_INT32)pBandWidth->uCurrentWindow;
- TI_INT32 iNextIter = (iter - 1) & CYCLIC_COUNTER_ELEMENT; /* Always one less than i */
-
- /* As long as the summed windows are less than BW_WINDOW_MS and we didn't loop the whole array */
- while ( (uTotalTime < BW_WINDOW_MS) && (iNextIter != pBandWidth->uCurrentWindow))
- {
- uTotalBW += pBandWidth->auWindowCounter[iter];
- /* add next window time - next loop will check if we exceeded the BW window */
- uTotalTime = uCurrentTS - pBandWidth->auFirstEventsTS[iNextIter];
-
- iter = iNextIter;
- iNextIter = (iter - 1) & CYCLIC_COUNTER_ELEMENT;
- } ;
-
- /*
- * Note that if (iNextIter == pBandWidth->uCurrentWindow) than the calculated BW could be up to
- * SIZE_OF_WINDOW_MS less than BW_WINDOW_MS
- */
- return uTotalBW;
-}
-
-
-/***********************************************************************
- * TrafficMonitor_Event
- ***********************************************************************
-DESCRIPTION: this function is called for every event that was requested from the Tx or Rx
- The function preformes update of the all the relevant Alert in the system
- that corresponds to the event. checks the Alert Status due to this event.
-
-
-
-INPUT: hTrafficMonitor - Traffic Monitor the object.
-
- Count - evnet count.
- Mask - the event mask that That triggered this function.
-
- MonitorModuleType Will hold the module type from where this function was called.
-
-OUTPUT:
-
-RETURN:
-
-************************************************************************/
-void TrafficMonitor_Event(TI_HANDLE hTrafficMonitor,int Count,TI_UINT16 Mask,TI_UINT32 MonitorModuleType)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
- TI_UINT32 activeTrafDownEventsNum = 0;
- TI_UINT32 trafficDownMinTimeout = 0xFFFFFFFF;
- TI_UINT32 uCurentTS;
-
- if(TrafficMonitor == NULL)
- return;
-
- if(!TrafficMonitor->Active)
- return;
-
- uCurentTS = os_timeStampMs(TrafficMonitor->hOs);
-
- /* for BW calculation */
- if(MonitorModuleType == RX_TRAFF_MODULE)
- {
- if(Mask & DIRECTED_FRAMES_RECV)
- {
- TrafficMonitor_updateBW(&TrafficMonitor->DirectRxFrameBW, uCurentTS);
- }
- }
- else if (MonitorModuleType == TX_TRAFF_MODULE)
- {
- if(Mask & DIRECTED_FRAMES_XFER)
- {
- TrafficMonitor_updateBW(&TrafficMonitor->DirectTxFrameBW, uCurentTS);
- }
- }
- else
- {
- return; /* module type does not exist, error return */
- }
-
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
-
- /* go over all the elements and check for alert */
- while(AlertElement)
- {
- if(AlertElement->CurrentState != ALERT_WAIT_FOR_RESET)
- {
- if(AlertElement->MonitorMask[MonitorModuleType] & Mask)
- {
- AlertElement->ActionFunc(AlertElement,Count);
- if (AlertElement->Direction == TRAFF_UP)
- {
- isThresholdUp(AlertElement, uCurentTS);
- }
- }
-
- if ((AlertElement->Direction == TRAFF_DOWN) && (AlertElement->Trigger == TRAFF_EDGE) && (AlertElement->CurrentState == ALERT_OFF) && (AlertElement->Enabled == TI_TRUE))
- {
- /* Increase counter of active traffic down events */
- activeTrafDownEventsNum++;
-
- /* Search for the alert with the most short Interval time - will be used to start timer */
- if ((AlertElement->TimeIntervalMs) < (trafficDownMinTimeout))
- trafficDownMinTimeout = AlertElement->TimeIntervalMs;
- }
-
- }
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
-
- TrafficMonitor_ChangeDownTimerStatus (TrafficMonitor,activeTrafDownEventsNum,trafficDownMinTimeout);
-
-}
-
-
-/*
- * Used as the aggregation function that is used by the alerts for counting the events.
- */
-static void SimpleByteAggregation(TI_HANDLE TraffElem,int Count)
-{
- TrafficAlertElement_t *AlertElement = TraffElem;
- AlertElement->EventCounter += Count;
- AlertElement->LastCounte = Count;
-}
-
-
-/*
- * Used as the aggregation function for frame. (count is not used)
- */
-static void SimpleFrameAggregation(TI_HANDLE TraffElem,int Count)
-{
- TrafficAlertElement_t *AlertElement = TraffElem;
- AlertElement->EventCounter++;
- AlertElement->LastCounte = 1;
-}
-
-/*-----------------------------------------------------------------------------
-Routine Name: TrafficMonitor_UpdateDownTrafficTimerState
-Routine Description: called whenever a "down" alert is called, or any other change in the alert list.
- used to either start or stop the "traffic down" timer.
- loops through alert list, searches for active traffic down events.
-Arguments:
-Return Value:
------------------------------------------------------------------------------*/
-static void TrafficMonitor_UpdateDownTrafficTimerState (TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
- TI_UINT32 activeTrafDownEventsNum = 0;
- TI_UINT32 trafficDownMinTimeout = 0xFFFFFFFF;
-
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
-
- while(AlertElement)
- {
-
- if ((AlertElement->Direction == TRAFF_DOWN) && (AlertElement->Trigger == TRAFF_EDGE) && (AlertElement->CurrentState == ALERT_OFF) && (AlertElement->Enabled == TI_TRUE))
- {
- /* Increase counter of active traffic down events */
- activeTrafDownEventsNum++;
-
- /* Search for the alert with the most short Interval time - will be used to start timer */
- if ((AlertElement->TimeIntervalMs) < (trafficDownMinTimeout))
- trafficDownMinTimeout = AlertElement->TimeIntervalMs;
- }
-
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
-
- }
-
- TrafficMonitor_ChangeDownTimerStatus (TrafficMonitor,activeTrafDownEventsNum,trafficDownMinTimeout);
-
-}
-
-/*-----------------------------------------------------------------------------
-Routine Name: TrafficMonitor_ChangeDownTimerStatus
-Routine Description: Start or stop down traffic timer according to number of down events found and minInterval time.
-Arguments:
-Return Value:
------------------------------------------------------------------------------*/
-static void TrafficMonitor_ChangeDownTimerStatus (TI_HANDLE hTrafficMonitor, TI_UINT32 downEventsFound, TI_UINT32 minIntervalTime)
-{
- TrafficMonitor_t *pTrafficMonitor = (TrafficMonitor_t*)hTrafficMonitor;
-
- if ((downEventsFound == 0) && pTrafficMonitor->DownTimerEnabled)
- {
- pTrafficMonitor->DownTimerEnabled = TI_FALSE;
- tmr_StopTimer (pTrafficMonitor->hTrafficMonTimer);
- os_wake_unlock(pTrafficMonitor->hOs);
- }
- else if ((downEventsFound > 0) && (pTrafficMonitor->DownTimerEnabled == TI_FALSE))
- {
- os_wake_lock(pTrafficMonitor->hOs);
- pTrafficMonitor->DownTimerEnabled = TI_TRUE;
- /* Start the timer with user defined percentage of the the minimum interval discovered earlier */
- tmr_StartTimer (pTrafficMonitor->hTrafficMonTimer,
- TimerMonitor_TimeOut,
- (TI_HANDLE)pTrafficMonitor,
- ((minIntervalTime * pTrafficMonitor->trafficDownTestIntervalPercent) / 100),
- TI_TRUE);
- }
-}
-
-#ifdef TI_DBG
-
-/*-----------------------------------------------------------------------------
-Routine Name: TrafficMonitor_UpdateActiveEventsCounters
-Routine Description:
-Arguments:
-Return Value:
------------------------------------------------------------------------------*/
-void TrafficMonitor_UpdateActiveEventsCounters (TI_HANDLE hTrafficMonitor)
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)hTrafficMonitor;
- TrafficAlertElement_t *AlertElement;
- TI_UINT32 activeTrafDownEventsNum = 0;
-
- AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
-
- while(AlertElement)
- {
- if ((AlertElement->Direction == TRAFF_DOWN) && (AlertElement->Trigger == TRAFF_EDGE) && (AlertElement->CurrentState == ALERT_OFF) && (AlertElement->Enabled == TI_TRUE))
- {
- activeTrafDownEventsNum++;
- }
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
-
-}
-
-
-#endif
-
-#ifdef TRAFF_TEST
-/*
- * TEST Function
- */
-void func1(TI_HANDLE Context,TI_UINT32 Cookie)
-{
- switch(Cookie) {
- case 1:
- WLAN_OS_REPORT(("TRAFF - ALERT UP limit - 50 ON"));
- break;
- case 2:
- WLAN_OS_REPORT(("TRAFF - ALERT UP limit - 30 ON"));
- break;
- case 3:
- WLAN_OS_REPORT(("TRAFF - ALERT DOWN limit - 25 ON"));
- break;
- case 4:
- WLAN_OS_REPORT(("TRAFF - ALERT DOWN limit - 10 ON"));
- break;
- }
-
-}
-
-
-void PrintElertStus()
-{
- TrafficMonitor_t *TrafficMonitor =(TrafficMonitor_t*)TestTrafficMonitor;
- TrafficAlertElement_t *AlertElement = (TrafficAlertElement_t*)List_GetFirst(TrafficMonitor->NotificationRegList);
-
- /* go over all the Down elements and check for alert ResetElment that ref to TrafficAlertElement*/
- while(AlertElement)
- {
- if(AlertElement->CurrentState == ALERT_WAIT_FOR_RESET)
- WLAN_OS_REPORT(("TRAFF - ALERT ALERT_WAIT_FOR_RESET"));
- else
- WLAN_OS_REPORT(("TRAFF - ALERT ENABLED"));
-
-
- AlertElement = (TrafficAlertElement_t*)List_GetNext(TrafficMonitor->NotificationRegList);
- }
-}
-
-void TestEventFunc (TI_HANDLE hTrafficMonitor, TI_BOOL bTwdInitOccured)
-{
-
- static flag = TI_TRUE;
- TrafficAlertRegParm_t TrafficAlertRegParm ;
- if(flag)
- {
-
- TrafficAlertRegParm.CallBack = func1;
- TrafficAlertRegParm.Context = NULL ;
- TrafficAlertRegParm.Cookie = 1 ;
- TrafficAlertRegParm.Direction = TRAFF_UP ;
- TrafficAlertRegParm.Trigger = TRAFF_EDGE;
- TrafficAlertRegParm.TimeIntervalMs = 1000;
- TrafficAlertRegParm.Threshold = 50;
- TrafficAlertRegParm.MonitorType = TX_RX_DIRECTED_FRAMES;
- Alert1 = TrafficMonitor_RegEvent(TestTrafficMonitor,&TrafficAlertRegParm,TI_FALSE);
-
- TrafficAlertRegParm.CallBack = func1;
- TrafficAlertRegParm.Context = NULL ;
- TrafficAlertRegParm.Cookie = 2 ;
- TrafficAlertRegParm.Direction = TRAFF_UP ;
- TrafficAlertRegParm.Trigger = TRAFF_EDGE;
- TrafficAlertRegParm.TimeIntervalMs = 1000;
- TrafficAlertRegParm.Threshold = 30;
- TrafficAlertRegParm.MonitorType = TX_RX_DIRECTED_FRAMES;
- Alert2 = TrafficMonitor_RegEvent(TestTrafficMonitor,&TrafficAlertRegParm,TI_FALSE);
-
-
- TrafficAlertRegParm.CallBack = func1;
- TrafficAlertRegParm.Context = NULL ;
- TrafficAlertRegParm.Cookie = 3 ;
- TrafficAlertRegParm.Direction = TRAFF_DOWN ;
- TrafficAlertRegParm.Trigger = TRAFF_EDGE;
- TrafficAlertRegParm.TimeIntervalMs = 1000;
- TrafficAlertRegParm.Threshold = 25;
- TrafficAlertRegParm.MonitorType = TX_RX_DIRECTED_FRAMES;
- Alert3 = TrafficMonitor_RegEvent(TestTrafficMonitor,&TrafficAlertRegParm,TI_FALSE);
-
- TrafficAlertRegParm.CallBack = func1;
- TrafficAlertRegParm.Context = NULL ;
- TrafficAlertRegParm.Cookie = 4 ;
- TrafficAlertRegParm.Direction = TRAFF_DOWN ;
- TrafficAlertRegParm.Trigger = TRAFF_LEVEL;
- TrafficAlertRegParm.TimeIntervalMs = 1000;
- TrafficAlertRegParm.Threshold = 10;
- TrafficAlertRegParm.MonitorType = TX_RX_DIRECTED_FRAMES;
- Alert4 = TrafficMonitor_RegEvent(TestTrafficMonitor,&TrafficAlertRegParm,TI_FALSE);
-
- TrafficMonitor_SetRstCondition(TestTrafficMonitor, Alert1,Alert3,TI_TRUE);
- TrafficMonitor_SetRstCondition(TestTrafficMonitor, Alert2,Alert3,TI_FALSE);
- flag = TI_FALSE;
- }
-
- PrintElertStus();
-
-}
-
-#endif