blob: 03dcfd4b923f711f245270fbdcaddf8a0a7718c1 [file] [log] [blame]
/*
* apConnApi.h
*
* 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.
*/
/** \file apConnApi.h
* \brief AP Connection Module API
*
* \see apConn.c
*/
/****************************************************************************
* *
* MODULE: AP Connection *
* PURPOSE: AP Connection Module API *
* *
****************************************************************************/
#ifndef _AP_CONNECTION_API_H_
#define _AP_CONNECTION_API_H_
#include "paramOut.h"
#include "rsnApi.h"
#include "roamingMngrTypes.h"
/*-----------*/
/* Constants */
/*-----------*/
#define AP_CONNECT_TRIGGER_IGNORED 0x0
/*--------------*/
/* Enumerations */
/*--------------*/
/** \enum apConn_connRequest_e
* \brief Connect to AP request types
*
* \par Description
* Lists the possible types of connection to AP requests
*
* \sa
*/
typedef enum
{
/* 0 */ AP_CONNECT_RETAIN_CURR_AP, /**< Remain connected to the current AP without authentication.
* Give-up on roaming, return to current AP without performing re-connection
*/
/* 1 */ AP_CONNECT_RECONNECT_CURR_AP, /**< Reconnect to the current AP with fast authentication.
* Perform roaming - connect to AP, registered as current AP
*/
/* 2 */ AP_CONNECT_FAST_TO_AP, /**< Roam to AP with fast authentication.
* Perform roaming - re-connect to new AP via RE-Assoc, parameters attached
*/
/* 3 */ AP_CONNECT_FULL_TO_AP /**< Roam to AP with full authentication.
* Perform full connection - connect to new AP via Assoc, parameters attached
*/
} apConn_connRequest_e;
/** \enum apConn_roamingTrigger_e
* \brief Roaming Triggers Types
*
* \par Description
* Lists the possible types of roaming triggers
*
* \sa
*/
typedef enum
{
/* 0 */ ROAMING_TRIGGER_NONE, /**< No roaming trigger */
/* 1 */ ROAMING_TRIGGER_LOW_QUALITY_FOR_BG_SCAN, /**< Low quality trigger for background scan */
/* 2 */ ROAMING_TRIGGER_NORMAL_QUALITY_FOR_BG_SCAN, /**< Normal quality trigger for background scan */
/* 3 */ ROAMING_TRIGGER_LOW_TX_RATE, /**< Low TX rate */
/* 4 */ ROAMING_TRIGGER_LOW_SNR, /**< Low SNR rate */
/* 5 */ ROAMING_TRIGGER_LOW_QUALITY, /**< Low quality for roaming */
/* 6 */ ROAMING_TRIGGER_MAX_TX_RETRIES, /**< Maximum TX retries */
/* 7 */ ROAMING_TRIGGER_BSS_LOSS, /**< Missed beacon and no ACK on Unicast probe requests */
/* 8 */ ROAMING_TRIGGER_SWITCH_CHANNEL, /**< Radar detection */
/* 9 */ ROAMING_TRIGGER_AP_DISCONNECT, /**< AP disconnect (de-authenticate or disassociate) */
/* 10 */ ROAMING_TRIGGER_SECURITY_ATTACK, /**< Security attack */
/* 11 */ ROAMING_TRIGGER_LAST /**< Maximum roaming trigger - must be last!!! */
} apConn_roamingTrigger_e;
/** \enum apConn_connStatus_e
* \brief Connection Status Types
*
* \par Description
* Lists the possible types of connection status
*
* \sa
*/
typedef enum
{
/* 0 */ CONN_STATUS_CONNECTED, /**< */
/* 1 */ CONN_STATUS_NOT_CONNECTED, /**< */
/* 2 */ CONN_STATUS_HANDOVER_FAILURE, /**< */
/* 3 */ CONN_STATUS_HANDOVER_SUCCESS, /**< */
/* 4 */ CONN_STATUS_LAST /**< Maximum connection status - must be last!!! */
} apConn_connStatus_e;
/** \enum REG_DOMAIN_CAPABILITY
* \brief Regulatory Domain Capability
*
* \par Description
*
* \sa
*/
typedef enum
{
/* 0 */ REG_DOMAIN_FIXED, /**< */
/* 1 */ REG_DOMAIN_80211D, /**< */
/* 2 */ REG_DOMAIN_80211H /**< */
} REG_DOMAIN_CAPABILITY;
/*----------*/
/* Typedefs */
/*----------*/
/**
* \brief Roaming Manager callback type
*
* \param hRoamingMngr - Handle to Roaming Manager Object
* \param pData - Pointer to Data
* \return void
*
* \par Description
*
*
* \sa
*/
typedef TI_STATUS (*apConn_roamMngrCallb_t) (TI_HANDLE hRoamingMngr, void *pData);
typedef TI_STATUS (*apConn_roamMngrEventCallb_t) (TI_HANDLE hRoamingMngr, void *pData, TI_UINT16 reasonCode);
/*------------*/
/* Structures */
/*------------*/
/** \struct apConn_staCapabilities_t
* \brief Station Capabilities
*
* \par Description
* Holds a Station Capabilities.
* Used by the roaming manager when the capabilities of a new AP
* are transferred to the AP connection module
*
* \sa
*/
typedef struct _apConn_staCapabilities_t
{
OS_802_11_AUTHENTICATION_MODE authMode; /**< Authentication Mode: None, Shared, AutoSwitch, WPA, WPAPSK, WPANone, WPA2, WPA2PSK */
OS_802_11_ENCRYPTION_TYPES encryptionType; /**< Encription Type: None, WEP, TKIP, AES */
OS_802_11_NETWORK_TYPE networkType; /**< Network Type: 2.4G, 5G or Dual */
OS_802_11_RATES_EX rateMask; /**< An array of 16 octets. Each octet contains a preferred data rate in units of 0.5 Mbps */
TI_BOOL XCCEnabled; /**< TI_TRUE - XCC enabled, TI_FALSE - XCC disabled */
TI_BOOL qosEnabled; /**< TI_TRUE - QOS enabled, TI_FALSE - QOS disabled */
REG_DOMAIN_CAPABILITY regDomain; /**< Fixed, 802.11D, 802.11H */
} apConn_staCapabilities_t;
/** \struct apConn_connStatus_t
* \brief Connection Status
*
* \par Description
* Holds the Report Status of the Connection and a buffer for the case
* of vendor specific IEs in Association Response Packet
*
* \sa
*/
typedef struct _apConn_connStatus_t
{
apConn_connStatus_e status; /** Reported status of the connection */
TI_UINT32 dataBufLength; /** (Optional) length of attached buffer */
TI_CHAR *dataBuf; /** (Optional) attached buffer - can be used in case of vendor specific IEs in Association Response Packet */
} apConn_connStatus_t;
/** \struct apConn_connRequest_t
* \brief Connection Request
*
* \par Description
* Holds the Type of Request needed to establish the Connection,
* and a buffer for the case of vendor specific IEs in Association Request Packet
*
* \sa
*/
typedef struct _apConn_connRequest_t
{
apConn_connRequest_e requestType; /** Type of Request to establish connection */
TI_UINT32 dataBufLength; /** (Optional) length of attached buffer */
TI_CHAR *dataBuf; /** (Optional) attached buffer - can be used in case of vendor specific IEs in Association Request Packet */
} apConn_connRequest_t;
typedef enum
{
ReAssoc = 0
/* The methods below are for 11r support only
FT_initial_ReAssoc,
FT_over_the_air,
FT_over_DS */
} ETransitionMethod;
typedef struct _TargetAP_t
{
apConn_connRequest_t connRequest;
ETransitionMethod transitionMethod;
bssEntry_t newAP;
} TargetAp_t;
/*---------------------------*/
/* External data definitions */
/*---------------------------*/
/*--------------------------------*/
/* External functions definitions */
/*--------------------------------*/
/*---------------------*/
/* Function prototypes */
/*---------------------*/
/**
* \brief Configure Roaming Thresholds
*
* \param hAPConnection - Handle to AP Connection module object
* \param pParam - Pointer to input Roaming event thresholds to configure
* \return TI_OK on success
*
* \par Description
* This function is used for configuring Roaming Thesholds:
* it is called by Roaming Manager when the application sets roaming thresholds
*
* \sa
*/
TI_STATUS apConn_setRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam);
/**
* \brief Get Roaming Thresholds configuration
*
* \param hAPConnection - Handle to AP Connection module object
* \param pParam - Pointer to output Roaming event thresholds configuration to get
* \return TI_OK on success
*
* \par Description
* This function is used for getting current Roaming Thesholds configuration:
* it is called by Roaming Manager when the application gets roaming thresholds
*
* \sa
*/
TI_STATUS apConn_getRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam);
/**
* \brief Register Roaming Manager Callbacks
*
* \param hAPConnection - Handle to AP Connection module object
* \param roamEventCallb - Pointer to input Roaming event callback
* \param reportStatusCallb - Pointer to input Connection status callback
* \param returnNeighborApsCallb - Pointer to input Neighbor AP callback
* \return TI_OK on success
*
* \par Description
* This function stores the roaming manager methods in the internal database of the AP connection module
*
* \sa
*/
TI_STATUS apConn_registerRoamMngrCallb(TI_HANDLE hAPConnection,
apConn_roamMngrEventCallb_t roamEventCallb,
apConn_roamMngrCallb_t reportStatusCallb,
apConn_roamMngrCallb_t returnNeighborApsCallb);
/**
* \brief Un-Register Roaming Manager Callbacks
*
* \param hAPConnection - Handle to AP Connection module object
* \return TI_OK on success
*
* \par Description
* This function erases the roaming manager methods from the internal database of the AP connection module.
* From the moment this function was called, any roaming event would cause disconnect.
*
* \sa
*/
TI_STATUS apConn_unregisterRoamMngrCallb(TI_HANDLE hAPConnection);
/**
* \brief AP-Connection disconnect
*
* \param hAPConnection - Handle to AP Connection module object
* \return TI_OK on success
*
* \par Description
* Roaming Manager calls this function when it fails to find a candidate
* for roaming and connection with the current AP is not possible
*
* \sa
*/
TI_STATUS apConn_disconnect(TI_HANDLE hAPConnection);
/**
* \brief Get Station Capabilities
*
* \param hAPConnection - Handle to AP Connection module object
* \param ie_list - Pointer to output list of STA Capabilities
* \return TI_OK on success
*
* \par Description
* Roaming Manager calls this function during selection of new candidate for roaming.
* The local STA capabilities (IEs) of quality and privacy, which are required for
* evaluating AP sites suitable for roaming, are returned.
*
* \sa
*/
TI_STATUS apConn_getStaCapabilities(TI_HANDLE hAPConnection,
apConn_staCapabilities_t *ie_list);
/**
* \brief Connect to New AP
*
* \param hAPConnection - Handle to AP Connection module object
* \param newAP - Pointer to input parameters list of AP candidates for roaming
* \param request - The Connection Request Type: Connect to new AP, current AP (retain to current AP or re-connect)
* \param reNegotiateTspec - Set to TRUE before handover if requested by roaming manager
* \return TI_OK on success
*
* \par Description
* Roaming Manager calls this function when it has completed the process of selection a new AP candidate for roaming.
* In addition, the Roaming manager informs the AP Connection module whether this is new AP or the current one,
* and whether to perform full roaming procedure or just to retain to current AP.
* Precondition: ready for roaming
*
* \Note
* Calling this function with the parameter RETAIN_CURR_AP terminates the roaming process at the stage when the driver
* resources are occupied for roaming, but the connection with the current AP is still valid
* \sa
*/
TI_STATUS apConn_connectToAP(TI_HANDLE hAPConnection,
bssEntry_t *newAP,
apConn_connRequest_t *request,
TI_BOOL reNegotiateTspec);
/**
* \brief Connect to New AP
*
* \param hAPConnection - Handle to AP Connection module object
* \return Pointer to BSS entry parameters if successful, NULL otherwise
*
* \par Description
* Roaming Manager calls this function in order to evaluate the quality of new
* AP candidates for roaming against the quality of current AP.
* The function returns parameters of current AP.
*
* \sa
*/
bssEntry_t *apConn_getBSSParams(TI_HANDLE hAPConnection);
/**
* \brief Check if Site is Banned
*
* \param hAPConnection - Handle to AP Connection module object
* \param bssid - Pointer to input BSSID (MAC Address) of checked site
* \return True if the site is banned and Falde otherwise
*
* \par Description
* Roaming Manager calls this function during selection of new candidate for roaming.
* Only APs which are not marked as banned are allowed to be selected.
*
* \sa
*/
TI_BOOL apConn_isSiteBanned(TI_HANDLE hAPConnection, TMacAddr * bssid);
/**
* \brief Get AP Pre-Authentication Status
*
* \param hAPConnection - Handle to AP Connection module object
* \param givenAp - Pointer to input BSSID (MAC Address) of checked AP
* \return True if AP is pre-authenticated, False otherwise
*
* \par Description
* Roaming Manager calls this function during selection of new candidate for roaming.
* Among all candidate APs of acceptable quality that are not neighbor APs,
* pre-authenticated APs are preferred.
* The function returns the status of the AP, whether or not it is pre-authenticated.
*
*
* \sa
*/
TI_BOOL apConn_getPreAuthAPStatus(TI_HANDLE hAPConnection, TMacAddr *givenAp);
/**
* \brief Update Pre-Authentication APs List
*
* \param hAPConnection - Handle to AP Connection module object
* \param listAPs - Pointer to List of APs to pre-authenticate
* \return TI_OK if the parameter was set successfully, TI_NOK otherwise
*
* \par Description
* Roaming Manager calls this function periodically in order to update the list
* of pre-authenticated APs. The list is managed by WLAN driver and required
* by Roaming Manager during selection of roaming candidate process.
*
* \sa
*/
TI_STATUS apConn_preAuthenticate(TI_HANDLE hAPConnection, bssList_t *listAPs);
/**
* \brief Prepare to Roaming
*
* \param hAPConnection - Handle to AP Connection module object
* \param reason - The reason for Roaming trigger
* \return TI_OK if the parameter was set successfully, TI_NOK otherwise
*
* \par Description
* This function indicate the driver that Roaming process is starting.
* The roaming manager calls this function when roaming event
* is received and Roaming Manager wishes to start the roaming process, thus wants to
* prevent scan and measurement in the system.
* The function will return TI_OK if the allocation is performed, PEND if the allocation is started,
* TI_NOK in case the allocation is not possible. In case of successful allocation,
* Roaming Manager will be informed via callback about the end of the allocation.
* The roaming manager can initiate an immediate scan or call to connect to an AP only
* after prepare-to-roam is complete
*
* \sa
*/
TI_STATUS apConn_prepareToRoaming(TI_HANDLE hAPConnection, apConn_roamingTrigger_e reason);
#endif /* _AP_CONNECTION_API_H_*/