blob: e9c14e38fc34fb09d509941326c5f3bcf3ee51f0 [file] [log] [blame]
/*
* admCtrl.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 admCtrl.h
* \brief Admission control API
*
* \see admCtrl.c
*/
/****************************************************************************
* *
* MODULE: Admission Control *
* PURPOSE: Admission Control Module API *
* *
****************************************************************************/
#ifndef _ADM_CTRL_H_
#define _ADM_CTRL_H_
#include "rsnApi.h"
#include "TWDriver.h"
/* Constants */
/* Enumerations */
/* Typedefs */
typedef struct _admCtrl_t admCtrl_t;
/* RSN admission control prototypes */
typedef TI_STATUS (*admCtrl_setAuthSuite_t)(admCtrl_t *pAdmCtrl, EAuthSuite authSuite);
typedef TI_STATUS (*admCtrl_getAuthSuite_t)(admCtrl_t *pAdmCtrl, EAuthSuite *pSuite);
typedef TI_STATUS (*admCtrl_setNetworkMode_t)(admCtrl_t *pAdmCtrl, ERsnNetworkMode mode);
typedef TI_STATUS (*admCtrl_setUcastCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite suite);
typedef TI_STATUS (*admCtrl_setBcastCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite suite);
typedef TI_STATUS (*admCtrl_getCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite *pSuite);
typedef TI_STATUS (*admCtrl_setKeyMngSuite_t)(admCtrl_t *pAdmCtrl, ERsnKeyMngSuite suite);
typedef TI_STATUS (*admCtrl_setExtAuthMode_t)(admCtrl_t *pAdmCtrl, EExternalAuthMode extAuthMode);
typedef TI_STATUS (*admCtrl_getExtAuthMode_t)(admCtrl_t *pAdmCtrl, EExternalAuthMode *pExtAuthMode);
typedef TI_STATUS (*admCtrl_getInfoElement_t)(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength);
typedef TI_STATUS (*admCtrl_setSite_t)(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen);
typedef TI_STATUS (*admCtrl_evalSite_t)(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation);
typedef TI_STATUS (*admCtrl_setMixedMode_t)(admCtrl_t *pAdmCtrl, TI_BOOL mixedMode);
typedef TI_STATUS (*admCtrl_getMixedMode_t)(admCtrl_t *pAdmCtrl, TI_BOOL *mixedMode);
typedef TI_STATUS (*admCtrl_getAuthEncrCapability_t)(admCtrl_t *pAdmCtrl,
rsnAuthEncrCapability_t *authEncrCapability);
typedef TI_STATUS (*admCtrl_setPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList);
typedef TI_STATUS (*admCtrl_getPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList);
typedef TI_STATUS (*admCtrl_resetPMKIDlist_t)(admCtrl_t *pAdmCtrl);
typedef TI_STATUS (*admCtrl_sendPMKIDCandListAfterDelay_t)(admCtrl_t *pAdmCtrl, TI_UINT32 delay);
typedef TI_STATUS (*admCtrl_setPromoteFlags_t)(admCtrl_t *pAdmCtrl, TI_UINT32 flags);
typedef TI_STATUS (*admCtrl_getPromoteFlags_t)(admCtrl_t *pAdmCtrl, TI_UINT32 *flags);
typedef TI_STATUS (*admCtrl_getWPAMixedModeSupport_t)(admCtrl_t *pAdmCtrl, TI_UINT32 *support);
#ifdef XCC_MODULE_INCLUDED
typedef TI_STATUS (*admCtrl_getNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_XCC_NETWORK_EAP *networkEap);
typedef TI_STATUS (*admCtrl_setNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_XCC_NETWORK_EAP networkEap);
#endif
typedef TI_BOOL (*admCtrl_getPreAuthStatus_t)(admCtrl_t *pAdmCtrl, TMacAddr *givenAP, TI_UINT8 *cacheIndex);
typedef TI_STATUS (*admCtrl_startPreAuth_t)(admCtrl_t *pAdmCtrl, TBssidList4PreAuth *pBssidList);
typedef TI_STATUS (*admCtrl_get802_1x_AkmExists_t)(admCtrl_t *pAdmCtrl, TI_BOOL *wpa_802_1x_AkmExists);
/* Constants */
/* Flags for Any-WPA (WPA Mixed) mode) - set by the Supplicant */
#define ADMCTRL_WPA_OPTION_NONE 0x00000000
#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_AUTH_MODE 0x00000001
#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_CIPHER 0x00000002
#define ADMCTRL_WPA_OPTION_MAXVALUE 0x00000003
/* Structures */
/* PMKID cache structures */
/* (PMKID cache used for WPA2 pre-authentication */
#define PMKID_VALUE_SIZE 16
typedef TI_UINT8 pmkidValue_t[PMKID_VALUE_SIZE];
#define PMKID_MAX_NUMBER 16
typedef struct
{
TMacAddr bssId;
pmkidValue_t pmkId;
TI_BOOL preAuthenticate;
} pmkidEntry_t;
#define ADMCTRL_PMKID_CACHE_SIZE 32
typedef struct
{
TSsid ssid;
TI_UINT8 entriesNumber;
TI_UINT8 nextFreeEntry;
pmkidEntry_t pmkidTbl[ADMCTRL_PMKID_CACHE_SIZE];
} pmkid_cache_t;
/* Admission control object */
struct _admCtrl_t
{
ERsnPaeRole role;
EAuthSuite authSuite;
ERsnNetworkMode networkMode;
EExternalAuthMode externalAuthMode;
ECipherSuite unicastSuite;
ECipherSuite broadcastSuite;
ERsnKeyMngSuite keyMngSuite;
TI_BOOL wpaAkmExists;
TI_BOOL mixedMode;
TI_UINT8 AP_IP_Address[4];
TI_UINT16 replayCnt;
TI_UINT8 aironetIeReserved[8];
TI_BOOL encrInSw;
TI_BOOL micInSw;
TI_BOOL setSiteFirst;
#ifdef XCC_MODULE_INCLUDED
OS_XCC_NETWORK_EAP networkEapMode;
#endif
TI_BOOL XCCSupport;
TI_BOOL proxyArpEnabled;
TI_BOOL WPAMixedModeEnable;
TI_UINT32 WPAPromoteFlags;
TI_BOOL preAuthSupport;
TI_UINT32 preAuthTimeout;
TI_UINT8 MaxNumOfPMKIDs;
pmkid_cache_t pmkid_cache;
struct _rsn_t *pRsn;
TI_HANDLE hMlme;
TI_HANDLE hRx;
TI_HANDLE hReport;
TI_HANDLE hOs;
TI_HANDLE hXCCMngr;
TI_HANDLE hPowerMgr;
TI_HANDLE hEvHandler;
TI_HANDLE hTimer;
TI_HANDLE hCurrBss;
TI_HANDLE hSme;
admCtrl_setAuthSuite_t setAuthSuite;
admCtrl_getAuthSuite_t getAuthSuite;
admCtrl_setNetworkMode_t setNetworkMode;
admCtrl_setUcastCipherSuite_t setUcastSuite;
admCtrl_setBcastCipherSuite_t setBcastSuite;
admCtrl_setExtAuthMode_t setExtAuthMode;
admCtrl_getExtAuthMode_t getExtAuthMode;
admCtrl_getCipherSuite_t getCipherSuite;
admCtrl_setKeyMngSuite_t setKeyMngSuite;
admCtrl_setMixedMode_t setMixedMode;
admCtrl_getMixedMode_t getMixedMode;
admCtrl_getInfoElement_t getInfoElement;
admCtrl_setSite_t setSite;
admCtrl_evalSite_t evalSite;
admCtrl_getAuthEncrCapability_t getAuthEncrCap;
admCtrl_setPMKIDlist_t setPmkidList;
admCtrl_getPMKIDlist_t getPmkidList;
admCtrl_resetPMKIDlist_t resetPmkidList;
admCtrl_setPromoteFlags_t setPromoteFlags;
admCtrl_getPromoteFlags_t getPromoteFlags;
admCtrl_getWPAMixedModeSupport_t getWPAMixedModeSupport;
admCtrl_get802_1x_AkmExists_t get802_1x_AkmExists;
#ifdef XCC_MODULE_INCLUDED
admCtrl_getNetworkEap_t getNetworkEap;
admCtrl_setNetworkEap_t setNetworkEap;
#endif
admCtrl_getPreAuthStatus_t getPreAuthStatus;
admCtrl_startPreAuth_t startPreAuth;
void *hPreAuthTimerWpa2;
TI_UINT8 numberOfPreAuthCandidates;
};
/* External data definitions */
/* External functions definitions */
/* Function prototypes */
admCtrl_t* admCtrl_create(TI_HANDLE hOs);
TI_STATUS admCtrl_config (TI_HANDLE hAdmCtrl,
TI_HANDLE hMlme,
TI_HANDLE hRx,
TI_HANDLE hReport,
TI_HANDLE hOs,
struct _rsn_t *pRsn,
TI_HANDLE hXCCMngr,
TI_HANDLE hPowerMgr,
TI_HANDLE hEvHandler,
TI_HANDLE hTimer,
TI_HANDLE hCurrBss,
TRsnInitParams *pInitParam);
TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl);
TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl);
TI_STATUS admCtrlWpa_config(admCtrl_t *pAdmCtrl);
TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 **pIe, TI_UINT8 IeId);
TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl);
TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList);
TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList);
TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl);
TI_BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, TMacAddr *givenAP, TI_UINT8 *cacheIndex);
TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, TBssidList4PreAuth *pBssidList);
TI_STATUS admCtrl_nullGet802_1x_AkmExists(admCtrl_t *pAdmCtrl, TI_BOOL *wpa_802_1x_AkmExists);
void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus);
#endif /* _ADM_H_*/