1 /* 2 * admCtrlWep.c 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 admCtrlWep.c 35 * \brief Admission control API implimentation 36 * 37 * \see admCtrl.h 38 */ 39 40 /**************************************************************************** 41 * * 42 * MODULE: Admission Control * 43 * PURPOSE: Admission Control Module API * 44 * * 45 ****************************************************************************/ 46 47 #define __FILE_ID__ FILE_ID_18 48 #include "osApi.h" 49 #include "paramOut.h" 50 #include "fsm.h" 51 #include "report.h" 52 #include "mlmeApi.h" 53 #include "DataCtrl_Api.h" 54 #include "rsnApi.h" 55 #include "admCtrl.h" 56 #include "rsn.h" 57 #include "admCtrl.h" 58 #ifdef XCC_MODULE_INCLUDED 59 #include "admCtrlWpa.h" 60 #include "admCtrlXCC.h" 61 #endif 62 #include "TWDriver.h" 63 64 65 /* Constants */ 66 67 /* Enumerations */ 68 69 /* Typedefs */ 70 71 /* Structures */ 72 73 /* External data definitions */ 74 75 /* Local functions definitions */ 76 77 /* Global variables */ 78 79 /* Function prototypes */ 80 TI_STATUS admCtrlWep_getInfoElement(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength); 81 82 TI_STATUS admCtrlWep_setSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen); 83 84 TI_STATUS admCtrlWep_evalSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation); 85 86 87 /** 88 * 89 * admCtrlWep_config - Configure XCC admission control. 90 * 91 * \b Description: 92 * 93 * Configure XCC admission control. 94 * 95 * \b ARGS: 96 * 97 * I - pAdmCtrl - context \n 98 * 99 * \b RETURNS: 100 * 101 * TI_OK on success, TI_NOK on failure. 102 * 103 * \sa 104 */ 105 TI_STATUS admCtrlWep_config(admCtrl_t *pAdmCtrl) 106 { 107 TI_STATUS status; 108 TRsnPaeConfig paeConfig; 109 110 111 /* set admission control parameters */ 112 pAdmCtrl->externalAuthMode = (EExternalAuthMode)pAdmCtrl->authSuite; 113 if ((pAdmCtrl->unicastSuite != TWD_CIPHER_WEP) && 114 (pAdmCtrl->unicastSuite != TWD_CIPHER_CKIP)) 115 { 116 pAdmCtrl->unicastSuite = TWD_CIPHER_WEP; 117 } 118 119 if ((pAdmCtrl->broadcastSuite != TWD_CIPHER_WEP) && 120 (pAdmCtrl->broadcastSuite != TWD_CIPHER_CKIP)) 121 { 122 pAdmCtrl->broadcastSuite = TWD_CIPHER_WEP; 123 } 124 125 /* set callback functions (API) */ 126 pAdmCtrl->getInfoElement = admCtrlWep_getInfoElement; 127 pAdmCtrl->setSite = admCtrlWep_setSite; 128 pAdmCtrl->evalSite = admCtrlWep_evalSite; 129 pAdmCtrl->getPreAuthStatus = admCtrl_nullGetPreAuthStatus; 130 pAdmCtrl->startPreAuth = admCtrl_nullStartPreAuth; 131 pAdmCtrl->get802_1x_AkmExists = admCtrl_nullGet802_1x_AkmExists; 132 133 134 135 pAdmCtrl->keyMngSuite = RSN_KEY_MNG_802_1X; 136 137 /* set PAE parametrs */ 138 paeConfig.authProtocol = pAdmCtrl->externalAuthMode; 139 paeConfig.unicastSuite = pAdmCtrl->unicastSuite; 140 paeConfig.broadcastSuite = pAdmCtrl->broadcastSuite; 141 paeConfig.keyExchangeProtocol = pAdmCtrl->keyMngSuite; 142 /* set default PAE configuration */ 143 status = pAdmCtrl->pRsn->setPaeConfig(pAdmCtrl->pRsn, &paeConfig); 144 145 return status; 146 } 147 148 149 /** 150 * 151 * admCtrlWep_getInfoElement - Build the current information element. 152 * 153 * \b Description: 154 * 155 * Build the current information element. 156 * 157 * \b ARGS: 158 * 159 * I - pAdmCtrl - context \n 160 * I - pIe - IE buffer \n 161 * I - pLength - length of IE \n 162 * 163 * \b RETURNS: 164 * 165 * TI_OK on success, TI_NOK on failure. 166 * 167 * \sa 168 */ 169 TI_STATUS admCtrlWep_getInfoElement(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength) 170 { 171 172 if ((pAdmCtrl==NULL) || (pLength==NULL)) 173 { 174 return TI_NOK; 175 } 176 *pLength = 0; 177 return TI_OK; 178 179 } 180 /** 181 * 182 * admCtrlWep_setSite - Set current primary site parameters for registration. 183 * 184 * \b Description: 185 * 186 * Set current primary site parameters for registration. 187 * 188 * \b ARGS: 189 * 190 * I - pAdmCtrl - context \n 191 * I - pRsnData - site's RSN data \n 192 * O - pAssocIe - result IE of evaluation \n 193 * O - pAssocIeLen - length of result IE of evaluation \n 194 * 195 * \b RETURNS: 196 * 197 * TI_OK on site is aproved, TI_NOK on site is rejected. 198 * 199 * \sa 200 */ 201 TI_STATUS admCtrlWep_setSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen) 202 { 203 TI_STATUS status; 204 paramInfo_t param; 205 TTwdParamInfo tTwdParam; 206 EAuthSuite authSuite; 207 208 #ifdef XCC_MODULE_INCLUDED 209 if (mlmeParser_ParseIeBuffer (pAdmCtrl->hMlme, pRsnData->pIe, pRsnData->ieLen, XCC_EXT_1_IE_ID, NULL, NULL, 0)) 210 { 211 pAdmCtrl->XCCSupport = TI_TRUE; 212 return (admCtrlXCC_setSite(pAdmCtrl, pRsnData, pAssocIe, pAssocIeLen)); 213 } 214 #endif 215 216 217 pAdmCtrl->XCCSupport = TI_FALSE; 218 pAdmCtrl->unicastSuite = TWD_CIPHER_WEP; 219 pAdmCtrl->broadcastSuite = TWD_CIPHER_WEP; 220 221 admCtrlWep_config(pAdmCtrl); 222 223 authSuite = pAdmCtrl->authSuite; 224 225 /* Config the default keys */ 226 if ((authSuite == RSN_AUTH_SHARED_KEY) || (authSuite == RSN_AUTH_AUTO_SWITCH)) 227 { /* Configure Security status in HAL */ 228 tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID; 229 tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_WEP; 230 status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam); 231 /* Configure the keys in HAL */ 232 rsn_setDefaultKeys(pAdmCtrl->pRsn); 233 } 234 235 236 /* Now we configure the MLME module with the 802.11 legacy authentication suite, 237 THe MLME will configure later the authentication module */ 238 param.paramType = MLME_LEGACY_TYPE_PARAM; 239 #ifdef XCC_MODULE_INCLUDED 240 if (pAdmCtrl->networkEapMode!=OS_XCC_NETWORK_EAP_OFF) 241 { 242 param.content.mlmeLegacyAuthType = AUTH_LEGACY_RESERVED1; 243 } 244 else 245 #endif 246 { 247 switch (authSuite) 248 { 249 case RSN_AUTH_OPEN: 250 param.content.mlmeLegacyAuthType = AUTH_LEGACY_OPEN_SYSTEM; 251 break; 252 253 case RSN_AUTH_SHARED_KEY: 254 param.content.mlmeLegacyAuthType = AUTH_LEGACY_SHARED_KEY; 255 break; 256 257 case RSN_AUTH_AUTO_SWITCH: 258 param.content.mlmeLegacyAuthType = AUTH_LEGACY_AUTO_SWITCH; 259 TRACE0(pAdmCtrl->hReport , REPORT_SEVERITY_INFORMATION, "WEP admCtrl mlme_setParam, RSN_AUTH_AUTO_SWITCH\n"); 260 break; 261 262 default: 263 return TI_NOK; 264 } 265 } 266 267 status = mlme_setParam(pAdmCtrl->hMlme, ¶m); 268 if (status != TI_OK) 269 { 270 return status; 271 } 272 273 param.paramType = RX_DATA_EAPOL_DESTINATION_PARAM; 274 param.content.rxDataEapolDestination = OS_ABS_LAYER; 275 status = rxData_setParam(pAdmCtrl->hRx, ¶m); 276 if (status != TI_OK) 277 { 278 return status; 279 } 280 281 /* Configure Security status in HAL */ 282 tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID; 283 tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_WEP; 284 status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam); 285 286 return status; 287 288 } 289 290 /** 291 * 292 * admCtrlWep_evalSite - Evaluate site for registration. 293 * 294 * \b Description: 295 * 296 * evaluate site RSN capabilities against the station's cap. 297 * If the BSS type is infrastructure, the station matches the site only if it's WEP status is same as the site 298 * In IBSS, it does not matter 299 * 300 * \b ARGS: 301 * 302 * I - pAdmCtrl - Context \n 303 * I - pRsnData - site's RSN data \n 304 * O - pEvaluation - Result of evaluation \n 305 * 306 * \b RETURNS: 307 * 308 * TI_OK 309 * 310 * \sa 311 */ 312 TI_STATUS admCtrlWep_evalSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation) 313 { 314 *pEvaluation = 0; 315 316 if (pRsnData==NULL) 317 { 318 return TI_NOK; 319 } 320 pAdmCtrl->setSiteFirst = TI_FALSE; 321 322 #ifdef XCC_MODULE_INCLUDED 323 if (admCtrlXCC_evalSite(pAdmCtrl, pRsnData, pRsnSiteParams, pEvaluation, &pAdmCtrl->XCCSupport) != TI_OK) 324 { 325 return TI_NOK; 326 } 327 #else 328 pAdmCtrl->XCCSupport = TI_FALSE; 329 #endif /*XCC_MODULE_INCLUDED*/ 330 if (!pAdmCtrl->XCCSupport) 331 { /* WEP only */ 332 *pEvaluation = 1; 333 } 334 335 /* Check privacy bit if not in mixed mode */ 336 if (!pAdmCtrl->mixedMode) 337 { /* There's no mixed mode, so make sure that the privacy Bit matches the privacy mode*/ 338 if (!pRsnData->privacy) 339 { 340 *pEvaluation = 0; 341 return TI_NOK; 342 } 343 } 344 345 return TI_OK; 346 } 347 348 349 350 351