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