| /* |
| * roamingMngrApi.h |
| * |
| * Copyright(c) 1998 - 2010 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. |
| */ |
| |
| /** \file roamingMngrApi.h |
| * \brief Internal Roaming Manager API |
| * |
| * \see roamingMngr.c |
| */ |
| |
| /**************************************************************************** |
| * * |
| * MODULE: Roaming Manager * |
| * PURPOSE: Roaming Manager Module API * |
| * * |
| ****************************************************************************/ |
| |
| #ifndef _ROAMING_MNGR_API_H_ |
| #define _ROAMING_MNGR_API_H_ |
| |
| /*#include "802_11Defs.h"*/ |
| #include "osApi.h" |
| #include "paramOut.h" |
| #include "scanMngrApi.h" |
| #include "bssTypes.h" |
| #include "DrvMainModules.h" |
| #include "apConnApi.h" |
| /*-----------*/ |
| /* Constants */ |
| /*-----------*/ |
| |
| #define MAX_ROAMING_TRIGGERS ROAMING_TRIGGER_LAST |
| |
| |
| /*--------------*/ |
| /* Enumerations */ |
| /*--------------*/ |
| |
| /* Roaming Trigger groups, according to Roaming Triggers */ |
| typedef enum |
| { |
| ROAMING_TRIGGER_BG_SCAN_GROUP = ROAMING_TRIGGER_NORMAL_QUALITY_FOR_BG_SCAN, |
| ROAMING_TRIGGER_LOW_QUALITY_GROUP = ROAMING_TRIGGER_MAX_TX_RETRIES, |
| ROAMING_TRIGGER_FAST_CONNECT_GROUP = ROAMING_TRIGGER_SWITCH_CHANNEL, |
| ROAMING_TRIGGER_FULL_CONNECT_GROUP = ROAMING_TRIGGER_SECURITY_ATTACK |
| } roamingMngr_connectTypeGroup_e; |
| |
| |
| /*----------*/ |
| /* Typedefs */ |
| /*----------*/ |
| |
| /* scan types */ |
| typedef enum |
| { |
| /* 0 */ ROAMING_NO_SCAN, |
| /* 1 */ ROAMING_PARTIAL_SCAN, |
| /* 2 */ ROAMING_PARTIAL_SCAN_RETRY, |
| /* 3 */ ROAMING_FULL_SCAN, |
| /* 4 */ ROAMING_FULL_SCAN_RETRY |
| |
| } scan4RoamingType_e; |
| |
| typedef struct |
| { |
| TI_UINT8 preAuthBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; |
| TI_UINT8 numOfPreAuthBSS; |
| TI_UINT8 neighborBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; |
| TI_UINT8 numOfNeighborBSS; |
| TI_UINT8 regularBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; |
| TI_UINT8 numOfRegularBSS; |
| } listOfCandidateAps_t; |
| |
| |
| struct _roamingMngr_t |
| { |
| /*** Roaming manager parameters that can be configured externally ***/ |
| roamingMngrConfig_t roamingMngrConfig; |
| roamingMngrThresholdsConfig_t roamingMngrThresholdsConfig; |
| TI_UINT32 lowPassFilterRoamingAttemptInMsec; |
| |
| /*** Internal roaming parameters ***/ |
| apConn_roamingTrigger_e roamingTrigger; /* the roaming trigger type */ |
| TI_UINT32* pCurrentState; /* pointer to Roaming Generic SM current state */ |
| TI_BOOL maskRoamingEvents; /* Indicate if a trigger is already in process, and therefore the |
| other triggers will be ignored */ |
| TI_UINT32 lowQualityTriggerTimestamp; /* TS to filter Too many low Quality roaming triggers */ |
| scan4RoamingType_e scanType; /* the scan type performed for Roaming */ |
| bssList_t *pListOfAPs; /* list of BSS received from Scan Manager */ |
| TI_BOOL neighborApsExist; /* Indicating if Neighbor APs exist */ |
| listOfCandidateAps_t listOfCandidateAps; /* a list of the candiadte APs indexes in pListOfAPs according to |
| neighbor APs, pre-auth APs and other APs */ |
| TI_UINT8 candidateApIndex; /* The current candidate AP's index to Roam to */ |
| TI_BOOL handoverWasPerformed; /* Indicates whether at least one handover was performed */ |
| apConn_staCapabilities_t staCapabilities; |
| /* The station capabilities for the current Connection */ |
| TI_HANDLE hRoamingSm; /* Roaming manager SM handle */ |
| TI_INT8** RoamStateDescription; /* Roaming states index-name keyValue */ |
| TI_INT8** RoamEventDescription; /* Roaming Events index-name keyValue */ |
| |
| |
| /* Roaming manager handles to other objects */ |
| TI_HANDLE hReport; |
| TI_HANDLE hOs; |
| TI_HANDLE hScanMngr; |
| TI_HANDLE hAPConnection; |
| TI_HANDLE hTWD; |
| TI_HANDLE hEvHandler; |
| TI_HANDLE hCurrBss; |
| |
| #ifdef TI_DBG |
| /* Debug trace for Roaming statistics */ |
| TI_UINT32 roamingTriggerEvents[MAX_ROAMING_TRIGGERS]; |
| TI_UINT32 roamingHandoverEvents[MAX_ROAMING_TRIGGERS]; |
| TI_UINT32 roamingSuccesfulHandoverNum; |
| TI_UINT32 roamingFailedHandoverNum; |
| TI_UINT32 roamingTriggerTimestamp; |
| TI_UINT32 roamingHandoverStartedTimestamp; |
| TI_UINT32 roamingHandoverCompletedTimestamp; |
| TI_UINT32 roamingAverageSuccHandoverDuration; |
| TI_UINT32 roamingAverageRoamingDuration; |
| #endif |
| |
| TI_UINT8 RoamingOperationalMode; /* 0 - manual, 1 - auto*/ |
| TI_UINT8 bSendTspecInReassPkt; |
| TargetAp_t targetAP; /* holds the AP to connect with in manual mode */ |
| }; /* _roamingMngr_t */ |
| |
| |
| |
| typedef struct _roamingMngr_t roamingMngr_t; |
| |
| /*------------*/ |
| /* Structures */ |
| /*------------*/ |
| |
| /*---------------------------*/ |
| /* External data definitions */ |
| /*---------------------------*/ |
| |
| /*--------------------------------*/ |
| /* External functions definitions */ |
| /*--------------------------------*/ |
| |
| /*----------------------------*/ |
| /* Global Function prototypes */ |
| /*----------------------------*/ |
| |
| /** |
| * \brief Create the Roaming Manager context |
| * |
| * \param hOs - OS handler |
| * \return A pointer to the roaming manager handler on success, |
| * NULL on failure (unable to allocate memory or other system resource) |
| * |
| * \par Description |
| * Creates the Roaming Manager context: \n |
| * Allocate control block for preconfigured parameters and internal variables, create state-machine |
| * |
| * \sa roamingMngr_unload |
| */ |
| TI_HANDLE roamingMngr_create(TI_HANDLE hOs); |
| /** |
| * \brief Configure the Roaming Manager module |
| * |
| * \param pStadHandles - The driver modules handles |
| * \return void |
| * |
| * \par Description |
| * Configure the Roaming Manager module to do the following: |
| * - Initialize the Station broadcast key State Machine matrix |
| * - Store handlers of other modules (report module, Scan Manager, AP connection, TWD) |
| * - Initialize the roaming manager internal variables |
| * - Configure the roaming manager state-machine |
| * |
| * \sa |
| */ |
| void roamingMngr_init (TStadHandlesList *pStadHandles); |
| /** |
| * \brief Unloads the Roaming Manager Module |
| * |
| * \param hRoamingMngr - Roaming Manager handler |
| * \return TI_OK on success or TI_NOK on failure |
| * |
| * \par Description |
| * Unloads the components of the Roaming Manager module from memory: \n |
| * releases the allocation for the state-machine and internal variables |
| * |
| * \sa roamingMngr_create |
| */ |
| |
| TI_STATUS roamingMngr_unload(TI_HANDLE hRoamingMngr); |
| /** |
| * \brief Get Roaming Manager parameters from the roamingMngr SM |
| * |
| * \param hRoamingMngr - Roaming Manager handler |
| * \param pParam - Output Parameters |
| * \return TI_OK on success or TI_NOK on failure |
| * |
| * \par Description |
| * |
| * \sa |
| */ |
| TI_STATUS roamingMngr_getParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam); |
| /** |
| * \brief Set Roaming Manager Module parameters to the roamingMngr SM |
| * |
| * \param hRoamingMngr - Roaming Manager handler |
| * \param pParam - Input Parameters |
| * \return TI_OK on success or TI_NOK on failure |
| * |
| * \par Description |
| * |
| * \sa |
| */ |
| TI_STATUS roamingMngr_setParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam); |
| /** |
| * \brief Indicates Roaming Manager that an Immediate Scan was completed |
| * and provides it with the Scan result |
| * |
| * \param hRoamingMngr - Handle to the roaming manager |
| * \param scanCmpltStatus - Scan complete reason |
| * \return TI_OK on success or TI_NOK on failure |
| * |
| * \par Description |
| * This procedure is called when the Scan Manager completed Immediate Scan for Roaming. |
| * It performs the following: |
| * - Partial or Full scan |
| * - Re-try Partial or Full scan if the previous scan failed |
| * - Full scan if the previous partial scan didn't get any APs |
| * - Fail event if all the Scans failed |
| * |
| * Algorithm description: |
| * - If Scan Complete is OK: |
| * ------------------------- |
| * - If APs found: |
| * - starts Selection |
| * - If NO APs found: |
| * - If Previous Scan was Partial: |
| * - Perform Full Scan |
| * - If Previous Scan was Full: |
| * - Report Error |
| * |
| * - If Scan Complete is NOT OK: |
| * ----------------------------- |
| * - Re-Try Scan |
| * - If APs found: |
| * - starts Selection |
| * - If NO APs found: |
| * - Re-Try Scan with current Scan Type (Partial/Full Scan Retry or No Scan) |
| * |
| * \sa |
| */ |
| TI_STATUS roamingMngr_immediateScanComplete(TI_HANDLE hRoamingMngr, scan_mngrResultStatus_e scanCmpltStatus); |
| /** |
| * \brief Indicates that a new BSSID is added to the BSS table |
| * |
| * \param hRoamingMngr - Handle to the roaming manager |
| * \param newBss_entry - List of BSSIDs that have been found |
| * \return TI_OK on success or TI_NOK on failure |
| * |
| * \par Description |
| * Indicates that a new BSSID is added to the BSS table (Called by the Scan Manager when new BSSID was found). |
| * This function triggers preauthentication to the new BSS. |
| * |
| * \sa |
| */ |
| TI_STATUS roamingMngr_updateNewBssList(TI_HANDLE hRoamingMngr, bssList_t *newBss_entry); |
| |
| |
| |
| /* All functions below added by Lior*/ |
| |
| TI_STATUS roamingMngr_setDefaults (TI_HANDLE hRoamingMngr, TRoamScanMngrInitParams *pInitParam); |
| TI_STATUS roamingMngr_setBssLossThreshold (TI_HANDLE hRoamingMngr, TI_UINT32 uNumOfBeacons, TI_UINT16 uClientID); |
| TI_STATUS roamingMngr_connect(TI_HANDLE hRoamingMngr, TargetAp_t* pTargetAp); |
| TI_STATUS roamingMngr_startImmediateScan(TI_HANDLE hRoamingMngr, channelList_t *pChannelList); |
| TI_STATUS roamingMngr_stopImmediateScan(TI_HANDLE hRoamingMngr); |
| TI_STATUS roamingMngr_immediateScanByAppComplete(TI_HANDLE hRoamingMngr, scan_mngrResultStatus_e scanCmpltStatus); |
| |
| TI_STATUS roamingMngr_smEvent(TI_UINT8 event, void* data); |
| void roamingMngr_smStopWhileScanning(void *pData); |
| void roamingMngr_smStop(void *pData); |
| void roamingMngr_smUnexpected(void *pData); |
| void roamingMngr_smNop(void *pData); |
| |
| |
| #endif /* _ROAMING_MNGR_API_H_*/ |
| |