1/** \file admCtrl.h 2 * \brief Admission control API 3 * 4 * \see admCtrl.c 5 */ 6/**************************************************************************** 7**+-----------------------------------------------------------------------+** 8**| |** 9**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 10**| All rights reserved. |** 11**| |** 12**| Redistribution and use in source and binary forms, with or without |** 13**| modification, are permitted provided that the following conditions |** 14**| are met: |** 15**| |** 16**| * Redistributions of source code must retain the above copyright |** 17**| notice, this list of conditions and the following disclaimer. |** 18**| * Redistributions in binary form must reproduce the above copyright |** 19**| notice, this list of conditions and the following disclaimer in |** 20**| the documentation and/or other materials provided with the |** 21**| distribution. |** 22**| * Neither the name Texas Instruments nor the names of its |** 23**| contributors may be used to endorse or promote products derived |** 24**| from this software without specific prior written permission. |** 25**| |** 26**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 27**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 28**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 29**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 30**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 31**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 32**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 33**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 34**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 35**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 36**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 37**| |** 38**+-----------------------------------------------------------------------+** 39****************************************************************************/ 40 41/**************************************************************************** 42 * * 43 * MODULE: Admission Control * 44 * PURPOSE: Admission Control Module API * 45 * * 46 ****************************************************************************/ 47 48#ifndef _ADM_CTRL_H_ 49#define _ADM_CTRL_H_ 50 51#include "rsnApi.h" 52 53/* Constants */ 54 55/* Enumerations */ 56 57/* Typedefs */ 58 59typedef struct _admCtrl_t admCtrl_t; 60 61/* RSN admission control prototypes */ 62 63typedef TI_STATUS (*admCtrl_setAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e authSuite); 64 65typedef TI_STATUS (*admCtrl_getAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e *pSuite); 66 67typedef TI_STATUS (*admCtrl_setNetworkMode_t)(admCtrl_t *pAdmCtrl, rsn_networkMode_t mode); 68 69typedef TI_STATUS (*admCtrl_setUcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite); 70 71typedef TI_STATUS (*admCtrl_setBcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite); 72 73typedef TI_STATUS (*admCtrl_getCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e *pSuite); 74 75typedef TI_STATUS (*admCtrl_setKeyMngSuite_t)(admCtrl_t *pAdmCtrl, rsn_keyMngSuite_e suite); 76 77typedef TI_STATUS (*admCtrl_setExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e extAuthMode); 78 79typedef TI_STATUS (*admCtrl_getExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e *pExtAuthMode); 80 81typedef TI_STATUS (*admCtrl_getInfoElement_t)(admCtrl_t *pAdmCtrl, UINT8 *pIe, UINT8 *pLength); 82 83typedef TI_STATUS (*admCtrl_setSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 *pAssocIe, UINT8 *pAssocIeLen); 84 85typedef TI_STATUS (*admCtrl_evalSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, bssType_e bssType, UINT32 *pEvaluation); 86 87typedef TI_STATUS (*admCtrl_setMixedMode_t)(admCtrl_t *pAdmCtrl, BOOL mixedMode); 88 89typedef TI_STATUS (*admCtrl_getMixedMode_t)(admCtrl_t *pAdmCtrl, BOOL *mixedMode); 90 91typedef TI_STATUS (*admCtrl_getAuthEncrCapability_t)(admCtrl_t *pAdmCtrl, 92 rsnAuthEncrCapability_t *authEncrCapability); 93 94typedef TI_STATUS (*admCtrl_setPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList); 95 96typedef TI_STATUS (*admCtrl_getPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList); 97 98typedef TI_STATUS (*admCtrl_resetPMKIDlist_t)(admCtrl_t *pAdmCtrl); 99 100typedef TI_STATUS (*admCtrl_sendPMKIDCandListAfterDelay_t)(admCtrl_t *pAdmCtrl, UINT32 delay); 101 102typedef TI_STATUS (*admCtrl_setPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 flags); 103 104typedef TI_STATUS (*admCtrl_getPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 *flags); 105 106typedef TI_STATUS (*admCtrl_getWPAMixedModeSupport_t)(admCtrl_t *pAdmCtrl, UINT32 *support); 107 108#ifdef EXC_MODULE_INCLUDED 109typedef TI_STATUS (*admCtrl_getNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP *networkEap); 110 111typedef TI_STATUS (*admCtrl_setNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP networkEap); 112#endif 113 114 115typedef BOOL (*admCtrl_getPreAuthStatus_t)(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex); 116 117typedef TI_STATUS (*admCtrl_startPreAuth_t)(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList); 118 119typedef TI_STATUS (*admCtrl_get802_1x_AkmExists_t)(admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists); 120/* Constants */ 121 122/* Flags for Any-WPA (WPA Mixed) mode) - set by the Supplicant */ 123#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_AUTH_MODE 0x00000001 124#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_CIPHER 0x00000002 125 126#define ADMCTRL_WPA_OPTION_MAXVALUE 0x00000003 127 128 129/* Structures */ 130 131/* PMKID cache structures */ 132/* (PMKID cache used for WPA2 pre-authentication */ 133 134#define PMKID_VALUE_SIZE 16 135typedef UINT8 pmkidValue_t[PMKID_VALUE_SIZE]; 136 137#define PMKID_MAX_NUMBER 16 138 139typedef struct 140{ 141 macAddress_t bssId; 142 pmkidValue_t pmkId; 143 BOOL preAuthenticate; 144 145} pmkidEntry_t; 146 147#define ADMCTRL_PMKID_CACHE_SIZE 32 148 149typedef struct 150{ 151 ssid_t ssid; 152 UINT8 entriesNumber; 153 UINT8 nextFreeEntry; 154 pmkidEntry_t pmkidTbl[ADMCTRL_PMKID_CACHE_SIZE]; 155} pmkid_cache_t; 156 157 158 159/* Admission control object */ 160struct _admCtrl_t 161{ 162 rsn_paeRole_t role; 163 authSuite_e authSuite; 164 rsn_networkMode_t networkMode; 165 externalAuthMode_e externalAuthMode; 166 cipherSuite_e unicastSuite; 167 cipherSuite_e broadcastSuite; 168 rsn_keyMngSuite_e keyMngSuite; 169 BOOL wpaAkmExists; 170 BOOL mixedMode; 171 UINT8 AP_IP_Address[4]; 172 UINT16 replayCnt; 173 UINT8 aironetIeReserved[8]; 174 BOOL encrInSw; 175 BOOL micInSw; 176 BOOL setSiteFirst; 177#ifdef EXC_MODULE_INCLUDED 178 OS_EXC_NETWORK_EAP networkEapMode; 179#endif 180 BOOL excSupport; 181 BOOL proxyArpEnabled; 182 183 BOOL WPAMixedModeEnable; 184 UINT32 WPAPromoteFlags; 185 186 BOOL preAuthSupport; 187 UINT32 preAuthTimeout; 188 UINT8 MaxNumOfPMKIDs; 189 pmkid_cache_t pmkid_cache; 190 191 struct _rsn_t *pRsn; 192 TI_HANDLE hMlme; 193 TI_HANDLE hRx; 194 TI_HANDLE hReport; 195 TI_HANDLE hOs; 196 TI_HANDLE hExcMngr; 197 TI_HANDLE hPowerMgr; 198 TI_HANDLE hEvHandler; 199 200 201 admCtrl_setAuthSuite_t setAuthSuite; 202 admCtrl_getAuthSuite_t getAuthSuite; 203 admCtrl_setNetworkMode_t setNetworkMode; 204 admCtrl_setUcastCipherSuite_t setUcastSuite; 205 admCtrl_setBcastCipherSuite_t setBcastSuite; 206 admCtrl_setExtAuthMode_t setExtAuthMode; 207 admCtrl_getExtAuthMode_t getExtAuthMode; 208 admCtrl_getCipherSuite_t getCipherSuite; 209 admCtrl_setKeyMngSuite_t setKeyMngSuite; 210 admCtrl_setMixedMode_t setMixedMode; 211 admCtrl_getMixedMode_t getMixedMode; 212 admCtrl_getInfoElement_t getInfoElement; 213 admCtrl_setSite_t setSite; 214 admCtrl_evalSite_t evalSite; 215 admCtrl_getAuthEncrCapability_t getAuthEncrCap; 216 admCtrl_setPMKIDlist_t setPmkidList; 217 admCtrl_getPMKIDlist_t getPmkidList; 218 admCtrl_resetPMKIDlist_t resetPmkidList; 219 admCtrl_setPromoteFlags_t setPromoteFlags; 220 admCtrl_getPromoteFlags_t getPromoteFlags; 221 admCtrl_getWPAMixedModeSupport_t getWPAMixedModeSupport; 222 admCtrl_get802_1x_AkmExists_t get802_1x_AkmExists; 223 224 225#ifdef EXC_MODULE_INCLUDED 226 admCtrl_getNetworkEap_t getNetworkEap; 227 admCtrl_setNetworkEap_t setNetworkEap; 228#endif 229 230 admCtrl_getPreAuthStatus_t getPreAuthStatus; 231 admCtrl_startPreAuth_t startPreAuth; 232 233 void *preAuthTimerWpa2; 234 UINT8 numberOfPreAuthCandidates; 235}; 236 237/* External data definitions */ 238 239/* External functions definitions */ 240 241/* Function prototypes */ 242 243admCtrl_t* admCtrl_create(TI_HANDLE hOs); 244 245TI_STATUS admCtrl_config(TI_HANDLE hAdmCtrl, 246 TI_HANDLE hMlme, 247 TI_HANDLE hRx, 248 TI_HANDLE hReport, 249 TI_HANDLE hOs, 250 struct _rsn_t *pRsn, 251 TI_HANDLE hExcMngr, 252 TI_HANDLE hPowerMgr, 253 TI_HANDLE hEvHandler, 254 rsnInitParams_t *pInitParam); 255 256TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl); 257 258TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl); 259 260TI_STATUS admCtrlWpa_config(admCtrl_t *pAdmCtrl); 261 262TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 **pIe, UINT8 IeId); 263 264TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl); 265 266TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList); 267 268TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList); 269 270TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl); 271 272BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex); 273 274TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList); 275 276TI_STATUS admCtrl_nullGet802_1x_AkmExists(admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists); 277 278void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus); 279 280#endif /* _ADM_H_*/ 281 282