164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 364064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 664064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 3564064216a8433360745f69edddce19a606659163The Android Open Source Project 3664064216a8433360745f69edddce19a606659163The Android Open Source Project 3764064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file rsn.c 3864064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief 802.11 rsniation SM source 3964064216a8433360745f69edddce19a606659163The Android Open Source Project * 4064064216a8433360745f69edddce19a606659163The Android Open Source Project * \see rsnSM.h 4164064216a8433360745f69edddce19a606659163The Android Open Source Project */ 4264064216a8433360745f69edddce19a606659163The Android Open Source Project 4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h" 4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h" 4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h" 4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Ethernet.h" 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h" 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_prm.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "memMngrEx.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainSecSm.h" 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "admCtrl.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsnApi.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsn.h" 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "keyParser.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "EvHandler.h" 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TI_IPC_Api.h" 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "802_11Defs.h" 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "public_infoele.h" 6664064216a8433360745f69edddce19a606659163The Android Open Source Project 6764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "admCtrlWpa.h" 6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "excMngr.h" 7064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "admCtrlExc.h" 7164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 7264064216a8433360745f69edddce19a606659163The Android Open Source Project 7364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */ 7464064216a8433360745f69edddce19a606659163The Android Open Source Project 7564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */ 7664064216a8433360745f69edddce19a606659163The Android Open Source Project 7764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */ 7864064216a8433360745f69edddce19a606659163The Android Open Source Project 7964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */ 8064064216a8433360745f69edddce19a606659163The Android Open Source Project 8164064216a8433360745f69edddce19a606659163The Android Open Source Project/* External data definitions */ 8264064216a8433360745f69edddce19a606659163The Android Open Source Project 8364064216a8433360745f69edddce19a606659163The Android Open Source Project/* External functions definitions */ 8464064216a8433360745f69edddce19a606659163The Android Open Source Project 8564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */ 8664064216a8433360745f69edddce19a606659163The Android Open Source Project 8764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local function prototypes */ 8864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_sendKeysNotSet(rsn_t *pRsn); 8964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rsn_groupReKeyTimeout(TI_HANDLE hRsn); 9064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rsn_micFailureReportTimeout(TI_HANDLE hRsn); 9164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rsn_siteBanEntry_t * findEntryForInsert(TI_HANDLE hRsn); 9264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rsn_siteBanEntry_t * findBannedSiteAndCleanup(TI_HANDLE hRsn, macAddress_t siteBssid); 9364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Comment out the call to clearBannedSiteList due to fail in WiFi mic attack test */ 9464064216a8433360745f69edddce19a606659163The Android Open Source Project/*static void clearBannedSiteList(TI_HANDLE hRsn);*/ 9564064216a8433360745f69edddce19a606659163The Android Open Source Project 9664064216a8433360745f69edddce19a606659163The Android Open Source Project 9764064216a8433360745f69edddce19a606659163The Android Open Source Project 9864064216a8433360745f69edddce19a606659163The Android Open Source Project/* functions */ 9964064216a8433360745f69edddce19a606659163The Android Open Source Project 10064064216a8433360745f69edddce19a606659163The Android Open Source Project/** 10164064216a8433360745f69edddce19a606659163The Android Open Source Project* 10264064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_Create - allocate memory for rsniation SM 10364064216a8433360745f69edddce19a606659163The Android Open Source Project* 10464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 10564064216a8433360745f69edddce19a606659163The Android Open Source Project* 10664064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocate memory for rsniation SM. \n 10764064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocates memory for Rsniation context. \n 10864064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocates memory for rsniation timer. \n 10964064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocates memory for rsniation SM matrix. \n 11064064216a8433360745f69edddce19a606659163The Android Open Source Project* 11164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 11264064216a8433360745f69edddce19a606659163The Android Open Source Project* 11364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hOs - OS context \n 11464064216a8433360745f69edddce19a606659163The Android Open Source Project* 11564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 11664064216a8433360745f69edddce19a606659163The Android Open Source Project* 11764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 11864064216a8433360745f69edddce19a606659163The Android Open Source Project* 11964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_mainSecKeysOnlyStop() 12064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 12164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE rsn_create(TI_HANDLE hOs) 12264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 12364064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 12464064216a8433360745f69edddce19a606659163The Android Open Source Project 12564064216a8433360745f69edddce19a606659163The Android Open Source Project /* allocate rsniation context memory */ 12664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)os_memoryAlloc (hOs, sizeof(rsn_t)); 12764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 12864064216a8433360745f69edddce19a606659163The Android Open Source Project { 12964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 13064064216a8433360745f69edddce19a606659163The Android Open Source Project } 13164064216a8433360745f69edddce19a606659163The Android Open Source Project 13264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero (hOs, pRsn, sizeof(rsn_t)); 13364064216a8433360745f69edddce19a606659163The Android Open Source Project 13464064216a8433360745f69edddce19a606659163The Android Open Source Project /* create admission control */ 13564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl = admCtrl_create (hOs); 13664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->pAdmCtrl == NULL) 13764064216a8433360745f69edddce19a606659163The Android Open Source Project { 13864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree (hOs, pRsn, sizeof(rsn_t)); 13964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 14064064216a8433360745f69edddce19a606659163The Android Open Source Project } 14164064216a8433360745f69edddce19a606659163The Android Open Source Project 14264064216a8433360745f69edddce19a606659163The Android Open Source Project /* create main security SM */ 14364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pMainSecSm = mainSec_create (hOs); 14464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->pMainSecSm == NULL) 14564064216a8433360745f69edddce19a606659163The Android Open Source Project { 14664064216a8433360745f69edddce19a606659163The Android Open Source Project admCtrl_unload (pRsn->pAdmCtrl); 14764064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree (hOs, pRsn, sizeof(rsn_t)); 14864064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 14964064216a8433360745f69edddce19a606659163The Android Open Source Project } 15064064216a8433360745f69edddce19a606659163The Android Open Source Project 15164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pKeyParser = pRsn->pMainSecSm->pKeyParser; 15264064216a8433360745f69edddce19a606659163The Android Open Source Project 15364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->micFailureReportWaitTimer = os_timerCreate (hOs, rsn_micFailureReportTimeout, pRsn); 15464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->micFailureReportWaitTimer == NULL) 15564064216a8433360745f69edddce19a606659163The Android Open Source Project { 15664064216a8433360745f69edddce19a606659163The Android Open Source Project mainSec_unload (pRsn->pMainSecSm); 15764064216a8433360745f69edddce19a606659163The Android Open Source Project admCtrl_unload (pRsn->pAdmCtrl); 15864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree (hOs, pRsn, sizeof(rsn_t)); 15964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 16064064216a8433360745f69edddce19a606659163The Android Open Source Project } 16164064216a8433360745f69edddce19a606659163The Android Open Source Project 16264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->micFailureReKeyTimer = os_timerCreate (hOs, rsn_groupReKeyTimeout, pRsn); 16364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->micFailureReKeyTimer == NULL) 16464064216a8433360745f69edddce19a606659163The Android Open Source Project { 16564064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerDestroy (hOs, pRsn->micFailureReportWaitTimer); 16664064216a8433360745f69edddce19a606659163The Android Open Source Project mainSec_unload (pRsn->pMainSecSm); 16764064216a8433360745f69edddce19a606659163The Android Open Source Project admCtrl_unload (pRsn->pAdmCtrl); 16864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree (hOs, pRsn, sizeof(rsn_t)); 16964064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 17064064216a8433360745f69edddce19a606659163The Android Open Source Project } 17164064216a8433360745f69edddce19a606659163The Android Open Source Project 17264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hOs = hOs; 17364064216a8433360745f69edddce19a606659163The Android Open Source Project 17464064216a8433360745f69edddce19a606659163The Android Open Source Project return pRsn; 17564064216a8433360745f69edddce19a606659163The Android Open Source Project} 17664064216a8433360745f69edddce19a606659163The Android Open Source Project 17764064216a8433360745f69edddce19a606659163The Android Open Source Project 17864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 17964064216a8433360745f69edddce19a606659163The Android Open Source Project* 18064064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_Unload - unload rsniation SM from memory 18164064216a8433360745f69edddce19a606659163The Android Open Source Project* 18264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 18364064216a8433360745f69edddce19a606659163The Android Open Source Project* 18464064216a8433360745f69edddce19a606659163The Android Open Source Project* Unload rsniation SM from memory 18564064216a8433360745f69edddce19a606659163The Android Open Source Project* 18664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 18764064216a8433360745f69edddce19a606659163The Android Open Source Project* 18864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - rsniation SM context \n 18964064216a8433360745f69edddce19a606659163The Android Open Source Project* 19064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 19164064216a8433360745f69edddce19a606659163The Android Open Source Project* 19264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 19364064216a8433360745f69edddce19a606659163The Android Open Source Project* 19464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_mainSecKeysOnlyStop() 19564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 19664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_unload (TI_HANDLE hRsn) 19764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 19864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 19964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 20064064216a8433360745f69edddce19a606659163The Android Open Source Project 20164064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRsn == NULL) 20264064216a8433360745f69edddce19a606659163The Android Open Source Project { 20364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 20464064216a8433360745f69edddce19a606659163The Android Open Source Project } 20564064216a8433360745f69edddce19a606659163The Android Open Source Project 20664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 20764064216a8433360745f69edddce19a606659163The Android Open Source Project 20864064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop (pRsn->hOs, pRsn->micFailureReportWaitTimer); 20964064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerDestroy (pRsn->hOs, pRsn->micFailureReportWaitTimer); 21064064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop (pRsn->hOs, pRsn->micFailureReKeyTimer); 21164064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerDestroy (pRsn->hOs, pRsn->micFailureReKeyTimer); 21264064216a8433360745f69edddce19a606659163The Android Open Source Project 21364064216a8433360745f69edddce19a606659163The Android Open Source Project status = admCtrl_unload (pRsn->pAdmCtrl); 21464064216a8433360745f69edddce19a606659163The Android Open Source Project status = mainSec_unload (pRsn->pMainSecSm); 21564064216a8433360745f69edddce19a606659163The Android Open Source Project 21664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree (pRsn->hOs, hRsn, sizeof(rsn_t)); 21764064216a8433360745f69edddce19a606659163The Android Open Source Project 21864064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 21964064216a8433360745f69edddce19a606659163The Android Open Source Project} 22064064216a8433360745f69edddce19a606659163The Android Open Source Project 22164064216a8433360745f69edddce19a606659163The Android Open Source Project 22264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 22364064216a8433360745f69edddce19a606659163The Android Open Source Project* 22464064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_smConfig - configure a new rsniation SM 22564064216a8433360745f69edddce19a606659163The Android Open Source Project* 22664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 22764064216a8433360745f69edddce19a606659163The Android Open Source Project* 22864064216a8433360745f69edddce19a606659163The Android Open Source Project* Configure a new rsniation SM. 22964064216a8433360745f69edddce19a606659163The Android Open Source Project* 23064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 23164064216a8433360745f69edddce19a606659163The Android Open Source Project* 23264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 23364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hMlme - MLME SM context \n 23464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hSiteMgr - Site manager context \n 23564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hCtrlData - Control data context \n 23664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hTxData - TX data context \n 23764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hHalCtrl - Hal control context \n 23864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hReport - Report context \n 23964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hOs - OS context \n 24064064216a8433360745f69edddce19a606659163The Android Open Source Project* I - rsnTimeout - Rsniation SM timeout \n 24164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - rsnMaxCount - Max number of rsniation requests to send \n 24264064216a8433360745f69edddce19a606659163The Android Open Source Project* 24364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 24464064216a8433360745f69edddce19a606659163The Android Open Source Project* 24564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 24664064216a8433360745f69edddce19a606659163The Android Open Source Project* 24764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Create, rsn_Unload 24864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 24964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_config (TI_HANDLE hRsn, 25064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTx, 25164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hRx, 25264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hConn, 25364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hMlme, 25464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hCtrlData, 25564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hWhalCtrl, 25664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hMemMgr, 25764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSiteMgr, 25864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 25964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hOs, 26064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hExcMngr, 26164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hPowerMgr, 26264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hEvHandler, 26364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSmeSm, 26464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hAPConn, 26564064216a8433360745f69edddce19a606659163The Android Open Source Project rsnInitParams_t *pInitParam) 26664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 26764064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 26864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 26964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 27064064216a8433360745f69edddce19a606659163The Android Open Source Project 27164064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRsn == NULL) 27264064216a8433360745f69edddce19a606659163The Android Open Source Project { 27364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 27464064216a8433360745f69edddce19a606659163The Android Open Source Project } 27564064216a8433360745f69edddce19a606659163The Android Open Source Project 27664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 27764064216a8433360745f69edddce19a606659163The Android Open Source Project 27864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->groupKeyUpdate = GROUP_KEY_UPDATE_FALSE; 27964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->PrivacyOptionImplemented = TRUE; 28064064216a8433360745f69edddce19a606659163The Android Open Source Project 28164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hTx = hTx; 28264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hRx = hRx; 28364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hConn = hConn; 28464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hWhalCtrl = hWhalCtrl; 28564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hCtrlData = hCtrlData; 28664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hMemMgr = hMemMgr; 28764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hSiteMgr= hSiteMgr; 28864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hReport = hReport; 28964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hOs = hOs; 29064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hExcMngr = hExcMngr; 29164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hEvHandler = hEvHandler; 29264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hSmeSm = hSmeSm; 29364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hAPConn = hAPConn; 29464064216a8433360745f69edddce19a606659163The Android Open Source Project 29564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->setPaeConfig = rsn_setPaeConfig; 29664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->getNetworkMode = rsn_getNetworkMode; 29764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->setKey = rsn_setKey; 29864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->removeKey = rsn_removeKey; 29964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->reportStatus = rsn_reportStatus; 30064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->setDefaultKeyId = rsn_setDefaultKeyId; 30164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = TRUE; 30264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->eapType = OS_EAP_TYPE_NONE; 30364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->numOfBannedSites = 0; 30464064216a8433360745f69edddce19a606659163The Android Open Source Project 30564064216a8433360745f69edddce19a606659163The Android Open Source Project /* config the admission control with the authentication suite selected. 30664064216a8433360745f69edddce19a606659163The Android Open Source Project Admission control will configure the main security SM. */ 30764064216a8433360745f69edddce19a606659163The Android Open Source Project status = admCtrl_config (pRsn->pAdmCtrl, hMlme, hRx, hReport, hOs, pRsn, hExcMngr, hPowerMgr, hEvHandler, pInitParam); 30864064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 30964064216a8433360745f69edddce19a606659163The Android Open Source Project { 31064064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 31164064216a8433360745f69edddce19a606659163The Android Open Source Project } 31264064216a8433360745f69edddce19a606659163The Android Open Source Project 31364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure keys from registry */ 31464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pInitParam->privacyOn) 31564064216a8433360745f69edddce19a606659163The Android Open Source Project { 31664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepStaticKey = TRUE; 31764064216a8433360745f69edddce19a606659163The Android Open Source Project } 31864064216a8433360745f69edddce19a606659163The Android Open Source Project 31964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeyId = pInitParam->defaultKeyId; 32064064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 32164064216a8433360745f69edddce19a606659163The Android Open Source Project { 32264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (hOs, &pRsn->keys[keyIndex], &pInitParam->keys[keyIndex], sizeof(securityKeys_t)); 32364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->keys[keyIndex].keyType != NULL_KEY) 32464064216a8433360745f69edddce19a606659163The Android Open Source Project { 32564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepDefaultKeys[keyIndex] = TRUE; 32664064216a8433360745f69edddce19a606659163The Android Open Source Project } 32764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys_en [keyIndex] = FALSE; 32864064216a8433360745f69edddce19a606659163The Android Open Source Project } 32964064216a8433360745f69edddce19a606659163The Android Open Source Project 33064064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 33164064216a8433360745f69edddce19a606659163The Android Open Source Project} 33264064216a8433360745f69edddce19a606659163The Android Open Source Project 33364064216a8433360745f69edddce19a606659163The Android Open Source Project 33464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 33564064216a8433360745f69edddce19a606659163The Android Open Source Project* 33664064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_reconfig - re-configure a rsniation 33764064216a8433360745f69edddce19a606659163The Android Open Source Project* 33864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 33964064216a8433360745f69edddce19a606659163The Android Open Source Project* 34064064216a8433360745f69edddce19a606659163The Android Open Source Project* Re-configure rsniation 34164064216a8433360745f69edddce19a606659163The Android Open Source Project* 34264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 34364064216a8433360745f69edddce19a606659163The Android Open Source Project* 34464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 34564064216a8433360745f69edddce19a606659163The Android Open Source Project* 34664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 34764064216a8433360745f69edddce19a606659163The Android Open Source Project* 34864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 34964064216a8433360745f69edddce19a606659163The Android Open Source Project* 35064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Create, rsn_Unload 35164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 35264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_reconfig (TI_HANDLE hRsn) 35364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 35464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn = (rsn_t *)hRsn; 35564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 35664064216a8433360745f69edddce19a606659163The Android Open Source Project 35764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mark all keys as removed */ 35864064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 35964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys_en [keyIndex] = FALSE; 36064064216a8433360745f69edddce19a606659163The Android Open Source Project 36164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 36264064216a8433360745f69edddce19a606659163The Android Open Source Project} 36364064216a8433360745f69edddce19a606659163The Android Open Source Project 36464064216a8433360745f69edddce19a606659163The Android Open Source Project 36564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 36664064216a8433360745f69edddce19a606659163The Android Open Source Project* 36764064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_setDefaultKeys - 36864064216a8433360745f69edddce19a606659163The Android Open Source Project* 36964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 37064064216a8433360745f69edddce19a606659163The Android Open Source Project* 37164064216a8433360745f69edddce19a606659163The Android Open Source Project* 37264064216a8433360745f69edddce19a606659163The Android Open Source Project* 37364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 37464064216a8433360745f69edddce19a606659163The Android Open Source Project* 37564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsn SM context \n 37664064216a8433360745f69edddce19a606659163The Android Open Source Project* 37764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 37864064216a8433360745f69edddce19a606659163The Android Open Source Project* 37964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 38064064216a8433360745f69edddce19a606659163The Android Open Source Project* 38164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Stop, rsn_Recv 38264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 38364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setDefaultKeys(rsn_t *pRsn) 38464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 38564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 38664064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 38764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 38864064216a8433360745f69edddce19a606659163The Android Open Source Project 38964064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 39064064216a8433360745f69edddce19a606659163The Android Open Source Project { 39164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set the WEP key to the HAL */ 39264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->wepDefaultKeys[keyIndex] /*pRsn->keys[keyIndex].encLen>0*/) 39364064216a8433360745f69edddce19a606659163The Android Open Source Project { 39464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Change key type to WEP-key before setting*/ 39564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyType = WEP_KEY; 39664064216a8433360745f69edddce19a606659163The Android Open Source Project 39764064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pMainSecSm->setKey (pRsn->pMainSecSm, &pRsn->keys[keyIndex]); 39864064216a8433360745f69edddce19a606659163The Android Open Source Project 39964064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 40064064216a8433360745f69edddce19a606659163The Android Open Source Project { 40164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRsn->hReport, RSN_MODULE_LOG, 40264064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Setting key #%d failed \n", keyIndex)); 40364064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 40464064216a8433360745f69edddce19a606659163The Android Open Source Project } 40564064216a8433360745f69edddce19a606659163The Android Open Source Project } 40664064216a8433360745f69edddce19a606659163The Android Open Source Project } 40764064216a8433360745f69edddce19a606659163The Android Open Source Project 40864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now we configure default key ID to the HAL */ 40964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->defaultKeyId < MAX_KEYS_NUM) 41064064216a8433360745f69edddce19a606659163The Android Open Source Project { 41164064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM; 41264064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_buf = &pRsn->defaultKeyId; 41364064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_Func = NULL; 41464064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_handle = NULL; 41564064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam (pRsn->hWhalCtrl, &whalParam); 41664064216a8433360745f69edddce19a606659163The Android Open Source Project 41764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 41864064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: default key ID =%d \n", pRsn->defaultKeyId)); 41964064216a8433360745f69edddce19a606659163The Android Open Source Project } 42064064216a8433360745f69edddce19a606659163The Android Open Source Project 42164064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 42264064216a8433360745f69edddce19a606659163The Android Open Source Project} 42364064216a8433360745f69edddce19a606659163The Android Open Source Project 42464064216a8433360745f69edddce19a606659163The Android Open Source Project 42564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 42664064216a8433360745f69edddce19a606659163The Android Open Source Project* 42764064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_Start - Start event for the rsniation SM 42864064216a8433360745f69edddce19a606659163The Android Open Source Project* 42964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 43064064216a8433360745f69edddce19a606659163The Android Open Source Project* 43164064216a8433360745f69edddce19a606659163The Android Open Source Project* Start event for the rsniation SM 43264064216a8433360745f69edddce19a606659163The Android Open Source Project* 43364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 43464064216a8433360745f69edddce19a606659163The Android Open Source Project* 43564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 43664064216a8433360745f69edddce19a606659163The Android Open Source Project* 43764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 43864064216a8433360745f69edddce19a606659163The Android Open Source Project* 43964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 44064064216a8433360745f69edddce19a606659163The Android Open Source Project* 44164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Stop, rsn_Recv 44264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 44364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_start(TI_HANDLE hRsn) 44464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 44564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 44664064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 44764064216a8433360745f69edddce19a606659163The Android Open Source Project cipherSuite_e suite; 44864064216a8433360745f69edddce19a606659163The Android Open Source Project externalAuthMode_e extAuthMode; 44964064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 45064064216a8433360745f69edddce19a606659163The Android Open Source Project 45164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 45264064216a8433360745f69edddce19a606659163The Android Open Source Project 45364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 45464064216a8433360745f69edddce19a606659163The Android Open Source Project { 45564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 45664064216a8433360745f69edddce19a606659163The Android Open Source Project } 45764064216a8433360745f69edddce19a606659163The Android Open Source Project 45864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("rsn_start ...\n")); 45964064216a8433360745f69edddce19a606659163The Android Open Source Project 46064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->rsnStartedTs = os_timeStampMs (pRsn->hOs); 46164064216a8433360745f69edddce19a606659163The Android Open Source Project 46264064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pMainSecSm->start (pRsn->pMainSecSm); 46364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set keys that need to be set */ 46464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = FALSE; 46564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &suite); 46664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getExtAuthMode (pRsn->pAdmCtrl, &extAuthMode); 46764064216a8433360745f69edddce19a606659163The Android Open Source Project 46864064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->wepStaticKey && ((suite == RSN_CIPHER_WEP) || (suite == RSN_CIPHER_CKIP))) 46964064216a8433360745f69edddce19a606659163The Android Open Source Project { /* set default WEP keys */ 47064064216a8433360745f69edddce19a606659163The Android Open Source Project status = rsn_sendKeysNotSet (pRsn); 47164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->eapType = OS_EAP_TYPE_NONE; 47264064216a8433360745f69edddce19a606659163The Android Open Source Project } 47364064216a8433360745f69edddce19a606659163The Android Open Source Project else if (suite == RSN_CIPHER_NONE && extAuthMode != RSN_EXT_AUTH_MODE_OPEN) 47464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* remove previously WEP key for SHARED */ 47564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepStaticKey = FALSE; 47664064216a8433360745f69edddce19a606659163The Android Open Source Project status = rsn_removedDefKeys (pRsn); 47764064216a8433360745f69edddce19a606659163The Android Open Source Project 47864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set None to HAL */ 47964064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_SECURITY_MODE_PARAM; 48064064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.rsnEncryptionStatus = (halCtrl_CipherSuite_e)RSN_CIPHER_NONE; 48164064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam (pRsn->hWhalCtrl, &whalParam); 48264064216a8433360745f69edddce19a606659163The Android Open Source Project 48364064216a8433360745f69edddce19a606659163The Android Open Source Project } 48464064216a8433360745f69edddce19a606659163The Android Open Source Project else if (suite==RSN_CIPHER_NONE) 48564064216a8433360745f69edddce19a606659163The Android Open Source Project { 48664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->eapType = OS_EAP_TYPE_NONE; 48764064216a8433360745f69edddce19a606659163The Android Open Source Project } 48864064216a8433360745f69edddce19a606659163The Android Open Source Project 48964064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 49064064216a8433360745f69edddce19a606659163The Android Open Source Project} 49164064216a8433360745f69edddce19a606659163The Android Open Source Project 49264064216a8433360745f69edddce19a606659163The Android Open Source Project 49364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_sendKeysNotSet(rsn_t *pRsn) 49464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 49564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 49664064216a8433360745f69edddce19a606659163The Android Open Source Project OS_802_11_KEY rsnOsKey; 49764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 49864064216a8433360745f69edddce19a606659163The Android Open Source Project 49964064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 50064064216a8433360745f69edddce19a606659163The Android Open Source Project { 50164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->wepDefaultKeys[keyIndex]) 50264064216a8433360745f69edddce19a606659163The Android Open Source Project { 50364064216a8433360745f69edddce19a606659163The Android Open Source Project rsnOsKey.KeyIndex = pRsn->keys[keyIndex].keyIndex; 50464064216a8433360745f69edddce19a606659163The Android Open Source Project rsnOsKey.KeyLength = pRsn->keys[keyIndex].encLen; 50564064216a8433360745f69edddce19a606659163The Android Open Source Project rsnOsKey.Length = sizeof(rsnOsKey); 50664064216a8433360745f69edddce19a606659163The Android Open Source Project 50764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Change key type to WEP-key before setting*/ 50864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyType = WEP_KEY; 50964064216a8433360745f69edddce19a606659163The Android Open Source Project 51064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, rsnOsKey.BSSID, 51164064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)pRsn->keys[keyIndex].macAddress.addr, 51264064216a8433360745f69edddce19a606659163The Android Open Source Project MAC_ADDR_LEN); 51364064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, &rsnOsKey.KeyRSC, 51464064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)pRsn->keys[keyIndex].keyRsc, 51564064216a8433360745f69edddce19a606659163The Android Open Source Project KEY_RSC_LEN); 51664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, rsnOsKey.KeyMaterial, 51764064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)pRsn->keys[keyIndex].encKey, 51864064216a8433360745f69edddce19a606659163The Android Open Source Project MAX_KEY_LEN /*pRsn->keys[keyIndex].encLen*/); 51964064216a8433360745f69edddce19a606659163The Android Open Source Project 52064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set WEP transmit key mask on the default key */ 52164064216a8433360745f69edddce19a606659163The Android Open Source Project if (keyIndex == pRsn->defaultKeyId) 52264064216a8433360745f69edddce19a606659163The Android Open Source Project { 52364064216a8433360745f69edddce19a606659163The Android Open Source Project rsnOsKey.KeyIndex |= 0x80000000; 52464064216a8433360745f69edddce19a606659163The Android Open Source Project } 52564064216a8433360745f69edddce19a606659163The Android Open Source Project 52664064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pKeyParser->recv (pRsn->pKeyParser, (UINT8*)&rsnOsKey, sizeof(rsnOsKey)); 52764064216a8433360745f69edddce19a606659163The Android Open Source Project } 52864064216a8433360745f69edddce19a606659163The Android Open Source Project } 52964064216a8433360745f69edddce19a606659163The Android Open Source Project 53064064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 53164064216a8433360745f69edddce19a606659163The Android Open Source Project} 53264064216a8433360745f69edddce19a606659163The Android Open Source Project 53364064216a8433360745f69edddce19a606659163The Android Open Source Project 53464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_removedDefKeys (TI_HANDLE hRsn) 53564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 53664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 53764064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn = (rsn_t*)hRsn; 53864064216a8433360745f69edddce19a606659163The Android Open Source Project 53964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 54064064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_removedDefKeys Enter \n")); 54164064216a8433360745f69edddce19a606659163The Android Open Source Project 54264064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 54364064216a8433360745f69edddce19a606659163The Android Open Source Project { 54464064216a8433360745f69edddce19a606659163The Android Open Source Project securityKeys_t key; 54564064216a8433360745f69edddce19a606659163The Android Open Source Project 54664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 54764064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_removedDefKeys, Remove keyId=%d\n", keyIndex)); 54864064216a8433360745f69edddce19a606659163The Android Open Source Project 54964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepDefaultKeys[keyIndex] = FALSE; 55064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, &key, &pRsn->keys[keyIndex], sizeof(securityKeys_t)); 55164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->removeKey (pRsn, &key); 55264064216a8433360745f69edddce19a606659163The Android Open Source Project 55364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set WEP transmit key mask on the default key */ 55464064216a8433360745f69edddce19a606659163The Android Open Source Project if (keyIndex == pRsn->defaultKeyId) 55564064216a8433360745f69edddce19a606659163The Android Open Source Project { 55664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeyId = 0; 55764064216a8433360745f69edddce19a606659163The Android Open Source Project } 55864064216a8433360745f69edddce19a606659163The Android Open Source Project } 55964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Clear the band site list */ 56064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Comment out the call to clearBannedSiteList due to fail in WiFi mic attack test */ 56164064216a8433360745f69edddce19a606659163The Android Open Source Project /*clearBannedSiteList(hRsn);*/ 56264064216a8433360745f69edddce19a606659163The Android Open Source Project 56364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 56464064216a8433360745f69edddce19a606659163The Android Open Source Project} 56564064216a8433360745f69edddce19a606659163The Android Open Source Project 56664064216a8433360745f69edddce19a606659163The Android Open Source Project 56764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 56864064216a8433360745f69edddce19a606659163The Android Open Source Project* 56964064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_Stop - Stop event for the rsniation SM 57064064216a8433360745f69edddce19a606659163The Android Open Source Project* 57164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 57264064216a8433360745f69edddce19a606659163The Android Open Source Project* 57364064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop event for the rsniation SM 57464064216a8433360745f69edddce19a606659163The Android Open Source Project* 57564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 57664064216a8433360745f69edddce19a606659163The Android Open Source Project* 57764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 57864064216a8433360745f69edddce19a606659163The Android Open Source Project* 57964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 58064064216a8433360745f69edddce19a606659163The Android Open Source Project* 58164064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 58264064216a8433360745f69edddce19a606659163The Android Open Source Project* 58364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Recv 58464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 58564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_stop (TI_HANDLE hRsn, BOOL removeKeys) 58664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 58764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 58864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 58964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 59064064216a8433360745f69edddce19a606659163The Android Open Source Project securityKeys_t key; 59164064216a8433360745f69edddce19a606659163The Android Open Source Project 59264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 59364064216a8433360745f69edddce19a606659163The Android Open Source Project 59464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 59564064216a8433360745f69edddce19a606659163The Android Open Source Project { 59664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 59764064216a8433360745f69edddce19a606659163The Android Open Source Project } 59864064216a8433360745f69edddce19a606659163The Android Open Source Project 59964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 60064064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: calling STOP... removeKeys=%d\n", removeKeys)); 60164064216a8433360745f69edddce19a606659163The Android Open Source Project 60264064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex = 0; keyIndex < MAX_KEYS_NUM; keyIndex++) 60364064216a8433360745f69edddce19a606659163The Android Open Source Project { 60464064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, &key, &pRsn->keys[keyIndex], sizeof(securityKeys_t)); 60564064216a8433360745f69edddce19a606659163The Android Open Source Project 60664064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pRsn->wepDefaultKeys[keyIndex]) 60764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Remove only dynamic keys. Default keys are removed by calling: rsn_removedDefKeys() */ 60864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 60964064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_stop, Remove keyIndex=%d, key.keyIndex=%d\n",keyIndex, key.keyIndex)); 61064064216a8433360745f69edddce19a606659163The Android Open Source Project 61164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)key.macAddress.addr, 6); 61264064216a8433360745f69edddce19a606659163The Android Open Source Project 61364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->removeKey (pRsn, &key); 61464064216a8433360745f69edddce19a606659163The Android Open Source Project } 61564064216a8433360745f69edddce19a606659163The Android Open Source Project 61664064216a8433360745f69edddce19a606659163The Android Open Source Project } 61764064216a8433360745f69edddce19a606659163The Android Open Source Project 61864064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop (pRsn->hOs, pRsn->micFailureReportWaitTimer); 61964064216a8433360745f69edddce19a606659163The Android Open Source Project 62064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Stop the pre-authentication timer in case we are disconnecting */ 62164064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop (pRsn->hOs, pRsn->pAdmCtrl->preAuthTimerWpa2); 62264064216a8433360745f69edddce19a606659163The Android Open Source Project 62364064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pMainSecSm->stop (pRsn->pMainSecSm); 62464064216a8433360745f69edddce19a606659163The Android Open Source Project 62564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->groupKeyUpdate = GROUP_KEY_UPDATE_FALSE; 62664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = TRUE; 62764064216a8433360745f69edddce19a606659163The Android Open Source Project 62864064216a8433360745f69edddce19a606659163The Android Open Source Project if (removeKeys) 62964064216a8433360745f69edddce19a606659163The Android Open Source Project { /* reset PMKID list if exist */ 63064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->resetPmkidList (pRsn->pAdmCtrl); 63164064216a8433360745f69edddce19a606659163The Android Open Source Project } 63264064216a8433360745f69edddce19a606659163The Android Open Source Project 63364064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 63464064216a8433360745f69edddce19a606659163The Android Open Source Project} 63564064216a8433360745f69edddce19a606659163The Android Open Source Project 63664064216a8433360745f69edddce19a606659163The Android Open Source Project 63764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 63864064216a8433360745f69edddce19a606659163The Android Open Source Project* 63964064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_GetParam - Get a specific parameter from the rsniation SM 64064064216a8433360745f69edddce19a606659163The Android Open Source Project* 64164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 64264064216a8433360745f69edddce19a606659163The Android Open Source Project* 64364064216a8433360745f69edddce19a606659163The Android Open Source Project* Get a specific parameter from the rsniation SM. 64464064216a8433360745f69edddce19a606659163The Android Open Source Project* 64564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 64664064216a8433360745f69edddce19a606659163The Android Open Source Project* 64764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 64864064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 64964064216a8433360745f69edddce19a606659163The Android Open Source Project* 65064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 65164064216a8433360745f69edddce19a606659163The Android Open Source Project* 65264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 65364064216a8433360745f69edddce19a606659163The Android Open Source Project* 65464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 65564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 65664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_getParam(TI_HANDLE hRsn, paramInfo_t *pParam) 65764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 65864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 65964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 66064064216a8433360745f69edddce19a606659163The Android Open Source Project 66164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 66264064216a8433360745f69edddce19a606659163The Android Open Source Project 66364064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn == NULL) || (pParam == NULL)) 66464064216a8433360745f69edddce19a606659163The Android Open Source Project { 66564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 66664064216a8433360745f69edddce19a606659163The Android Open Source Project } 66764064216a8433360745f69edddce19a606659163The Android Open Source Project 66864064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pParam->paramType) 66964064216a8433360745f69edddce19a606659163The Android Open Source Project { 67064064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_PRIVACY_OPTION_IMPLEMENTED_PARAM: 67164064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnPrivacyOptionImplemented = TRUE; 67264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 67364064216a8433360745f69edddce19a606659163The Android Open Source Project 67464064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_KEY_PARAM: 67564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.pRsnKey = &pRsn->keys[pParam->content.pRsnKey->keyIndex]; 67664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->content.pRsnKey->keyIndex == pRsn->defaultKeyId) 67764064216a8433360745f69edddce19a606659163The Android Open Source Project { 67864064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.pRsnKey->keyIndex |= 0x80000000; 67964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pRsn->hReport, RSN_MODULE_LOG, ("default Key: %d\n", pRsn->defaultKeyId)); 68064064216a8433360745f69edddce19a606659163The Android Open Source Project } 68164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 68264064216a8433360745f69edddce19a606659163The Android Open Source Project 68364064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_SECURITY_STATE_PARAM: 68464064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pMainSecSm->getAuthState (pRsn->pMainSecSm, (TIWLN_SECURITY_STATE*)&(pParam->content.rsnAuthState)); 68564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 68664064216a8433360745f69edddce19a606659163The Android Open Source Project 68764064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_ENCRYPTION_STATUS_PARAM: 68864064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &pParam->content.rsnEncryptionStatus); 68964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 69064064216a8433360745f69edddce19a606659163The Android Open Source Project 69164064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTHENTICATION_MODE: 69264064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getExtAuthMode (pRsn->pAdmCtrl, &pParam->content.rsnExtAuthneticationMode); 69364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 69464064216a8433360745f69edddce19a606659163The Android Open Source Project 69564064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_MIXED_MODE: 69664064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getMixedMode (pRsn->pAdmCtrl, &pParam->content.rsnMixedMode); 69764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 69864064216a8433360745f69edddce19a606659163The Android Open Source Project 69964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_AUTH_ENCR_CAPABILITY: 70064064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getAuthEncrCap(pRsn->pAdmCtrl, pParam->content.pRsnAuthEncrCapability); 70164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 70264064216a8433360745f69edddce19a606659163The Android Open Source Project 70364064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_PMKID_LIST: 70464064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnPMKIDList.Length = pParam->paramLength; 70564064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getPmkidList (pRsn->pAdmCtrl, &pParam->content.rsnPMKIDList); 70664064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramLength = pParam->content.rsnPMKIDList.Length + 2 * sizeof(UINT32); 70764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 70864064216a8433360745f69edddce19a606659163The Android Open Source Project 70964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_PRE_AUTH_STATUS: 71064064216a8433360745f69edddce19a606659163The Android Open Source Project { 71164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 cacheIndex; 71264064216a8433360745f69edddce19a606659163The Android Open Source Project 71364064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnPreAuthStatus = pRsn->pAdmCtrl->getPreAuthStatus (pRsn->pAdmCtrl, &pParam->content.rsnApMac, &cacheIndex); 71464064216a8433360745f69edddce19a606659163The Android Open Source Project } 71564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 71664064216a8433360745f69edddce19a606659163The Android Open Source Project 71764064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_WPA_PROMOTE_AVAILABLE_OPTIONS: 71864064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getWPAMixedModeSupport (pRsn->pAdmCtrl, &pParam->content.rsnWPAMixedModeSupport); 71964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 72064064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Get WPA Mixed MODE support %d \n",pParam->content.rsnWPAMixedModeSupport)); 72164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 72264064216a8433360745f69edddce19a606659163The Android Open Source Project 72364064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_WPA_PROMOTE_OPTIONS: 72464064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getPromoteFlags (pRsn->pAdmCtrl, 72564064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->content.rsnWPAPromoteFlags); 72664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 72764064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Get WPA promote flags %d \n",pParam->content.rsnWPAPromoteFlags)); 72864064216a8433360745f69edddce19a606659163The Android Open Source Project 72964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 73064064216a8433360745f69edddce19a606659163The Android Open Source Project 73164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 73264064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXC_NETWORK_EAP: 73364064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getNetworkEap (pRsn->pAdmCtrl, &pParam->content.networkEap); 73464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 73564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 73664064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EAP_TYPE: 73764064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.eapType = pRsn->eapType; 73864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 73964064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Get RSN_EAP_TYPE eapType %d \n", 74064064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.eapType)); 74164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 74264064216a8433360745f69edddce19a606659163The Android Open Source Project 74364064216a8433360745f69edddce19a606659163The Android Open Source Project case WPA_801_1X_AKM_EXISTS: 74464064216a8433360745f69edddce19a606659163The Android Open Source Project 74564064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->get802_1x_AkmExists(pRsn->pAdmCtrl, &pParam->content.wpa_802_1x_AkmExists); 74664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 74764064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Get WPA_801_1X_AKM_EXISTS %d \n", 74864064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.wpa_802_1x_AkmExists)); 74964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 75064064216a8433360745f69edddce19a606659163The Android Open Source Project 75164064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_DEFAULT_KEY_ID: 75264064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnDefaultKeyID = pRsn->defaultKeyId; 75364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 75464064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Get RSN_DEFAULT_KEY_ID %d \n", 75564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnDefaultKeyID)); 75664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 75764064216a8433360745f69edddce19a606659163The Android Open Source Project 75864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 75964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 76064064216a8433360745f69edddce19a606659163The Android Open Source Project } 76164064216a8433360745f69edddce19a606659163The Android Open Source Project 76264064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 76364064216a8433360745f69edddce19a606659163The Android Open Source Project} 76464064216a8433360745f69edddce19a606659163The Android Open Source Project 76564064216a8433360745f69edddce19a606659163The Android Open Source Project 76664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 76764064216a8433360745f69edddce19a606659163The Android Open Source Project* 76845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* rsn_getParamPartial - Get a specific parameter from the rsniation SM 76945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 77045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b Description: 77145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 77245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* Get a specific parameter from the rsniation SM. 77345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 77445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b ARGS: 77545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 77645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* I - hRsn - Rsniation SM context \n 77745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* I/O - pParam - Parameter \n 77845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 77945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b RETURNS: 78045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 78145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* OK if successful, NOK otherwise. 78245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 78345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \sa rsn_Start, rsn_Stop 78445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*/ 78545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 78645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/* note: rsn_getParamPartial() is part of rsn_getParam() it was implemented to reduce Stack usage */ 78745544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS rsn_getParamPartial(TI_HANDLE hRsn, paramInfoPartial_t *pParam) 78845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{ 78945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt rsn_t *pRsn; 79045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt TI_STATUS status = OK; 79145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 79245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt pRsn = (rsn_t*)hRsn; 79345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 79445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if ((pRsn == NULL) || (pParam == NULL)) 79545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 79645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt return NOK; 79745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 79845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 79945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt switch (pParam->paramType) 80045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 80145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt case RSN_PRE_AUTH_STATUS: 80245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 80345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt UINT8 cacheIndex; 80445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 80545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt pParam->content.rsnPreAuthStatus = pRsn->pAdmCtrl->getPreAuthStatus (pRsn->pAdmCtrl, &pParam->content.rsnApMac, &cacheIndex); 80645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 80745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt break; 80845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 80945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt case RSN_ENCRYPTION_STATUS_PARAM: 81045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt status = pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &pParam->content.rsnEncryptionStatus); 81145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt break; 81245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 81345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt case RSN_MIXED_MODE: 81445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt status = pRsn->pAdmCtrl->getMixedMode (pRsn->pAdmCtrl, &pParam->content.rsnMixedMode); 81545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt break; 81645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 81745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt default: 81845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt return NOK; 81945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 82045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 82145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt return status; 82245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt} 82345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/** 82445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* 82564064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_SetParam - Set a specific parameter to the rsniation SM 82664064216a8433360745f69edddce19a606659163The Android Open Source Project* 82764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 82864064216a8433360745f69edddce19a606659163The Android Open Source Project* 82964064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 83064064216a8433360745f69edddce19a606659163The Android Open Source Project* 83164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 83264064216a8433360745f69edddce19a606659163The Android Open Source Project* 83364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 83464064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 83564064216a8433360745f69edddce19a606659163The Android Open Source Project* 83664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 83764064216a8433360745f69edddce19a606659163The Android Open Source Project* 83864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 83964064216a8433360745f69edddce19a606659163The Android Open Source Project* 84064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 84164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 84264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setParam (TI_HANDLE hRsn, paramInfo_t *pParam) 84364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 84464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 84564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status=OK; 84664064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 84764064216a8433360745f69edddce19a606659163The Android Open Source Project 84864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 84964064216a8433360745f69edddce19a606659163The Android Open Source Project 85064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn == NULL) || (pParam == NULL)) 85164064216a8433360745f69edddce19a606659163The Android Open Source Project { 85264064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 85364064216a8433360745f69edddce19a606659163The Android Open Source Project } 85464064216a8433360745f69edddce19a606659163The Android Open Source Project 85564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 85664064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set rsn_setParam %X \n", 85764064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramType)); 85864064216a8433360745f69edddce19a606659163The Android Open Source Project 85964064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pParam->paramType) 86064064216a8433360745f69edddce19a606659163The Android Open Source Project { 86164064216a8433360745f69edddce19a606659163The Android Open Source Project 86264064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_DEFAULT_KEY_ID: 86364064216a8433360745f69edddce19a606659163The Android Open Source Project { 86464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 defKeyId, i; 86564064216a8433360745f69edddce19a606659163The Android Open Source Project 86664064216a8433360745f69edddce19a606659163The Android Open Source Project defKeyId = pParam->content.rsnDefaultKeyID; 86764064216a8433360745f69edddce19a606659163The Android Open Source Project 86864064216a8433360745f69edddce19a606659163The Android Open Source Project if(defKeyId >= MAX_KEYS_NUM) 86964064216a8433360745f69edddce19a606659163The Android Open Source Project { 87064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRsn->hReport, RSN_MODULE_LOG, 87164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Error - the value of the default Key Id is incorrect \n")); 87264064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 87364064216a8433360745f69edddce19a606659163The Android Open Source Project } 87464064216a8433360745f69edddce19a606659163The Android Open Source Project 87564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Clean transmit flag (1 in the bit31) in the previous default key */ 87664064216a8433360745f69edddce19a606659163The Android Open Source Project for(i = 0; i < MAX_KEYS_NUM; i++) 87764064216a8433360745f69edddce19a606659163The Android Open Source Project { 87864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[i].keyIndex &= 0x7FFFFFFF; 87964064216a8433360745f69edddce19a606659163The Android Open Source Project } 88064064216a8433360745f69edddce19a606659163The Android Open Source Project 88164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set the default key ID value in the RSN data structure */ 88264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeyId = defKeyId; 88364064216a8433360745f69edddce19a606659163The Android Open Source Project 88464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Set the default key ID in the HAL */ 88564064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM; 88664064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_buf = &pRsn->defaultKeyId; 88764064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_Func = NULL; 88864064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_handle = NULL; 88964064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam (pRsn->hWhalCtrl, &whalParam); 89064064216a8433360745f69edddce19a606659163The Android Open Source Project 89164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 89264064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: default key ID =%d \n", pRsn->defaultKeyId)); 89364064216a8433360745f69edddce19a606659163The Android Open Source Project 89464064216a8433360745f69edddce19a606659163The Android Open Source Project 89564064216a8433360745f69edddce19a606659163The Android Open Source Project status = RE_SCAN_NEEDED; 89664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 89764064216a8433360745f69edddce19a606659163The Android Open Source Project } 89864064216a8433360745f69edddce19a606659163The Android Open Source Project 89964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_ADD_KEY_PARAM: 90064064216a8433360745f69edddce19a606659163The Android Open Source Project { 90164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex, i = 0; 90264064216a8433360745f69edddce19a606659163The Android Open Source Project cipherSuite_e cipherSuite; 90364064216a8433360745f69edddce19a606659163The Android Open Source Project 90464064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &cipherSuite); 90564064216a8433360745f69edddce19a606659163The Android Open Source Project if (status !=OK) 90664064216a8433360745f69edddce19a606659163The Android Open Source Project { 90764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 90864064216a8433360745f69edddce19a606659163The Android Open Source Project } 90964064216a8433360745f69edddce19a606659163The Android Open Source Project 91064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 91164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_ADD_KEY_PARAM KeyIndex %x , keyLength=%d\n", 91264064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnOsKey.KeyIndex,pParam->content.rsnOsKey.KeyLength)); 91364064216a8433360745f69edddce19a606659163The Android Open Source Project keyIndex = (UINT8)pParam->content.rsnOsKey.KeyIndex; 91464064216a8433360745f69edddce19a606659163The Android Open Source Project if (keyIndex >= MAX_KEYS_NUM) 91564064216a8433360745f69edddce19a606659163The Android Open Source Project { 91664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 91764064216a8433360745f69edddce19a606659163The Android Open Source Project } 91864064216a8433360745f69edddce19a606659163The Android Open Source Project 91964064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pKeyParser->recv (pRsn->pKeyParser, (UINT8*)&pParam->content.rsnOsKey, sizeof(pParam->content.rsnOsKey)); 92064064216a8433360745f69edddce19a606659163The Android Open Source Project 92164064216a8433360745f69edddce19a606659163The Android Open Source Project if (status==STATUS_BAD_KEY_PARAM) 92264064216a8433360745f69edddce19a606659163The Android Open Source Project { 92364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 92464064216a8433360745f69edddce19a606659163The Android Open Source Project } 92564064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the Key is not BAD, it may be that WEP key is sent before WEP status is set, 92664064216a8433360745f69edddce19a606659163The Android Open Source Project save the key, and set it later at rsn_start */ 92764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyIndex = pParam->content.rsnOsKey.KeyIndex; 92864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].encLen = pParam->content.rsnOsKey.KeyLength; 92964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, (void *)pRsn->keys[keyIndex].macAddress.addr, pParam->content.rsnOsKey.BSSID, MAC_ADDR_LEN); 93064064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, (void *)pRsn->keys[keyIndex].keyRsc, (UINT8*)&(pParam->content.rsnOsKey.KeyRSC), KEY_RSC_LEN); 93164064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, (void *)pRsn->keys[keyIndex].encKey, pParam->content.rsnOsKey.KeyMaterial, MAX_KEY_LEN); 93264064216a8433360745f69edddce19a606659163The Android Open Source Project 93364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Process the transmit flag (31-st bit of keyIndex). */ 93464064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the added key has the TX bit set to TRUE (i.e. the key */ 93564064216a8433360745f69edddce19a606659163The Android Open Source Project /* is the new transmit key (default key), update */ 93664064216a8433360745f69edddce19a606659163The Android Open Source Project /* RSN data def.key Id and clean this bit in all other keys */ 93764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->content.rsnOsKey.KeyIndex & 0x80000000) 93864064216a8433360745f69edddce19a606659163The Android Open Source Project { 93964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeyId = keyIndex; 94064064216a8433360745f69edddce19a606659163The Android Open Source Project 94164064216a8433360745f69edddce19a606659163The Android Open Source Project for (i = 0; i < MAX_KEYS_NUM; i ++) 94264064216a8433360745f69edddce19a606659163The Android Open Source Project { 94364064216a8433360745f69edddce19a606659163The Android Open Source Project if (i != keyIndex) 94464064216a8433360745f69edddce19a606659163The Android Open Source Project { 94564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[i].keyIndex &= 0x7FFFFFFF; 94664064216a8433360745f69edddce19a606659163The Android Open Source Project } 94764064216a8433360745f69edddce19a606659163The Android Open Source Project } 94864064216a8433360745f69edddce19a606659163The Android Open Source Project } 94964064216a8433360745f69edddce19a606659163The Android Open Source Project 95064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->defaultKeysOn) 95164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* This is a WEP default key */ 95264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 95364064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN_ADD_KEY_PARAM, Default key configured - keyIndex=%d-TRUE\n", keyIndex)); 95464064216a8433360745f69edddce19a606659163The Android Open Source Project 95564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepDefaultKeys[keyIndex] = TRUE; 95664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepStaticKey = TRUE; 95764064216a8433360745f69edddce19a606659163The Android Open Source Project status = OK; 95864064216a8433360745f69edddce19a606659163The Android Open Source Project } 95964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 96064064216a8433360745f69edddce19a606659163The Android Open Source Project } 96164064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_REMOVE_KEY_PARAM: 96264064216a8433360745f69edddce19a606659163The Android Open Source Project { 96364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 96464064216a8433360745f69edddce19a606659163The Android Open Source Project cipherSuite_e cipherSuite; 96564064216a8433360745f69edddce19a606659163The Android Open Source Project 96664064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &cipherSuite); 96764064216a8433360745f69edddce19a606659163The Android Open Source Project if (status !=OK) 96864064216a8433360745f69edddce19a606659163The Android Open Source Project { 96964064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 97064064216a8433360745f69edddce19a606659163The Android Open Source Project } 97164064216a8433360745f69edddce19a606659163The Android Open Source Project /*if (cipherSuite == RSN_CIPHER_NONE) 97264064216a8433360745f69edddce19a606659163The Android Open Source Project { 97364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRsn->hReport, RSN_MODULE_LOG, 97464064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Error Remove Wep/Key when no encryption \n")); 97564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 97664064216a8433360745f69edddce19a606659163The Android Open Source Project }*/ 97764064216a8433360745f69edddce19a606659163The Android Open Source Project 97864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 97964064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_REMOVE_KEY_PARAM KeyIndex %x \n", 98064064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnOsKey.KeyIndex)); 98164064216a8433360745f69edddce19a606659163The Android Open Source Project keyIndex = (UINT8)pParam->content.rsnOsKey.KeyIndex; 98264064216a8433360745f69edddce19a606659163The Android Open Source Project if (keyIndex >= MAX_KEYS_NUM) 98364064216a8433360745f69edddce19a606659163The Android Open Source Project { 98464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 98564064216a8433360745f69edddce19a606659163The Android Open Source Project } 98664064216a8433360745f69edddce19a606659163The Android Open Source Project 98764064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pKeyParser->remove (pRsn->pKeyParser, 98864064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT8*)&pParam->content.rsnOsKey, 98964064216a8433360745f69edddce19a606659163The Android Open Source Project sizeof(pParam->content.rsnOsKey)); 99064064216a8433360745f69edddce19a606659163The Android Open Source Project 99164064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 99264064216a8433360745f69edddce19a606659163The Android Open Source Project { 99364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyType = NULL_KEY; 99464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyIndex &= 0x000000FF; 99564064216a8433360745f69edddce19a606659163The Android Open Source Project } 99664064216a8433360745f69edddce19a606659163The Android Open Source Project 99764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 99864064216a8433360745f69edddce19a606659163The Android Open Source Project } 99964064216a8433360745f69edddce19a606659163The Android Open Source Project 100064064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_ENCRYPTION_STATUS_PARAM: 100164064216a8433360745f69edddce19a606659163The Android Open Source Project { 100264064216a8433360745f69edddce19a606659163The Android Open Source Project cipherSuite_e cipherSuite; 100364064216a8433360745f69edddce19a606659163The Android Open Source Project 100464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 100564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_ENCRYPTION_STATUS_PARAM rsnEncryptionStatus %d \n", 100664064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnEncryptionStatus)); 100764064216a8433360745f69edddce19a606659163The Android Open Source Project 100864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getCipherSuite (pRsn->pAdmCtrl, &cipherSuite); 100964064216a8433360745f69edddce19a606659163The Android Open Source Project if (cipherSuite != pParam->content.rsnEncryptionStatus) 101064064216a8433360745f69edddce19a606659163The Android Open Source Project { 101164064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setUcastSuite (pRsn->pAdmCtrl, pParam->content.rsnEncryptionStatus); 101264064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setBcastSuite (pRsn->pAdmCtrl, pParam->content.rsnEncryptionStatus); 101364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (" status = %d \n", status)); 101464064216a8433360745f69edddce19a606659163The Android Open Source Project } 101564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = TRUE; 101664064216a8433360745f69edddce19a606659163The Android Open Source Project } 101764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 101864064216a8433360745f69edddce19a606659163The Android Open Source Project 101964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXT_AUTHENTICATION_MODE: 102064064216a8433360745f69edddce19a606659163The Android Open Source Project { 102164064216a8433360745f69edddce19a606659163The Android Open Source Project externalAuthMode_e extAuthMode; 102264064216a8433360745f69edddce19a606659163The Android Open Source Project 102364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getExtAuthMode (pRsn->pAdmCtrl, &extAuthMode); 102464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->content.rsnExtAuthneticationMode!=extAuthMode) 102564064216a8433360745f69edddce19a606659163The Android Open Source Project { 102664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 102764064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_EXT_AUTHENTICATION_MODE rsnExtAuthneticationMode %d \n", 102864064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnExtAuthneticationMode)); 102964064216a8433360745f69edddce19a606659163The Android Open Source Project 103064064216a8433360745f69edddce19a606659163The Android Open Source Project /*WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 103164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: remove all Keys\n")); 103264064216a8433360745f69edddce19a606659163The Android Open Source Project 103364064216a8433360745f69edddce19a606659163The Android Open Source Project for (keyIndex=0; keyIndex<MAX_KEYS_NUM; keyIndex++) 103464064216a8433360745f69edddce19a606659163The Android Open Source Project { 103564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pRsn->hOs, &key, &pRsn->keys[keyIndex], sizeof(securityKeys_t)); 103664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->removeKey(pRsn, &key); 103764064216a8433360745f69edddce19a606659163The Android Open Source Project 103864064216a8433360745f69edddce19a606659163The Android Open Source Project }*/ 103964064216a8433360745f69edddce19a606659163The Android Open Source Project 104064064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setExtAuthMode (pRsn->pAdmCtrl, pParam->content.rsnExtAuthneticationMode); 104164064216a8433360745f69edddce19a606659163The Android Open Source Project } 104264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = TRUE; 104364064216a8433360745f69edddce19a606659163The Android Open Source Project } 104464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 104564064216a8433360745f69edddce19a606659163The Android Open Source Project 104664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 104764064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EXC_NETWORK_EAP: 104864064216a8433360745f69edddce19a606659163The Android Open Source Project { 104964064216a8433360745f69edddce19a606659163The Android Open Source Project OS_EXC_NETWORK_EAP networkEap; 105064064216a8433360745f69edddce19a606659163The Android Open Source Project 105164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getNetworkEap (pRsn->pAdmCtrl, &networkEap); 105264064216a8433360745f69edddce19a606659163The Android Open Source Project if (networkEap != pParam->content.networkEap) 105364064216a8433360745f69edddce19a606659163The Android Open Source Project { 105464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 105564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_EXC_NETWORK_EAP networkEap %d \n", 105664064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.networkEap)); 105764064216a8433360745f69edddce19a606659163The Android Open Source Project 105864064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setNetworkEap (pRsn->pAdmCtrl, pParam->content.networkEap); 105964064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 106064064216a8433360745f69edddce19a606659163The Android Open Source Project { 106164064216a8433360745f69edddce19a606659163The Android Open Source Project /*status = RE_SCAN_NEEDED;*/ 106264064216a8433360745f69edddce19a606659163The Android Open Source Project } 106364064216a8433360745f69edddce19a606659163The Android Open Source Project } 106464064216a8433360745f69edddce19a606659163The Android Open Source Project } 106564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 106664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 106764064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_MIXED_MODE: 106864064216a8433360745f69edddce19a606659163The Android Open Source Project { 106964064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL mixedMode; 107064064216a8433360745f69edddce19a606659163The Android Open Source Project 107164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->pAdmCtrl->getMixedMode (pRsn->pAdmCtrl, &mixedMode); 107264064216a8433360745f69edddce19a606659163The Android Open Source Project if (mixedMode!=pParam->content.rsnMixedMode) 107364064216a8433360745f69edddce19a606659163The Android Open Source Project { 107464064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setMixedMode (pRsn->pAdmCtrl, pParam->content.rsnMixedMode); 107564064216a8433360745f69edddce19a606659163The Android Open Source Project 107664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 107764064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_MIXED_MODE mixedMode %d, status=%d \n", 107864064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnMixedMode, status)); 107964064216a8433360745f69edddce19a606659163The Android Open Source Project } 108064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 108164064216a8433360745f69edddce19a606659163The Android Open Source Project } 108264064216a8433360745f69edddce19a606659163The Android Open Source Project 108364064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_PMKID_LIST: 108464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 108564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_PMKID_LIST \n")); 108664064216a8433360745f69edddce19a606659163The Android Open Source Project 108764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 108864064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT8*)&pParam->content.rsnPMKIDList ,pParam->content.rsnPMKIDList.Length); 108964064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setPmkidList (pRsn->pAdmCtrl, 109064064216a8433360745f69edddce19a606659163The Android Open Source Project &pParam->content.rsnPMKIDList); 109164064216a8433360745f69edddce19a606659163The Android Open Source Project if(status == OK) 109264064216a8433360745f69edddce19a606659163The Android Open Source Project { 109364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 109464064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_PMKID_LIST: %d PMKID entries has been added to the cache.\n", 109564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnPMKIDList.BSSIDInfoCount)); 109664064216a8433360745f69edddce19a606659163The Android Open Source Project } 109764064216a8433360745f69edddce19a606659163The Android Open Source Project else 109864064216a8433360745f69edddce19a606659163The Android Open Source Project { 109964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 110064064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_PMKID_LIST failure")); 110164064216a8433360745f69edddce19a606659163The Android Open Source Project } 110264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 110364064216a8433360745f69edddce19a606659163The Android Open Source Project 110464064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_WPA_PROMOTE_OPTIONS: 110564064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setPromoteFlags (pRsn->pAdmCtrl, 110664064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.rsnWPAPromoteFlags); 110764064216a8433360745f69edddce19a606659163The Android Open Source Project if(status == OK) 110864064216a8433360745f69edddce19a606659163The Android Open Source Project { 110964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 111064064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set WPA promote options: %d \n", pParam->content.rsnWPAPromoteFlags)); 111164064216a8433360745f69edddce19a606659163The Android Open Source Project } 111264064216a8433360745f69edddce19a606659163The Android Open Source Project else 111364064216a8433360745f69edddce19a606659163The Android Open Source Project { 111464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 111564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set WPA promote options failure")); 111664064216a8433360745f69edddce19a606659163The Android Open Source Project } 111764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 111864064216a8433360745f69edddce19a606659163The Android Open Source Project 111964064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_EAP_TYPE: 112064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 112164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Set RSN_EAP_TYPE eapType %d \n", 112264064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.eapType)); 112364064216a8433360745f69edddce19a606659163The Android Open Source Project 112464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->eapType = pParam->content.eapType; 112564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeysOn = TRUE; 112664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 112764064216a8433360745f69edddce19a606659163The Android Open Source Project 112864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 112964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 113064064216a8433360745f69edddce19a606659163The Android Open Source Project } 113164064216a8433360745f69edddce19a606659163The Android Open Source Project 113264064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 113364064216a8433360745f69edddce19a606659163The Android Open Source Project} 113464064216a8433360745f69edddce19a606659163The Android Open Source Project 113564064216a8433360745f69edddce19a606659163The Android Open Source Project 113664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 113764064216a8433360745f69edddce19a606659163The Android Open Source Project* 113864064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_eventRecv - Set a specific parameter to the rsniation SM 113964064216a8433360745f69edddce19a606659163The Android Open Source Project* 114064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 114164064216a8433360745f69edddce19a606659163The Android Open Source Project* 114264064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 114364064216a8433360745f69edddce19a606659163The Android Open Source Project* 114464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 114564064216a8433360745f69edddce19a606659163The Android Open Source Project* 114664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 114764064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 114864064216a8433360745f69edddce19a606659163The Android Open Source Project* 114964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 115064064216a8433360745f69edddce19a606659163The Android Open Source Project* 115164064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 115264064216a8433360745f69edddce19a606659163The Android Open Source Project* 115364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 115464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 115564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_reportStatus (rsn_t *pRsn, TI_STATUS rsnStatus) 115664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 115764064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 115864064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 115964064216a8433360745f69edddce19a606659163The Android Open Source Project externalAuthMode_e extAuthMode; 116064064216a8433360745f69edddce19a606659163The Android Open Source Project 116164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 116264064216a8433360745f69edddce19a606659163The Android Open Source Project { 116364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 116464064216a8433360745f69edddce19a606659163The Android Open Source Project } 116564064216a8433360745f69edddce19a606659163The Android Open Source Project 116664064216a8433360745f69edddce19a606659163The Android Open Source Project if (rsnStatus == OK) 116764064216a8433360745f69edddce19a606659163The Android Open Source Project { 116864064216a8433360745f69edddce19a606659163The Android Open Source Project /* set EAPOL encryption status according to authentication protocol */ 116964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->rsnCompletedTs = os_timeStampMs (pRsn->hOs); 117064064216a8433360745f69edddce19a606659163The Android Open Source Project 117164064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getExtAuthMode (pRsn->pAdmCtrl, &extAuthMode); 117264064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 117364064216a8433360745f69edddce19a606659163The Android Open Source Project { 117464064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 117564064216a8433360745f69edddce19a606659163The Android Open Source Project } 117664064216a8433360745f69edddce19a606659163The Android Open Source Project 117764064216a8433360745f69edddce19a606659163The Android Open Source Project if (extAuthMode >= RSN_EXT_AUTH_MODE_WPA) 117864064216a8433360745f69edddce19a606659163The Android Open Source Project { 117964064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataEapolEncryptionStatus = TRUE; 118064064216a8433360745f69edddce19a606659163The Android Open Source Project } else { 118164064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataEapolEncryptionStatus = FALSE; 118264064216a8433360745f69edddce19a606659163The Android Open Source Project } 118364064216a8433360745f69edddce19a606659163The Android Open Source Project 118464064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = TX_DATA_EAPOL_ENCRYPTION_STATUS_PARAM; 118564064216a8433360745f69edddce19a606659163The Android Open Source Project txData_setParam (pRsn->hTx, ¶m); 118664064216a8433360745f69edddce19a606659163The Android Open Source Project 118764064216a8433360745f69edddce19a606659163The Android Open Source Project /* set WEP invoked mode according to cipher suite */ 118864064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pRsn->paeConfig.unicastSuite) 118964064216a8433360745f69edddce19a606659163The Android Open Source Project { 119064064216a8433360745f69edddce19a606659163The Android Open Source Project case RSN_CIPHER_NONE: 119164064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataCurrentPrivacyInvokedMode = FALSE; 119264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 119364064216a8433360745f69edddce19a606659163The Android Open Source Project 119464064216a8433360745f69edddce19a606659163The Android Open Source Project default: 119564064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataCurrentPrivacyInvokedMode = TRUE; 119664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 119764064216a8433360745f69edddce19a606659163The Android Open Source Project } 119864064216a8433360745f69edddce19a606659163The Android Open Source Project 119964064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = TX_DATA_CURRENT_PRIVACY_INVOKE_MODE_PARAM; 120064064216a8433360745f69edddce19a606659163The Android Open Source Project txData_setParam (pRsn->hTx, ¶m); 120164064216a8433360745f69edddce19a606659163The Android Open Source Project /* The value of exclude unencrypted should be as privacy invoked */ 120264064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RX_DATA_EXCLUDE_UNENCRYPTED_PARAM; 120364064216a8433360745f69edddce19a606659163The Android Open Source Project rxData_setParam (pRsn->hRx, ¶m); 120464064216a8433360745f69edddce19a606659163The Android Open Source Project 120564064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RX_DATA_EXCLUDE_BROADCAST_UNENCRYPTED_PARAM; 120664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->pAdmCtrl->mixedMode) 120764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* do not exclude Broadcast packets */ 120864064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataCurrentPrivacyInvokedMode = FALSE; 120964064216a8433360745f69edddce19a606659163The Android Open Source Project } 121064064216a8433360745f69edddce19a606659163The Android Open Source Project rxData_setParam (pRsn->hRx, ¶m); 121164064216a8433360745f69edddce19a606659163The Android Open Source Project } 121264064216a8433360745f69edddce19a606659163The Android Open Source Project 121364064216a8433360745f69edddce19a606659163The Android Open Source Project else 121464064216a8433360745f69edddce19a606659163The Android Open Source Project rsnStatus = (TI_STATUS)STATUS_SECURITY_FAILURE; 121564064216a8433360745f69edddce19a606659163The Android Open Source Project 121664064216a8433360745f69edddce19a606659163The Android Open Source Project status = conn_reportRsnStatus (pRsn->hConn, (mgmtStatus_e)rsnStatus); 121764064216a8433360745f69edddce19a606659163The Android Open Source Project 121864064216a8433360745f69edddce19a606659163The Android Open Source Project if (status!=OK) 121964064216a8433360745f69edddce19a606659163The Android Open Source Project { 122064064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 122164064216a8433360745f69edddce19a606659163The Android Open Source Project } 122264064216a8433360745f69edddce19a606659163The Android Open Source Project 122364064216a8433360745f69edddce19a606659163The Android Open Source Project if (rsnStatus == OK) 122464064216a8433360745f69edddce19a606659163The Android Open Source Project { 122564064216a8433360745f69edddce19a606659163The Android Open Source Project EvHandlerSendEvent (pRsn->hEvHandler, IPC_EVENT_AUTH_SUCC, NULL, 0); 122664064216a8433360745f69edddce19a606659163The Android Open Source Project } 122764064216a8433360745f69edddce19a606659163The Android Open Source Project 122864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 122964064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: rsn_reportStatus \n")); 123064064216a8433360745f69edddce19a606659163The Android Open Source Project 123164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 123264064216a8433360745f69edddce19a606659163The Android Open Source Project} 123364064216a8433360745f69edddce19a606659163The Android Open Source Project 123464064216a8433360745f69edddce19a606659163The Android Open Source Project 123564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 123664064216a8433360745f69edddce19a606659163The Android Open Source Project* 123764064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_eventRecv - Set a specific parameter to the rsniation SM 123864064216a8433360745f69edddce19a606659163The Android Open Source Project* 123964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 124064064216a8433360745f69edddce19a606659163The Android Open Source Project* 124164064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 124264064216a8433360745f69edddce19a606659163The Android Open Source Project* 124364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 124464064216a8433360745f69edddce19a606659163The Android Open Source Project* 124564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 124664064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 124764064216a8433360745f69edddce19a606659163The Android Open Source Project* 124864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 124964064216a8433360745f69edddce19a606659163The Android Open Source Project* 125064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 125164064216a8433360745f69edddce19a606659163The Android Open Source Project* 125264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 125364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 125464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setPaeConfig(rsn_t *pRsn, rsn_paeConfig_t *pPaeConfig) 125564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 125664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 125764064216a8433360745f69edddce19a606659163The Android Open Source Project mainSecInitData_t initData; 125864064216a8433360745f69edddce19a606659163The Android Open Source Project 125964064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn == NULL) || (pPaeConfig == NULL)) 126064064216a8433360745f69edddce19a606659163The Android Open Source Project { 126164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 126264064216a8433360745f69edddce19a606659163The Android Open Source Project } 126364064216a8433360745f69edddce19a606659163The Android Open Source Project 126464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 126564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: Calling set PAE config..., unicastSuite = %d, broadcastSuite = %d \n", 126664064216a8433360745f69edddce19a606659163The Android Open Source Project pPaeConfig->unicastSuite, pPaeConfig->broadcastSuite)); 126764064216a8433360745f69edddce19a606659163The Android Open Source Project 126864064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pRsn->hOs, &pRsn->paeConfig, pPaeConfig, sizeof(rsn_paeConfig_t)); 126964064216a8433360745f69edddce19a606659163The Android Open Source Project 127064064216a8433360745f69edddce19a606659163The Android Open Source Project initData.pPaeConfig = &pRsn->paeConfig; 127164064216a8433360745f69edddce19a606659163The Android Open Source Project 127264064216a8433360745f69edddce19a606659163The Android Open Source Project status = mainSec_config (pRsn->pMainSecSm, 127364064216a8433360745f69edddce19a606659163The Android Open Source Project &initData, 127464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn, 127564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hReport, 127664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hOs, 127764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hCtrlData, 127864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hEvHandler, 127964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hConn, 128064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->hWhalCtrl); 128164064216a8433360745f69edddce19a606659163The Android Open Source Project 128264064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 128364064216a8433360745f69edddce19a606659163The Android Open Source Project} 128464064216a8433360745f69edddce19a606659163The Android Open Source Project 128564064216a8433360745f69edddce19a606659163The Android Open Source Project 128664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 128764064216a8433360745f69edddce19a606659163The Android Open Source Project* 128864064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_eventRecv - Set a specific parameter to the rsniation SM 128964064216a8433360745f69edddce19a606659163The Android Open Source Project* 129064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 129164064216a8433360745f69edddce19a606659163The Android Open Source Project* 129264064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 129364064216a8433360745f69edddce19a606659163The Android Open Source Project* 129464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 129564064216a8433360745f69edddce19a606659163The Android Open Source Project* 129664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 129764064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 129864064216a8433360745f69edddce19a606659163The Android Open Source Project* 129964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 130064064216a8433360745f69edddce19a606659163The Android Open Source Project* 130164064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 130264064216a8433360745f69edddce19a606659163The Android Open Source Project* 130364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 130464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 130564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_getNetworkMode(rsn_t *pRsn, rsn_networkMode_t *pNetMode) 130664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 130764064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 130864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 130964064216a8433360745f69edddce19a606659163The Android Open Source Project 131064064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; 131164064216a8433360745f69edddce19a606659163The Android Open Source Project 131264064216a8433360745f69edddce19a606659163The Android Open Source Project status = ctrlData_getParam (pRsn->hCtrlData, ¶m); 131364064216a8433360745f69edddce19a606659163The Android Open Source Project 131464064216a8433360745f69edddce19a606659163The Android Open Source Project if (status == OK) 131564064216a8433360745f69edddce19a606659163The Android Open Source Project { 131664064216a8433360745f69edddce19a606659163The Android Open Source Project if (param.content.ctrlDataCurrentBssType == BSS_INFRASTRUCTURE) 131764064216a8433360745f69edddce19a606659163The Android Open Source Project { 131864064216a8433360745f69edddce19a606659163The Android Open Source Project *pNetMode = RSN_INFRASTRUCTURE; 131964064216a8433360745f69edddce19a606659163The Android Open Source Project } 132064064216a8433360745f69edddce19a606659163The Android Open Source Project else 132164064216a8433360745f69edddce19a606659163The Android Open Source Project { 132264064216a8433360745f69edddce19a606659163The Android Open Source Project *pNetMode = RSN_IBSS; 132364064216a8433360745f69edddce19a606659163The Android Open Source Project } 132464064216a8433360745f69edddce19a606659163The Android Open Source Project } 132564064216a8433360745f69edddce19a606659163The Android Open Source Project else 132664064216a8433360745f69edddce19a606659163The Android Open Source Project { 132764064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 132864064216a8433360745f69edddce19a606659163The Android Open Source Project } 132964064216a8433360745f69edddce19a606659163The Android Open Source Project 133064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 133164064216a8433360745f69edddce19a606659163The Android Open Source Project} 133264064216a8433360745f69edddce19a606659163The Android Open Source Project 133364064216a8433360745f69edddce19a606659163The Android Open Source Project 133464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 133564064216a8433360745f69edddce19a606659163The Android Open Source Project* 133664064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_eventRecv - Set a specific parameter to the rsniation SM 133764064216a8433360745f69edddce19a606659163The Android Open Source Project* 133864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 133964064216a8433360745f69edddce19a606659163The Android Open Source Project* 134064064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 134164064216a8433360745f69edddce19a606659163The Android Open Source Project* 134264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 134364064216a8433360745f69edddce19a606659163The Android Open Source Project* 134464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 134564064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 134664064216a8433360745f69edddce19a606659163The Android Open Source Project* 134764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 134864064216a8433360745f69edddce19a606659163The Android Open Source Project* 134964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 135064064216a8433360745f69edddce19a606659163The Android Open Source Project* 135164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 135264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 135364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_evalSite(TI_HANDLE hRsn, rsnData_t *pRsnData, bssType_e bssType, macAddress_t bssid, UINT32 *pMetric) 135464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 135564064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 135664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 135764064216a8433360745f69edddce19a606659163The Android Open Source Project 135864064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsnData == NULL) || (hRsn == NULL)) 135964064216a8433360745f69edddce19a606659163The Android Open Source Project { 136064064216a8433360745f69edddce19a606659163The Android Open Source Project *pMetric = 0; 136164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 136264064216a8433360745f69edddce19a606659163The Android Open Source Project } 136364064216a8433360745f69edddce19a606659163The Android Open Source Project 136464064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 136564064216a8433360745f69edddce19a606659163The Android Open Source Project 136664064216a8433360745f69edddce19a606659163The Android Open Source Project if (rsn_isSiteBanned(hRsn, bssid) == TRUE) 136764064216a8433360745f69edddce19a606659163The Android Open Source Project { 136864064216a8433360745f69edddce19a606659163The Android Open Source Project *pMetric = 0; 136964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site is banned!\n", __FUNCTION__)); 137064064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 137164064216a8433360745f69edddce19a606659163The Android Open Source Project } 137264064216a8433360745f69edddce19a606659163The Android Open Source Project 137364064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->evalSite (pRsn->pAdmCtrl, pRsnData, bssType, pMetric); 137464064216a8433360745f69edddce19a606659163The Android Open Source Project 137564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: pMetric=%d status=%d\n", __FUNCTION__, *pMetric, status)); 137664064216a8433360745f69edddce19a606659163The Android Open Source Project 137764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 137864064216a8433360745f69edddce19a606659163The Android Open Source Project} 137964064216a8433360745f69edddce19a606659163The Android Open Source Project 138064064216a8433360745f69edddce19a606659163The Android Open Source Project 138164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 138264064216a8433360745f69edddce19a606659163The Android Open Source Project* 138364064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_getInfoElement - 138464064216a8433360745f69edddce19a606659163The Android Open Source Project* 138564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 138664064216a8433360745f69edddce19a606659163The Android Open Source Project* 138764064216a8433360745f69edddce19a606659163The Android Open Source Project* Get the RSN information element. 138864064216a8433360745f69edddce19a606659163The Android Open Source Project* 138964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 139064064216a8433360745f69edddce19a606659163The Android Open Source Project* 139164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsn SM context \n 139264064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pRsnIe - Pointer to the return information element \n 139364064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pRsnIeLen - Pointer to the returned IE's length \n 139464064216a8433360745f69edddce19a606659163The Android Open Source Project* 139564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 139664064216a8433360745f69edddce19a606659163The Android Open Source Project* 139764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 139864064216a8433360745f69edddce19a606659163The Android Open Source Project* 139964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 140064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 140164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_getInfoElement(TI_HANDLE hRsn, UINT8 *pRsnIe, UINT8 *pRsnIeLen) 140264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 140364064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 140464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 140564064216a8433360745f69edddce19a606659163The Android Open Source Project 140664064216a8433360745f69edddce19a606659163The Android Open Source Project if ((hRsn == NULL) || (pRsnIe == NULL) || (pRsnIeLen == NULL)) 140764064216a8433360745f69edddce19a606659163The Android Open Source Project { 140864064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 140964064216a8433360745f69edddce19a606659163The Android Open Source Project } 141064064216a8433360745f69edddce19a606659163The Android Open Source Project 141164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 141264064216a8433360745f69edddce19a606659163The Android Open Source Project 141364064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->getInfoElement (pRsn->pAdmCtrl, pRsnIe, pRsnIeLen); 141464064216a8433360745f69edddce19a606659163The Android Open Source Project 141564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("rsn_getInfoElement pRsnIeLen= %d\n",*pRsnIeLen)); 141664064216a8433360745f69edddce19a606659163The Android Open Source Project 141764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 141864064216a8433360745f69edddce19a606659163The Android Open Source Project} 141964064216a8433360745f69edddce19a606659163The Android Open Source Project 142064064216a8433360745f69edddce19a606659163The Android Open Source Project 142164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 142264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 142364064216a8433360745f69edddce19a606659163The Android Open Source Project* 142464064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_getExcExtendedInfoElement - 142564064216a8433360745f69edddce19a606659163The Android Open Source Project* 142664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 142764064216a8433360745f69edddce19a606659163The Android Open Source Project* 142864064216a8433360745f69edddce19a606659163The Android Open Source Project* Get the Aironet information element. 142964064216a8433360745f69edddce19a606659163The Android Open Source Project* 143064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 143164064216a8433360745f69edddce19a606659163The Android Open Source Project* 143264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsn SM context \n 143364064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pRsnIe - Pointer to the return information element \n 143464064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pRsnIeLen - Pointer to the returned IE's length \n 143564064216a8433360745f69edddce19a606659163The Android Open Source Project* 143664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 143764064216a8433360745f69edddce19a606659163The Android Open Source Project* 143864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 143964064216a8433360745f69edddce19a606659163The Android Open Source Project* 144064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 144164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 144264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_getExcExtendedInfoElement(TI_HANDLE hRsn, UINT8 *pRsnIe, UINT8 *pRsnIeLen) 144364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 144464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 144564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 144664064216a8433360745f69edddce19a606659163The Android Open Source Project 144764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((hRsn == NULL) || (pRsnIe == NULL) || (pRsnIeLen == NULL)) 144864064216a8433360745f69edddce19a606659163The Android Open Source Project { 144964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 145064064216a8433360745f69edddce19a606659163The Android Open Source Project } 145164064216a8433360745f69edddce19a606659163The Android Open Source Project 145264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 145364064216a8433360745f69edddce19a606659163The Android Open Source Project 145464064216a8433360745f69edddce19a606659163The Android Open Source Project status = admCtrlExc_getInfoElement (pRsn->pAdmCtrl, pRsnIe, pRsnIeLen); 145564064216a8433360745f69edddce19a606659163The Android Open Source Project 145664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("rsn_getExcExtendedInfoElement pRsnIeLen= %d\n",*pRsnIeLen)); 145764064216a8433360745f69edddce19a606659163The Android Open Source Project 145864064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 145964064216a8433360745f69edddce19a606659163The Android Open Source Project} 146064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 146164064216a8433360745f69edddce19a606659163The Android Open Source Project 146264064216a8433360745f69edddce19a606659163The Android Open Source Project 146364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 146464064216a8433360745f69edddce19a606659163The Android Open Source Project* 146564064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_eventRecv - Set a specific parameter to the rsniation SM 146664064216a8433360745f69edddce19a606659163The Android Open Source Project* 146764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 146864064216a8433360745f69edddce19a606659163The Android Open Source Project* 146964064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the rsniation SM. 147064064216a8433360745f69edddce19a606659163The Android Open Source Project* 147164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 147264064216a8433360745f69edddce19a606659163The Android Open Source Project* 147364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 147464064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 147564064216a8433360745f69edddce19a606659163The Android Open Source Project* 147664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 147764064216a8433360745f69edddce19a606659163The Android Open Source Project* 147864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 147964064216a8433360745f69edddce19a606659163The Android Open Source Project* 148064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_Start, rsn_Stop 148164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 148264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setSite(TI_HANDLE hRsn, rsnData_t *pRsnData, UINT8 *pAssocIe, UINT8 *pAssocIeLen) 148364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 148464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 148564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 148664064216a8433360745f69edddce19a606659163The Android Open Source Project 148764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsnData == NULL) || (hRsn == NULL)) 148864064216a8433360745f69edddce19a606659163The Android Open Source Project { 148964064216a8433360745f69edddce19a606659163The Android Open Source Project *pAssocIeLen = 0; 149064064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 149164064216a8433360745f69edddce19a606659163The Android Open Source Project } 149264064216a8433360745f69edddce19a606659163The Android Open Source Project 149364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 149464064216a8433360745f69edddce19a606659163The Android Open Source Project 149564064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->setSite (pRsn->pAdmCtrl, pRsnData, pAssocIe, pAssocIeLen); 149664064216a8433360745f69edddce19a606659163The Android Open Source Project 149764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("rsn_setSite ieLen= %d\n",pRsnData->ieLen)); 149864064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 149964064216a8433360745f69edddce19a606659163The Android Open Source Project} 150064064216a8433360745f69edddce19a606659163The Android Open Source Project 150164064216a8433360745f69edddce19a606659163The Android Open Source Project 150264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setKey (rsn_t *pRsn, securityKeys_t *pKey) 150364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 150464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 150564064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 150664064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 150764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 150864064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL macIsBroadcast = FALSE; 150964064216a8433360745f69edddce19a606659163The Android Open Source Project 151064064216a8433360745f69edddce19a606659163The Android Open Source Project keyIndex = (UINT8)pKey->keyIndex; 151164064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn == NULL) || (pKey == NULL) || (keyIndex >= MAX_KEYS_NUM)) 151264064216a8433360745f69edddce19a606659163The Android Open Source Project { 151364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 151464064216a8433360745f69edddce19a606659163The Android Open Source Project } 151564064216a8433360745f69edddce19a606659163The Android Open Source Project 151664064216a8433360745f69edddce19a606659163The Android Open Source Project /* 151764064216a8433360745f69edddce19a606659163The Android Open Source Project * In full driver we use only WEP default keys. That's why we make sure that the macAddress is cleared. 151864064216a8433360745f69edddce19a606659163The Android Open Source Project * In GWSI we use WEP mapping key if the macAddress is not NULL. 151964064216a8433360745f69edddce19a606659163The Android Open Source Project */ 152064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pKey->keyType == WEP_KEY) 152164064216a8433360745f69edddce19a606659163The Android Open Source Project { 152264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pRsn->hOs,(void*)pKey->macAddress.addr, 152364064216a8433360745f69edddce19a606659163The Android Open Source Project sizeof(macAddress_t)); 152464064216a8433360745f69edddce19a606659163The Android Open Source Project } 152564064216a8433360745f69edddce19a606659163The Android Open Source Project 152664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pKey->keyType != NULL_KEY) 152764064216a8433360745f69edddce19a606659163The Android Open Source Project { 152864064216a8433360745f69edddce19a606659163The Android Open Source Project /* set the size to reserve for encryption to the tx */ 152964064216a8433360745f69edddce19a606659163The Android Open Source Project /* update this parameter only in accordance with pairwise key setting */ 153064064216a8433360745f69edddce19a606659163The Android Open Source Project if (!MAC_BROADCAST((&pKey->macAddress))) 153164064216a8433360745f69edddce19a606659163The Android Open Source Project { 153264064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = TX_DATA_ENCRYPTION_FIELD_SIZE; 153364064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pKey->keyType) 153464064216a8433360745f69edddce19a606659163The Android Open Source Project { 153564064216a8433360745f69edddce19a606659163The Android Open Source Project case TKIP_KEY: 153664064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataEncryptionFieldSize = IV_FIELD_SIZE; 153764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 153864064216a8433360745f69edddce19a606659163The Android Open Source Project case AES_KEY: 153964064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataEncryptionFieldSize = AES_AFTER_HEADER_FIELD_SIZE; 154064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 154164064216a8433360745f69edddce19a606659163The Android Open Source Project case NULL_KEY: 154264064216a8433360745f69edddce19a606659163The Android Open Source Project case WEP_KEY: 154364064216a8433360745f69edddce19a606659163The Android Open Source Project case EXC_KEY: 154464064216a8433360745f69edddce19a606659163The Android Open Source Project default: 154564064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.txDataEncryptionFieldSize = 0; 154664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 154764064216a8433360745f69edddce19a606659163The Android Open Source Project } 154864064216a8433360745f69edddce19a606659163The Android Open Source Project 154964064216a8433360745f69edddce19a606659163The Android Open Source Project txData_setParam (pRsn->hTx, ¶m); 155064064216a8433360745f69edddce19a606659163The Android Open Source Project } 155164064216a8433360745f69edddce19a606659163The Android Open Source Project macIsBroadcast = MAC_BROADCAST((&pKey->macAddress)); 155264064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn->keys[keyIndex].keyType != NULL_KEY )&& 155364064216a8433360745f69edddce19a606659163The Android Open Source Project macIsBroadcast && !MAC_BROADCAST((&pRsn->keys[keyIndex].macAddress))) 155464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* In case a new Group key is set instead of a Unicast key, 155564064216a8433360745f69edddce19a606659163The Android Open Source Project first remove the UNIcast key from FW */ 155664064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_removeKey(pRsn, &pRsn->keys[keyIndex]); 155764064216a8433360745f69edddce19a606659163The Android Open Source Project } 155864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyType = pKey->keyType; 155964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyIndex = keyIndex; 156064064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_KEY_ADD_PARAM; 156164064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_buf = (UINT8*) pKey; 156264064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_Func = NULL; 156364064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_handle = NULL; 156464064216a8433360745f69edddce19a606659163The Android Open Source Project 156564064216a8433360745f69edddce19a606659163The Android Open Source Project if (macIsBroadcast) 156664064216a8433360745f69edddce19a606659163The Android Open Source Project { 156764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 156864064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: rsn_setKey, Group ReKey timer started\n")); 156964064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop (pRsn->hOs, pRsn->micFailureReKeyTimer); 157064064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStart (pRsn->hOs, pRsn->micFailureReKeyTimer, RSN_MIC_FAILURE_RE_KEY, FALSE); 157164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->groupKeyUpdate = GROUP_KEY_UPDATE_TRUE; 157264064216a8433360745f69edddce19a606659163The Android Open Source Project } 157364064216a8433360745f69edddce19a606659163The Android Open Source Project 157464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mark key as added */ 157564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys_en [keyIndex] = TRUE; 157664064216a8433360745f69edddce19a606659163The Android Open Source Project 157764064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam (pRsn->hWhalCtrl, &whalParam); 157864064216a8433360745f69edddce19a606659163The Android Open Source Project } 157964064216a8433360745f69edddce19a606659163The Android Open Source Project 158064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 158164064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: rsn_setKey, KeyType=%d, KeyId = 0x%lx,encLen=0x%x\n", 158264064216a8433360745f69edddce19a606659163The Android Open Source Project pKey->keyType,pKey->keyIndex, pKey->encLen)); 158364064216a8433360745f69edddce19a606659163The Android Open Source Project 158464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("\nEncKey = ")); 158564064216a8433360745f69edddce19a606659163The Android Open Source Project 158664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)pKey->encKey, pKey->encLen); 158764064216a8433360745f69edddce19a606659163The Android Open Source Project 158864064216a8433360745f69edddce19a606659163The Android Open Source Project if (pKey->keyType != WEP_KEY) 158964064216a8433360745f69edddce19a606659163The Android Open Source Project { 159064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("\nMac address = ")); 159164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)pKey->macAddress.addr, MAC_ADDR_LEN); 159264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("\nRSC = ")); 159364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)pKey->keyRsc, KEY_RSC_LEN); 159464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("\nMic RX = ")); 159564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)pKey->micRxKey, MAX_KEY_LEN); 159664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("\nMic TX = ")); 159764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_HEX_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, (UINT8 *)pKey->micTxKey, MAX_KEY_LEN); 159864064216a8433360745f69edddce19a606659163The Android Open Source Project } 159964064216a8433360745f69edddce19a606659163The Android Open Source Project 160064064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 160164064216a8433360745f69edddce19a606659163The Android Open Source Project} 160264064216a8433360745f69edddce19a606659163The Android Open Source Project 160364064216a8433360745f69edddce19a606659163The Android Open Source Project 160464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_removeKey (rsn_t *pRsn, securityKeys_t *pKey) 160564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 160664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 160764064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 160864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 keyIndex; 160964064216a8433360745f69edddce19a606659163The Android Open Source Project 161064064216a8433360745f69edddce19a606659163The Android Open Source Project keyIndex = (UINT8)pKey->keyIndex; 161164064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRsn == NULL) || (pKey == NULL) || (keyIndex >= MAX_KEYS_NUM)) 161264064216a8433360745f69edddce19a606659163The Android Open Source Project { 161364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 161464064216a8433360745f69edddce19a606659163The Android Open Source Project } 161564064216a8433360745f69edddce19a606659163The Android Open Source Project 161664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 161764064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_removeKey Entry, keyType=%d, keyIndex=0x%lx\n",pKey->keyType, keyIndex)); 161864064216a8433360745f69edddce19a606659163The Android Open Source Project 161964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now set to the RSN structure. */ 162064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pKey->keyType != NULL_KEY && pRsn->keys_en[keyIndex]) 162164064216a8433360745f69edddce19a606659163The Android Open Source Project { 162264064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_KEY_REMOVE_PARAM; 162364064216a8433360745f69edddce19a606659163The Android Open Source Project /*os_memoryCopy(pRsn->hOs, &whalParam.content.rsnKey, pKey, sizeof(securityKeys_t));*/ 162464064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_buf = (UINT8*) pKey; 162564064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_Func = NULL; 162664064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_handle = NULL; 162764064216a8433360745f69edddce19a606659163The Android Open Source Project 162864064216a8433360745f69edddce19a606659163The Android Open Source Project /* If keyType is TKIP or AES, set the encLen to the KEY enc len - 16 */ 162964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pKey->keyType == TKIP_KEY || pKey->keyType == AES_KEY) 163064064216a8433360745f69edddce19a606659163The Android Open Source Project { 163164064216a8433360745f69edddce19a606659163The Android Open Source Project pKey->encLen = 16; 163264064216a8433360745f69edddce19a606659163The Android Open Source Project if (keyIndex != 0) 163364064216a8433360745f69edddce19a606659163The Android Open Source Project { 163464064216a8433360745f69edddce19a606659163The Android Open Source Project const UINT8 broadcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 163564064216a8433360745f69edddce19a606659163The Android Open Source Project /* 163664064216a8433360745f69edddce19a606659163The Android Open Source Project * if keyType is TKIP or AES, and the key index is broadcast, overwrite the MAC address as broadcast 163764064216a8433360745f69edddce19a606659163The Android Open Source Project * for removing the Broadcast key from the FW 163864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 163964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, (void *)&pKey->macAddress.addr[0], (void*)broadcast, MAC_ADDR_LEN); 164064064216a8433360745f69edddce19a606659163The Android Open Source Project } 164164064216a8433360745f69edddce19a606659163The Android Open Source Project } 164264064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pKey->keyType == WEP_KEY) 164364064216a8433360745f69edddce19a606659163The Android Open Source Project { 164464064216a8433360745f69edddce19a606659163The Android Open Source Project /* In full driver we use only WEP default keys. To remove it we make sure that the MAC address is NULL */ 164564064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero(pRsn->hOs,(void*)pKey->macAddress.addr,sizeof(macAddress_t)); 164664064216a8433360745f69edddce19a606659163The Android Open Source Project } 164764064216a8433360745f69edddce19a606659163The Android Open Source Project 164864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mark key as deleted */ 164964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys_en[keyIndex] = FALSE; 165064064216a8433360745f69edddce19a606659163The Android Open Source Project 165164064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam (pRsn->hWhalCtrl, &whalParam); 165264064216a8433360745f69edddce19a606659163The Android Open Source Project 165364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 165464064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_removeKey in whal, status =%d\n", status)); 165564064216a8433360745f69edddce19a606659163The Android Open Source Project 165664064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean the key flags*/ 165764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyIndex &= 0x000000FF; 165864064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].keyType = NULL_KEY; 165964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->keys[keyIndex].encLen = 0; 166064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->wepDefaultKeys[keyIndex] = FALSE; 166164064216a8433360745f69edddce19a606659163The Android Open Source Project } 166264064216a8433360745f69edddce19a606659163The Android Open Source Project 166364064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 166464064216a8433360745f69edddce19a606659163The Android Open Source Project} 166564064216a8433360745f69edddce19a606659163The Android Open Source Project 166664064216a8433360745f69edddce19a606659163The Android Open Source Project 166764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_setDefaultKeyId(rsn_t *pRsn, UINT8 keyId) 166864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 166964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 167064064216a8433360745f69edddce19a606659163The Android Open Source Project whalParamInfo_t whalParam; 167164064216a8433360745f69edddce19a606659163The Android Open Source Project 167264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 167364064216a8433360745f69edddce19a606659163The Android Open Source Project { 167464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 167564064216a8433360745f69edddce19a606659163The Android Open Source Project } 167664064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->defaultKeyId = keyId; 167764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Now we configure default key ID to the HAL */ 167864064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.paramType = HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM; 167964064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_buf = &keyId; 168064064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_Func = NULL; 168164064216a8433360745f69edddce19a606659163The Android Open Source Project whalParam.content.configureCmdCBParams.CB_handle = NULL; 168264064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_SetParam(pRsn->hWhalCtrl, &whalParam); 168364064216a8433360745f69edddce19a606659163The Android Open Source Project 168464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 168564064216a8433360745f69edddce19a606659163The Android Open Source Project ("RSN: rsn_setDefaultKeyId, KeyId = 0x%lx\n", 168664064216a8433360745f69edddce19a606659163The Android Open Source Project keyId)); 168764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 168864064216a8433360745f69edddce19a606659163The Android Open Source Project} 168964064216a8433360745f69edddce19a606659163The Android Open Source Project 169064064216a8433360745f69edddce19a606659163The Android Open Source Project 169164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_reportAuthFailure(TI_HANDLE hRsn, authStatus_e authStatus) 169264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 169364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 169464064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 169564064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 169664064216a8433360745f69edddce19a606659163The Android Open Source Project 169764064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRsn==NULL) 169864064216a8433360745f69edddce19a606659163The Android Open Source Project { 169964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 170064064216a8433360745f69edddce19a606659163The Android Open Source Project } 170164064216a8433360745f69edddce19a606659163The Android Open Source Project 170264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 170364064216a8433360745f69edddce19a606659163The Android Open Source Project 170464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Remove AP from candidate list for a specified amount of time */ 170564064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_CURRENT_BSSID_PARAM; 170664064216a8433360745f69edddce19a606659163The Android Open Source Project status = ctrlData_getParam(pRsn->hCtrlData, ¶m); 170764064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 170864064216a8433360745f69edddce19a606659163The Android Open Source Project { 170964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRsn->hReport, RSN_MODULE_LOG, 171064064216a8433360745f69edddce19a606659163The Android Open Source Project ("rsn_reportAuthFailure, unable to retrieve BSSID \n")); 171164064216a8433360745f69edddce19a606659163The Android Open Source Project } 171264064216a8433360745f69edddce19a606659163The Android Open Source Project else 171364064216a8433360745f69edddce19a606659163The Android Open Source Project { 171464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 171564064216a8433360745f69edddce19a606659163The Android Open Source Project ("current station is banned from the roaming candidates list for %d Ms\n", 171664064216a8433360745f69edddce19a606659163The Android Open Source Project RSN_AUTH_FAILURE_TIMEOUT)); 171764064216a8433360745f69edddce19a606659163The Android Open Source Project 171864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_banSite(hRsn, param.content.ctrlDataCurrentBSSID, RSN_SITE_BAN_LEVEL_FULL, RSN_AUTH_FAILURE_TIMEOUT); 171964064216a8433360745f69edddce19a606659163The Android Open Source Project } 172064064216a8433360745f69edddce19a606659163The Android Open Source Project 172164064216a8433360745f69edddce19a606659163The Android Open Source Project 172264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED 172364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 172464064216a8433360745f69edddce19a606659163The Android Open Source Project ("CALLING rougeAP, status= %d \n",authStatus)); 172564064216a8433360745f69edddce19a606659163The Android Open Source Project status = excMngr_rogueApDetected (pRsn->hExcMngr, authStatus); 172664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 172764064216a8433360745f69edddce19a606659163The Android Open Source Project UNUSED(pRsn); 172864064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 172964064216a8433360745f69edddce19a606659163The Android Open Source Project} 173064064216a8433360745f69edddce19a606659163The Android Open Source Project 173164064216a8433360745f69edddce19a606659163The Android Open Source Project 173264064216a8433360745f69edddce19a606659163The Android Open Source Project/****** 173364064216a8433360745f69edddce19a606659163The Android Open Source ProjectThis is the CB function for mic failure event from the FW 173464064216a8433360745f69edddce19a606659163The Android Open Source Project*******/ 173564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_reportMicFailure(TI_HANDLE hRsn, UINT8 *pType, UINT32 Length) 173664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 173764064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn = (rsn_t *) hRsn; 173864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_siteBanLevel_e banLevel; 173964064216a8433360745f69edddce19a606659163The Android Open Source Project OS_802_11_AUTHENTICATION_REQUEST *request; 174064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 AuthBuf[sizeof(UINT32) + sizeof(OS_802_11_AUTHENTICATION_REQUEST)]; 174164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 174264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 failureType; 174364064216a8433360745f69edddce19a606659163The Android Open Source Project 174464064216a8433360745f69edddce19a606659163The Android Open Source Project failureType = *pType; 174564064216a8433360745f69edddce19a606659163The Android Open Source Project 174664064216a8433360745f69edddce19a606659163The Android Open Source Project if (((pRsn->paeConfig.unicastSuite == RSN_CIPHER_TKIP) && (failureType == KEY_TKIP_MIC_PAIRWISE)) || 174764064216a8433360745f69edddce19a606659163The Android Open Source Project ((pRsn->paeConfig.broadcastSuite == RSN_CIPHER_TKIP) && (failureType == KEY_TKIP_MIC_GROUP))) 174864064216a8433360745f69edddce19a606659163The Android Open Source Project { 174964064216a8433360745f69edddce19a606659163The Android Open Source Project /* check if the MIC failure is group and group key update */ 175064064216a8433360745f69edddce19a606659163The Android Open Source Project /* was performed during the last 3 seconds */ 175164064216a8433360745f69edddce19a606659163The Android Open Source Project if ((failureType == KEY_TKIP_MIC_GROUP) && 175264064216a8433360745f69edddce19a606659163The Android Open Source Project (pRsn->groupKeyUpdate == GROUP_KEY_UPDATE_TRUE)) 175364064216a8433360745f69edddce19a606659163The Android Open Source Project { 175464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 175564064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: Group MIC failure ignored, key update was performed within the last 3 seconds.\n", __FUNCTION__)); 175664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 175764064216a8433360745f69edddce19a606659163The Android Open Source Project } 175864064216a8433360745f69edddce19a606659163The Android Open Source Project 175964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Prepare the Authentication Request */ 176064064216a8433360745f69edddce19a606659163The Android Open Source Project request = (OS_802_11_AUTHENTICATION_REQUEST *)(AuthBuf + sizeof(UINT32)); 176164064216a8433360745f69edddce19a606659163The Android Open Source Project request->Length = sizeof(OS_802_11_AUTHENTICATION_REQUEST); 176264064216a8433360745f69edddce19a606659163The Android Open Source Project 176364064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = CTRL_DATA_CURRENT_BSSID_PARAM; 176464064216a8433360745f69edddce19a606659163The Android Open Source Project if (ctrlData_getParam (pRsn->hCtrlData, ¶m) != OK) 176564064216a8433360745f69edddce19a606659163The Android Open Source Project { 176664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 176764064216a8433360745f69edddce19a606659163The Android Open Source Project } 176864064216a8433360745f69edddce19a606659163The Android Open Source Project 176964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Generate 802 Media specific indication event */ 177064064216a8433360745f69edddce19a606659163The Android Open Source Project *(UINT32*)AuthBuf = os802_11StatusType_Authentication; 177164064216a8433360745f69edddce19a606659163The Android Open Source Project 177264064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy (pRsn->hOs, request->BSSID, (void *)param.content.ctrlDataCurrentBSSID.addr, MAC_ADDR_LEN); 177364064216a8433360745f69edddce19a606659163The Android Open Source Project 177464064216a8433360745f69edddce19a606659163The Android Open Source Project if (failureType == KEY_TKIP_MIC_PAIRWISE) 177564064216a8433360745f69edddce19a606659163The Android Open Source Project { 177664064216a8433360745f69edddce19a606659163The Android Open Source Project request->Flags = OS_802_11_REQUEST_PAIRWISE_ERROR; 177764064216a8433360745f69edddce19a606659163The Android Open Source Project } 177864064216a8433360745f69edddce19a606659163The Android Open Source Project else 177964064216a8433360745f69edddce19a606659163The Android Open Source Project { 178064064216a8433360745f69edddce19a606659163The Android Open Source Project request->Flags = OS_802_11_REQUEST_GROUP_ERROR; 178164064216a8433360745f69edddce19a606659163The Android Open Source Project } 178264064216a8433360745f69edddce19a606659163The Android Open Source Project 178364064216a8433360745f69edddce19a606659163The Android Open Source Project EvHandlerSendEvent (pRsn->hEvHandler, 178464064216a8433360745f69edddce19a606659163The Android Open Source Project IPC_EVENT_MEDIA_SPECIFIC, 178564064216a8433360745f69edddce19a606659163The Android Open Source Project (UINT8*)AuthBuf, 178664064216a8433360745f69edddce19a606659163The Android Open Source Project sizeof(UINT32) + sizeof(OS_802_11_AUTHENTICATION_REQUEST)); 178764064216a8433360745f69edddce19a606659163The Android Open Source Project 178864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Update and check the ban level to decide what actions need to take place */ 178964064216a8433360745f69edddce19a606659163The Android Open Source Project banLevel = rsn_banSite (hRsn, param.content.ctrlDataCurrentBSSID, RSN_SITE_BAN_LEVEL_HALF, RSN_MIC_FAILURE_TIMEOUT); 179064064216a8433360745f69edddce19a606659163The Android Open Source Project if (banLevel == RSN_SITE_BAN_LEVEL_FULL) 179164064216a8433360745f69edddce19a606659163The Android Open Source Project { 179264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Site is banned so prepare to disconnect */ 179364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 179464064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: Second MIC failure, closing Rx port...\n", __FUNCTION__)); 179564064216a8433360745f69edddce19a606659163The Android Open Source Project 179664064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = RX_DATA_PORT_STATUS_PARAM; 179764064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.rxDataPortStatus = CLOSE; 179864064216a8433360745f69edddce19a606659163The Android Open Source Project rxData_setParam(pRsn->hRx, ¶m); 179964064216a8433360745f69edddce19a606659163The Android Open Source Project 180064064216a8433360745f69edddce19a606659163The Android Open Source Project /* stop the mic failure Report timer and start a new one for 0.5 seconds */ 180164064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pRsn->hOs, pRsn->micFailureReportWaitTimer); 180264064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStart(pRsn->hOs, pRsn->micFailureReportWaitTimer, RSN_MIC_FAILURE_REPORT_WAIT, FALSE); 180364064216a8433360745f69edddce19a606659163The Android Open Source Project } 180464064216a8433360745f69edddce19a606659163The Android Open Source Project else 180564064216a8433360745f69edddce19a606659163The Android Open Source Project { 180664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Site is only half banned so nothing needs to be done for now */ 180764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 180864064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: First MIC failure, business as usual for now...\n", __FUNCTION__)); 180964064216a8433360745f69edddce19a606659163The Android Open Source Project } 181064064216a8433360745f69edddce19a606659163The Android Open Source Project } 181164064216a8433360745f69edddce19a606659163The Android Open Source Project 181264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 181364064216a8433360745f69edddce19a606659163The Android Open Source Project} 181464064216a8433360745f69edddce19a606659163The Android Open Source Project 181564064216a8433360745f69edddce19a606659163The Android Open Source Project 181664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rsn_groupReKeyTimeout(TI_HANDLE hRsn) 181764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 181864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 181964064216a8433360745f69edddce19a606659163The Android Open Source Project 182064064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 182164064216a8433360745f69edddce19a606659163The Android Open Source Project 182264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 182364064216a8433360745f69edddce19a606659163The Android Open Source Project { 182464064216a8433360745f69edddce19a606659163The Android Open Source Project return; 182564064216a8433360745f69edddce19a606659163The Android Open Source Project } 182664064216a8433360745f69edddce19a606659163The Android Open Source Project 182764064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->groupKeyUpdate = GROUP_KEY_UPDATE_FALSE; 182864064216a8433360745f69edddce19a606659163The Android Open Source Project} 182964064216a8433360745f69edddce19a606659163The Android Open Source Project 183064064216a8433360745f69edddce19a606659163The Android Open Source Project 183164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rsn_micFailureReportTimeout(TI_HANDLE hRsn) 183264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 183364064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 183464064216a8433360745f69edddce19a606659163The Android Open Source Project 183564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 183664064216a8433360745f69edddce19a606659163The Android Open Source Project 183764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn == NULL) 183864064216a8433360745f69edddce19a606659163The Android Open Source Project { 183964064216a8433360745f69edddce19a606659163The Android Open Source Project return; 184064064216a8433360745f69edddce19a606659163The Android Open Source Project } 184164064216a8433360745f69edddce19a606659163The Android Open Source Project 184264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, 184364064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: MIC failure reported, disassociating...\n", __FUNCTION__)); 184464064216a8433360745f69edddce19a606659163The Android Open Source Project 184564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_reportRoamingEvent (pRsn->hAPConn, ROAMING_TRIGGER_SECURITY_ATTACK, NULL); 184664064216a8433360745f69edddce19a606659163The Android Open Source Project} 184764064216a8433360745f69edddce19a606659163The Android Open Source Project 184864064216a8433360745f69edddce19a606659163The Android Open Source Project 184964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 185064064216a8433360745f69edddce19a606659163The Android Open Source Project* 185164064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_resetPMKIDList - 185264064216a8433360745f69edddce19a606659163The Android Open Source Project* 185364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 185464064216a8433360745f69edddce19a606659163The Android Open Source Project* Cleans up the PMKID cache. 185564064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when SSID is being changed. 185664064216a8433360745f69edddce19a606659163The Android Open Source Project* 185764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 185864064216a8433360745f69edddce19a606659163The Android Open Source Project* 185964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 186064064216a8433360745f69edddce19a606659163The Android Open Source Project* 186164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 186264064216a8433360745f69edddce19a606659163The Android Open Source Project* 186364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 186464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 186564064216a8433360745f69edddce19a606659163The Android Open Source Project 186664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_resetPMKIDList(TI_HANDLE hRsn) 186764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 186864064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn = (rsn_t*)hRsn; 186964064216a8433360745f69edddce19a606659163The Android Open Source Project 187064064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pRsn) 187164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 187264064216a8433360745f69edddce19a606659163The Android Open Source Project 187364064216a8433360745f69edddce19a606659163The Android Open Source Project return (pRsn->pAdmCtrl->resetPmkidList (pRsn->pAdmCtrl)); 187464064216a8433360745f69edddce19a606659163The Android Open Source Project} 187564064216a8433360745f69edddce19a606659163The Android Open Source Project 187664064216a8433360745f69edddce19a606659163The Android Open Source Project 187764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rsn_debugFunc(TI_HANDLE hRsn) 187864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 187964064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 188064064216a8433360745f69edddce19a606659163The Android Open Source Project 188164064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRsn == NULL) 188264064216a8433360745f69edddce19a606659163The Android Open Source Project { 188364064216a8433360745f69edddce19a606659163The Android Open Source Project return; 188464064216a8433360745f69edddce19a606659163The Android Open Source Project } 188564064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 188664064216a8433360745f69edddce19a606659163The Android Open Source Project 188764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("rsnStartedTs, ts = %d\n", pRsn->rsnStartedTs)); 188864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("rsnCompletedTs, ts = %d\n", pRsn->rsnCompletedTs)); 188964064216a8433360745f69edddce19a606659163The Android Open Source Project} 189064064216a8433360745f69edddce19a606659163The Android Open Source Project 189164064216a8433360745f69edddce19a606659163The Android Open Source Project 189264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 189364064216a8433360745f69edddce19a606659163The Android Open Source Project* 189464064216a8433360745f69edddce19a606659163The Android Open Source Project* rsn_startPreAuth - 189564064216a8433360745f69edddce19a606659163The Android Open Source Project* 189664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 189764064216a8433360745f69edddce19a606659163The Android Open Source Project* 189864064216a8433360745f69edddce19a606659163The Android Open Source Project* Start pre-authentication on a list of given BSSIDs. 189964064216a8433360745f69edddce19a606659163The Android Open Source Project* 190064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 190164064216a8433360745f69edddce19a606659163The Android Open Source Project* 190264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRsn - Rsniation SM context \n 190364064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pBssidList - list of BSSIDs that require Pre-Auth \n 190464064216a8433360745f69edddce19a606659163The Android Open Source Project* 190564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 190664064216a8433360745f69edddce19a606659163The Android Open Source Project* 190764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 190864064216a8433360745f69edddce19a606659163The Android Open Source Project* 190964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 191064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 191164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rsn_startPreAuth(TI_HANDLE hRsn, bssidList4PreAuth_t *pBssidList) 191264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 191364064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t *pRsn; 191464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 191564064216a8433360745f69edddce19a606659163The Android Open Source Project 191664064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRsn == NULL || pBssidList == NULL) 191764064216a8433360745f69edddce19a606659163The Android Open Source Project { 191864064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 191964064216a8433360745f69edddce19a606659163The Android Open Source Project } 192064064216a8433360745f69edddce19a606659163The Android Open Source Project 192164064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn = (rsn_t*)hRsn; 192264064216a8433360745f69edddce19a606659163The Android Open Source Project 192364064216a8433360745f69edddce19a606659163The Android Open Source Project status = pRsn->pAdmCtrl->startPreAuth (pRsn->pAdmCtrl, pBssidList); 192464064216a8433360745f69edddce19a606659163The Android Open Source Project 192564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("rsn_startPreAuth \n")); 192664064216a8433360745f69edddce19a606659163The Android Open Source Project 192764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 192864064216a8433360745f69edddce19a606659163The Android Open Source Project} 192964064216a8433360745f69edddce19a606659163The Android Open Source Project 193064064216a8433360745f69edddce19a606659163The Android Open Source Project 193164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 193264064216a8433360745f69edddce19a606659163The Android Open Source Project * 193364064216a8433360745f69edddce19a606659163The Android Open Source Project * isSiteBanned - 193464064216a8433360745f69edddce19a606659163The Android Open Source Project * 193564064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 193664064216a8433360745f69edddce19a606659163The Android Open Source Project * 193764064216a8433360745f69edddce19a606659163The Android Open Source Project * Returns whether or not the site with the specified Bssid is banned or not. 193864064216a8433360745f69edddce19a606659163The Android Open Source Project * 193964064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 194064064216a8433360745f69edddce19a606659163The Android Open Source Project * 194164064216a8433360745f69edddce19a606659163The Android Open Source Project * I - hRsn - RSN module context \n 194264064216a8433360745f69edddce19a606659163The Android Open Source Project * I - siteBssid - The desired site's bssid \n 194364064216a8433360745f69edddce19a606659163The Android Open Source Project * 194464064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 194564064216a8433360745f69edddce19a606659163The Android Open Source Project * 194664064216a8433360745f69edddce19a606659163The Android Open Source Project * NOK iff site is banned. 194764064216a8433360745f69edddce19a606659163The Android Open Source Project * 194864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 194964064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL rsn_isSiteBanned(TI_HANDLE hRsn, macAddress_t siteBssid) 195064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 195164064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t * pRsn = (rsn_t *) hRsn; 195264064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_siteBanEntry_t * entry; 195364064216a8433360745f69edddce19a606659163The Android Open Source Project 195464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if site is in the list */ 195564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((entry = findBannedSiteAndCleanup(hRsn, siteBssid)) == NULL) 195664064216a8433360745f69edddce19a606659163The Android Open Source Project { 195764064216a8433360745f69edddce19a606659163The Android Open Source Project return FALSE; 195864064216a8433360745f69edddce19a606659163The Android Open Source Project } 195964064216a8433360745f69edddce19a606659163The Android Open Source Project 196064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site %02X-%02X-%02X-%02X-%02X-%02X found with ban level %d...\n", __FUNCTION__, siteBssid.addr[0], siteBssid.addr[1], siteBssid.addr[2], siteBssid.addr[3], siteBssid.addr[4], siteBssid.addr[5], entry->banLevel)); 196164064216a8433360745f69edddce19a606659163The Android Open Source Project 196264064216a8433360745f69edddce19a606659163The Android Open Source Project return (entry->banLevel == RSN_SITE_BAN_LEVEL_FULL); 196364064216a8433360745f69edddce19a606659163The Android Open Source Project} 196464064216a8433360745f69edddce19a606659163The Android Open Source Project 196564064216a8433360745f69edddce19a606659163The Android Open Source Project 196664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 196764064216a8433360745f69edddce19a606659163The Android Open Source Project * 196864064216a8433360745f69edddce19a606659163The Android Open Source Project * rsn_banSite - 196964064216a8433360745f69edddce19a606659163The Android Open Source Project * 197064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 197164064216a8433360745f69edddce19a606659163The Android Open Source Project * 197264064216a8433360745f69edddce19a606659163The Android Open Source Project * Bans the specified site from being associated to for the specified duration. 197364064216a8433360745f69edddce19a606659163The Android Open Source Project * If a ban level of WARNING is given and no previous ban was in effect the 197464064216a8433360745f69edddce19a606659163The Android Open Source Project * warning is marked down but other than that nothing happens. In case a previous 197564064216a8433360745f69edddce19a606659163The Android Open Source Project * warning (or ban of course) is still in effect 197664064216a8433360745f69edddce19a606659163The Android Open Source Project * 197764064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 197864064216a8433360745f69edddce19a606659163The Android Open Source Project * 197964064216a8433360745f69edddce19a606659163The Android Open Source Project * I - hRsn - RSN module context \n 198064064216a8433360745f69edddce19a606659163The Android Open Source Project * I - siteBssid - The desired site's bssid \n 198164064216a8433360745f69edddce19a606659163The Android Open Source Project * I - banLevel - The desired level of ban (Warning / Ban) 198264064216a8433360745f69edddce19a606659163The Android Open Source Project * I - durationMs - The duration of ban in milliseconds 198364064216a8433360745f69edddce19a606659163The Android Open Source Project * 198464064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 198564064216a8433360745f69edddce19a606659163The Android Open Source Project * 198664064216a8433360745f69edddce19a606659163The Android Open Source Project * The level of ban (warning / banned). 198764064216a8433360745f69edddce19a606659163The Android Open Source Project * 198864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 198964064216a8433360745f69edddce19a606659163The Android Open Source Projectrsn_siteBanLevel_e rsn_banSite(TI_HANDLE hRsn, macAddress_t siteBssid, rsn_siteBanLevel_e banLevel, UINT32 durationMs) 199064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 199164064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t * pRsn = (rsn_t *) hRsn; 199264064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_siteBanEntry_t * entry; 199364064216a8433360745f69edddce19a606659163The Android Open Source Project 199464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Try finding the site in the list */ 199564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((entry = findBannedSiteAndCleanup(hRsn, siteBssid)) != NULL) 199664064216a8433360745f69edddce19a606659163The Android Open Source Project { 199764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Site found so a previous ban is still in effect */ 199864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site %02X-%02X-%02X-%02X-%02X-%02X found and has been set to ban level full!\n", __FUNCTION__, siteBssid.addr[0], siteBssid.addr[1], siteBssid.addr[2], siteBssid.addr[3], siteBssid.addr[4], siteBssid.addr[5])); 199964064216a8433360745f69edddce19a606659163The Android Open Source Project 200064064216a8433360745f69edddce19a606659163The Android Open Source Project entry->banLevel = RSN_SITE_BAN_LEVEL_FULL; 200164064216a8433360745f69edddce19a606659163The Android Open Source Project } 200264064216a8433360745f69edddce19a606659163The Android Open Source Project else 200364064216a8433360745f69edddce19a606659163The Android Open Source Project { 200464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Site doesn't appear in the list, so find a place to insert it */ 200564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site %02X-%02X-%02X-%02X-%02X-%02X added with ban level %d!\n", __FUNCTION__, siteBssid.addr[0], siteBssid.addr[1], siteBssid.addr[2], siteBssid.addr[3], siteBssid.addr[4], siteBssid.addr[5], banLevel)); 200664064216a8433360745f69edddce19a606659163The Android Open Source Project 200764064216a8433360745f69edddce19a606659163The Android Open Source Project entry = findEntryForInsert (hRsn); 200864064216a8433360745f69edddce19a606659163The Android Open Source Project 200964064216a8433360745f69edddce19a606659163The Android Open Source Project entry->siteBssid = siteBssid; 201064064216a8433360745f69edddce19a606659163The Android Open Source Project entry->banLevel = banLevel; 201164064216a8433360745f69edddce19a606659163The Android Open Source Project 201264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->numOfBannedSites++; 201364064216a8433360745f69edddce19a606659163The Android Open Source Project } 201464064216a8433360745f69edddce19a606659163The Android Open Source Project 201564064216a8433360745f69edddce19a606659163The Android Open Source Project entry->banStartedMs = os_timeStampMs (pRsn->hOs); 201664064216a8433360745f69edddce19a606659163The Android Open Source Project entry->banDurationMs = durationMs; 201764064216a8433360745f69edddce19a606659163The Android Open Source Project 201864064216a8433360745f69edddce19a606659163The Android Open Source Project return entry->banLevel; 201964064216a8433360745f69edddce19a606659163The Android Open Source Project} 202064064216a8433360745f69edddce19a606659163The Android Open Source Project 202164064216a8433360745f69edddce19a606659163The Android Open Source Project 202264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 202364064216a8433360745f69edddce19a606659163The Android Open Source Project * 202464064216a8433360745f69edddce19a606659163The Android Open Source Project * findEntryForInsert - 202564064216a8433360745f69edddce19a606659163The Android Open Source Project * 202664064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 202764064216a8433360745f69edddce19a606659163The Android Open Source Project * 202864064216a8433360745f69edddce19a606659163The Android Open Source Project * Returns a place to insert a new banned site. 202964064216a8433360745f69edddce19a606659163The Android Open Source Project * 203064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 203164064216a8433360745f69edddce19a606659163The Android Open Source Project * 203264064216a8433360745f69edddce19a606659163The Android Open Source Project * I - hRsn - RSN module context \n 203364064216a8433360745f69edddce19a606659163The Android Open Source Project * 203464064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 203564064216a8433360745f69edddce19a606659163The Android Open Source Project * 203664064216a8433360745f69edddce19a606659163The Android Open Source Project * A pointer to a suitable site entry. 203764064216a8433360745f69edddce19a606659163The Android Open Source Project * 203864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 203964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rsn_siteBanEntry_t * findEntryForInsert(TI_HANDLE hRsn) 204064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 204164064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t * pRsn = (rsn_t *) hRsn; 204264064216a8433360745f69edddce19a606659163The Android Open Source Project 204364064216a8433360745f69edddce19a606659163The Android Open Source Project /* In the extreme case that the list is full we overwrite an old entry */ 204464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRsn->numOfBannedSites == RSN_MAX_NUMBER_OF_BANNED_SITES) 204564064216a8433360745f69edddce19a606659163The Android Open Source Project { 204664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRsn->hReport, RSN_MODULE_LOG, 204764064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: No room left to insert new banned site, overwriting old one!\n", __FUNCTION__)); 204864064216a8433360745f69edddce19a606659163The Android Open Source Project 204964064216a8433360745f69edddce19a606659163The Android Open Source Project return &(pRsn->bannedSites[0]); 205064064216a8433360745f69edddce19a606659163The Android Open Source Project } 205164064216a8433360745f69edddce19a606659163The Android Open Source Project 205264064216a8433360745f69edddce19a606659163The Android Open Source Project return &(pRsn->bannedSites[pRsn->numOfBannedSites]); 205364064216a8433360745f69edddce19a606659163The Android Open Source Project} 205464064216a8433360745f69edddce19a606659163The Android Open Source Project 205564064216a8433360745f69edddce19a606659163The Android Open Source Project 205664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 205764064216a8433360745f69edddce19a606659163The Android Open Source Project * 205864064216a8433360745f69edddce19a606659163The Android Open Source Project * findBannedSiteAndCleanup - 205964064216a8433360745f69edddce19a606659163The Android Open Source Project * 206064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 206164064216a8433360745f69edddce19a606659163The Android Open Source Project * 206264064216a8433360745f69edddce19a606659163The Android Open Source Project * Searches the banned sites list for the desired site while cleaning up 206364064216a8433360745f69edddce19a606659163The Android Open Source Project * expired sites found along the way. 206464064216a8433360745f69edddce19a606659163The Android Open Source Project * 206564064216a8433360745f69edddce19a606659163The Android Open Source Project * Note that this function might change the structure of the banned sites 206664064216a8433360745f69edddce19a606659163The Android Open Source Project * list so old iterators into the list might be invalidated. 206764064216a8433360745f69edddce19a606659163The Android Open Source Project * 206864064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 206964064216a8433360745f69edddce19a606659163The Android Open Source Project * 207064064216a8433360745f69edddce19a606659163The Android Open Source Project * I - hRsn - RSN module context \n 207164064216a8433360745f69edddce19a606659163The Android Open Source Project * I - siteBssid - The desired site's bssid \n 207264064216a8433360745f69edddce19a606659163The Android Open Source Project * 207364064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 207464064216a8433360745f69edddce19a606659163The Android Open Source Project * 207564064216a8433360745f69edddce19a606659163The Android Open Source Project * A pointer to the desired site's entry if found, 207664064216a8433360745f69edddce19a606659163The Android Open Source Project * NULL otherwise. 207764064216a8433360745f69edddce19a606659163The Android Open Source Project * 207864064216a8433360745f69edddce19a606659163The Android Open Source Project */ 207964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rsn_siteBanEntry_t * findBannedSiteAndCleanup(TI_HANDLE hRsn, macAddress_t siteBssid) 208064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 208164064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t * pRsn = (rsn_t *) hRsn; 208264064216a8433360745f69edddce19a606659163The Android Open Source Project int iter; 208364064216a8433360745f69edddce19a606659163The Android Open Source Project 208464064216a8433360745f69edddce19a606659163The Android Open Source Project for (iter = 0; iter < pRsn->numOfBannedSites; iter++) 208564064216a8433360745f69edddce19a606659163The Android Open Source Project { 208664064216a8433360745f69edddce19a606659163The Android Open Source Project /* If this entry has expired we'd like to clean it up */ 208764064216a8433360745f69edddce19a606659163The Android Open Source Project if (os_timeStampMs(pRsn->hOs) - pRsn->bannedSites[iter].banStartedMs >= pRsn->bannedSites[iter].banDurationMs) 208864064216a8433360745f69edddce19a606659163The Android Open Source Project { 208964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Found expired entry at index %d, cleaning it up...\n", __FUNCTION__, iter)); 209064064216a8433360745f69edddce19a606659163The Android Open Source Project 209164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Replace this entry with the last one */ 209264064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->bannedSites[iter] = pRsn->bannedSites[pRsn->numOfBannedSites - 1]; 209364064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->numOfBannedSites--; 209464064216a8433360745f69edddce19a606659163The Android Open Source Project 209564064216a8433360745f69edddce19a606659163The Android Open Source Project /* we now repeat the iteration on this entry */ 209664064216a8433360745f69edddce19a606659163The Android Open Source Project iter--; 209764064216a8433360745f69edddce19a606659163The Android Open Source Project 209864064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 209964064216a8433360745f69edddce19a606659163The Android Open Source Project } 210064064216a8433360745f69edddce19a606659163The Android Open Source Project 210164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Is this the entry for the site we're looking for? */ 210264064216a8433360745f69edddce19a606659163The Android Open Source Project if (MAC_EQUAL (&siteBssid, &pRsn->bannedSites[iter].siteBssid)) 210364064216a8433360745f69edddce19a606659163The Android Open Source Project { 210464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site %02X-%02X-%02X-%02X-%02X-%02X found at index %d!\n", __FUNCTION__, siteBssid.addr[0], siteBssid.addr[1], siteBssid.addr[2], siteBssid.addr[3], siteBssid.addr[4], siteBssid.addr[5], iter)); 210564064216a8433360745f69edddce19a606659163The Android Open Source Project 210664064216a8433360745f69edddce19a606659163The Android Open Source Project return &pRsn->bannedSites[iter]; 210764064216a8433360745f69edddce19a606659163The Android Open Source Project } 210864064216a8433360745f69edddce19a606659163The Android Open Source Project } 210964064216a8433360745f69edddce19a606659163The Android Open Source Project 211064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Entry not found... */ 211164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s: Site %02X-%02X-%02X-%02X-%02X-%02X not found...\n", __FUNCTION__, siteBssid.addr[0], siteBssid.addr[1], siteBssid.addr[2], siteBssid.addr[3], siteBssid.addr[4], siteBssid.addr[5], iter)); 211264064216a8433360745f69edddce19a606659163The Android Open Source Project 211364064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 211464064216a8433360745f69edddce19a606659163The Android Open Source Project} 211564064216a8433360745f69edddce19a606659163The Android Open Source Project 211664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 211764064216a8433360745f69edddce19a606659163The Android Open Source Project * 211864064216a8433360745f69edddce19a606659163The Android Open Source Project * clearBannedSiteList - 211964064216a8433360745f69edddce19a606659163The Android Open Source Project * 212064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description: 212164064216a8433360745f69edddce19a606659163The Android Open Source Project * 212264064216a8433360745f69edddce19a606659163The Android Open Source Project * Clears the banned sites list. 212364064216a8433360745f69edddce19a606659163The Android Open Source Project * 212464064216a8433360745f69edddce19a606659163The Android Open Source Project * 212564064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS: 212664064216a8433360745f69edddce19a606659163The Android Open Source Project * 212764064216a8433360745f69edddce19a606659163The Android Open Source Project * I - hRsn - RSN module context \n 212864064216a8433360745f69edddce19a606659163The Android Open Source Project * 212964064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS: 213064064216a8433360745f69edddce19a606659163The Android Open Source Project * 213164064216a8433360745f69edddce19a606659163The Android Open Source Project * 213264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 213364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Comment out the call to clearBannedSiteList due to fail in WiFi mic attack test */ 213464064216a8433360745f69edddce19a606659163The Android Open Source Project/* 213564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void clearBannedSiteList(TI_HANDLE hRsn) 213664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 213764064216a8433360745f69edddce19a606659163The Android Open Source Project rsn_t * pRsn = (rsn_t *) hRsn; 213864064216a8433360745f69edddce19a606659163The Android Open Source Project 213964064216a8433360745f69edddce19a606659163The Android Open Source Project pRsn->numOfBannedSites = 0; 214064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRsn->hReport, RSN_MODULE_LOG, ("%s\n", __FUNCTION__)); 214164064216a8433360745f69edddce19a606659163The Android Open Source Project 214264064216a8433360745f69edddce19a606659163The Android Open Source Project} 214364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 214464064216a8433360745f69edddce19a606659163The Android Open Source Project 214564064216a8433360745f69edddce19a606659163The Android Open Source Project 214664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef RSN_NOT_USED 214764064216a8433360745f69edddce19a606659163The Android Open Source Project 214864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic INT16 convertAscii2Unicode(INT8* userPwd, INT16 len) 214964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 215064064216a8433360745f69edddce19a606659163The Android Open Source Project INT16 i; 215164064216a8433360745f69edddce19a606659163The Android Open Source Project INT8 unsiiPwd[MAX_PASSWD_LEN]; 215264064216a8433360745f69edddce19a606659163The Android Open Source Project 215364064216a8433360745f69edddce19a606659163The Android Open Source Project 215464064216a8433360745f69edddce19a606659163The Android Open Source Project for (i=0; i<len; i++) 215564064216a8433360745f69edddce19a606659163The Android Open Source Project { 215664064216a8433360745f69edddce19a606659163The Android Open Source Project unsiiPwd[i] = userPwd[i]; 215764064216a8433360745f69edddce19a606659163The Android Open Source Project } 215864064216a8433360745f69edddce19a606659163The Android Open Source Project for (i=0; i<len; i++) 215964064216a8433360745f69edddce19a606659163The Android Open Source Project { 216064064216a8433360745f69edddce19a606659163The Android Open Source Project userPwd[i*2] = unsiiPwd[i]; 216164064216a8433360745f69edddce19a606659163The Android Open Source Project userPwd[i*2+1] = 0; 216264064216a8433360745f69edddce19a606659163The Android Open Source Project } 216364064216a8433360745f69edddce19a606659163The Android Open Source Project return (INT16)(len*2); 216464064216a8433360745f69edddce19a606659163The Android Open Source Project} 216564064216a8433360745f69edddce19a606659163The Android Open Source Project 216664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 2167