/* * admCtrlWep.c * * 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 admCtrlWep.c * \brief Admission control API implimentation * * \see admCtrl.h */ /**************************************************************************** * * * MODULE: Admission Control * * PURPOSE: Admission Control Module API * * * ****************************************************************************/ #define __FILE_ID__ FILE_ID_18 #include "osApi.h" #include "paramOut.h" #include "fsm.h" #include "report.h" #include "mlmeApi.h" #include "DataCtrl_Api.h" #include "rsnApi.h" #include "admCtrl.h" #include "rsn.h" #include "admCtrl.h" #ifdef XCC_MODULE_INCLUDED #include "admCtrlWpa.h" #include "admCtrlXCC.h" #endif #include "TWDriver.h" /* Constants */ /* Enumerations */ /* Typedefs */ /* Structures */ /* External data definitions */ /* Local functions definitions */ /* Global variables */ /* Function prototypes */ TI_STATUS admCtrlWep_getInfoElement(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength); TI_STATUS admCtrlWep_setSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen); TI_STATUS admCtrlWep_evalSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation); /** * * admCtrlWep_config - Configure XCC admission control. * * \b Description: * * Configure XCC admission control. * * \b ARGS: * * I - pAdmCtrl - context \n * * \b RETURNS: * * TI_OK on success, TI_NOK on failure. * * \sa */ TI_STATUS admCtrlWep_config(admCtrl_t *pAdmCtrl) { TI_STATUS status; TRsnPaeConfig paeConfig; /* set admission control parameters */ pAdmCtrl->externalAuthMode = (EExternalAuthMode)pAdmCtrl->authSuite; if ((pAdmCtrl->unicastSuite != TWD_CIPHER_WEP) && (pAdmCtrl->unicastSuite != TWD_CIPHER_CKIP)) { pAdmCtrl->unicastSuite = TWD_CIPHER_WEP; } if ((pAdmCtrl->broadcastSuite != TWD_CIPHER_WEP) && (pAdmCtrl->broadcastSuite != TWD_CIPHER_CKIP)) { pAdmCtrl->broadcastSuite = TWD_CIPHER_WEP; } /* set callback functions (API) */ pAdmCtrl->getInfoElement = admCtrlWep_getInfoElement; pAdmCtrl->setSite = admCtrlWep_setSite; pAdmCtrl->evalSite = admCtrlWep_evalSite; pAdmCtrl->getPreAuthStatus = admCtrl_nullGetPreAuthStatus; pAdmCtrl->startPreAuth = admCtrl_nullStartPreAuth; pAdmCtrl->get802_1x_AkmExists = admCtrl_nullGet802_1x_AkmExists; pAdmCtrl->keyMngSuite = RSN_KEY_MNG_802_1X; /* set PAE parametrs */ paeConfig.authProtocol = pAdmCtrl->externalAuthMode; paeConfig.unicastSuite = pAdmCtrl->unicastSuite; paeConfig.broadcastSuite = pAdmCtrl->broadcastSuite; paeConfig.keyExchangeProtocol = pAdmCtrl->keyMngSuite; /* set default PAE configuration */ status = pAdmCtrl->pRsn->setPaeConfig(pAdmCtrl->pRsn, &paeConfig); return status; } /** * * admCtrlWep_getInfoElement - Build the current information element. * * \b Description: * * Build the current information element. * * \b ARGS: * * I - pAdmCtrl - context \n * I - pIe - IE buffer \n * I - pLength - length of IE \n * * \b RETURNS: * * TI_OK on success, TI_NOK on failure. * * \sa */ TI_STATUS admCtrlWep_getInfoElement(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength) { if ((pAdmCtrl==NULL) || (pLength==NULL)) { return TI_NOK; } *pLength = 0; return TI_OK; } /** * * admCtrlWep_setSite - Set current primary site parameters for registration. * * \b Description: * * Set current primary site parameters for registration. * * \b ARGS: * * I - pAdmCtrl - context \n * I - pRsnData - site's RSN data \n * O - pAssocIe - result IE of evaluation \n * O - pAssocIeLen - length of result IE of evaluation \n * * \b RETURNS: * * TI_OK on site is aproved, TI_NOK on site is rejected. * * \sa */ TI_STATUS admCtrlWep_setSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen) { TI_STATUS status; paramInfo_t param; TTwdParamInfo tTwdParam; EAuthSuite authSuite; #ifdef XCC_MODULE_INCLUDED if (mlmeParser_ParseIeBuffer (pAdmCtrl->hMlme, pRsnData->pIe, pRsnData->ieLen, XCC_EXT_1_IE_ID, NULL, NULL, 0)) { pAdmCtrl->XCCSupport = TI_TRUE; return (admCtrlXCC_setSite(pAdmCtrl, pRsnData, pAssocIe, pAssocIeLen)); } #endif pAdmCtrl->XCCSupport = TI_FALSE; pAdmCtrl->unicastSuite = TWD_CIPHER_WEP; pAdmCtrl->broadcastSuite = TWD_CIPHER_WEP; admCtrlWep_config(pAdmCtrl); authSuite = pAdmCtrl->authSuite; /* Config the default keys */ if ((authSuite == RSN_AUTH_SHARED_KEY) || (authSuite == RSN_AUTH_AUTO_SWITCH)) { /* Configure Security status in HAL */ tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID; tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_WEP; status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam); /* Configure the keys in HAL */ rsn_setDefaultKeys(pAdmCtrl->pRsn); } /* Now we configure the MLME module with the 802.11 legacy authentication suite, THe MLME will configure later the authentication module */ param.paramType = MLME_LEGACY_TYPE_PARAM; #ifdef XCC_MODULE_INCLUDED if (pAdmCtrl->networkEapMode!=OS_XCC_NETWORK_EAP_OFF) { param.content.mlmeLegacyAuthType = AUTH_LEGACY_RESERVED1; } else #endif { switch (authSuite) { case RSN_AUTH_OPEN: param.content.mlmeLegacyAuthType = AUTH_LEGACY_OPEN_SYSTEM; break; case RSN_AUTH_SHARED_KEY: param.content.mlmeLegacyAuthType = AUTH_LEGACY_SHARED_KEY; break; case RSN_AUTH_AUTO_SWITCH: param.content.mlmeLegacyAuthType = AUTH_LEGACY_AUTO_SWITCH; TRACE0(pAdmCtrl->hReport , REPORT_SEVERITY_INFORMATION, "WEP admCtrl mlme_setParam, RSN_AUTH_AUTO_SWITCH\n"); break; default: return TI_NOK; } } status = mlme_setParam(pAdmCtrl->hMlme, ¶m); if (status != TI_OK) { return status; } param.paramType = RX_DATA_EAPOL_DESTINATION_PARAM; param.content.rxDataEapolDestination = OS_ABS_LAYER; status = rxData_setParam(pAdmCtrl->hRx, ¶m); if (status != TI_OK) { return status; } /* Configure Security status in HAL */ tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID; tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_WEP; status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam); return status; } /** * * admCtrlWep_evalSite - Evaluate site for registration. * * \b Description: * * evaluate site RSN capabilities against the station's cap. * If the BSS type is infrastructure, the station matches the site only if it's WEP status is same as the site * In IBSS, it does not matter * * \b ARGS: * * I - pAdmCtrl - Context \n * I - pRsnData - site's RSN data \n * O - pEvaluation - Result of evaluation \n * * \b RETURNS: * * TI_OK * * \sa */ TI_STATUS admCtrlWep_evalSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation) { *pEvaluation = 0; if (pRsnData==NULL) { return TI_NOK; } pAdmCtrl->setSiteFirst = TI_FALSE; #ifdef XCC_MODULE_INCLUDED if (admCtrlXCC_evalSite(pAdmCtrl, pRsnData, pRsnSiteParams, pEvaluation, &pAdmCtrl->XCCSupport) != TI_OK) { return TI_NOK; } #else pAdmCtrl->XCCSupport = TI_FALSE; #endif /*XCC_MODULE_INCLUDED*/ if (!pAdmCtrl->XCCSupport) { /* WEP only */ *pEvaluation = 1; } /* Check privacy bit if not in mixed mode */ if (!pAdmCtrl->mixedMode) { /* There's no mixed mode, so make sure that the privacy Bit matches the privacy mode*/ if (!pRsnData->privacy) { *pEvaluation = 0; return TI_NOK; } } return TI_OK; }