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, &param);
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, &param);
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, &param);
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, &param);
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, &param);
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, &param);
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, &param);
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, &param) != 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, &param);
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