assocSM.c revision 12d754a18612383f03b960dfad4dbcaba72df370
1981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 2981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * assocSM.c 3981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 4981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * All rights reserved. 6981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 7981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Redistribution and use in source and binary forms, with or without 8981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * modification, are permitted provided that the following conditions 9981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * are met: 10981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 11981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Redistributions of source code must retain the above copyright 12981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * notice, this list of conditions and the following disclaimer. 13981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Redistributions in binary form must reproduce the above copyright 14981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * notice, this list of conditions and the following disclaimer in 15981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * the documentation and/or other materials provided with the 16981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * distribution. 17981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * * Neither the name Texas Instruments nor the names of its 18981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * contributors may be used to endorse or promote products derived 19981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * from this software without specific prior written permission. 20981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 21981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 33981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 34981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** \file assocSM.c 35981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * \brief 802.11 association SM source 36981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * 37981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * \see assocSM.h 38981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */ 39981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 40981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 41981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************/ 42981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* */ 43981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* MODULE: assocSM.c */ 44981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* PURPOSE: 802.11 association SM source */ 45981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* */ 46981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************/ 47981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 48981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define __FILE_ID__ FILE_ID_63 49981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "osApi.h" 50981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "paramOut.h" 51981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "rate.h" 52981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "timer.h" 53981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "fsm.h" 54981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "report.h" 55981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "DataCtrl_Api.h" 56981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "siteMgrApi.h" 57981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "rsnApi.h" 58981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "regulatoryDomainApi.h" 59981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "mlmeBuilder.h" 60981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "mlmeApi.h" 61981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "AssocSM.h" 62981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "qosMngr_API.h" 63981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef XCC_MODULE_INCLUDED 64981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "XCCRMMngr.h" 65981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "XCCMngr.h" 66981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif 67981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "apConn.h" 68981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "TWDriver.h" 69981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "DrvMainModules.h" 70981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "StaCap.h" 71981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "sme.h" 72981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 73981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Constants */ 74981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 75981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** number of states in the state machine */ 76981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define ASSOC_SM_NUM_STATES 3 77981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 78981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** number of events in the state machine */ 79981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define ASSOC_SM_NUM_EVENTS 6 80981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 81981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Enumerations */ 82981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 83981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Typedefs */ 84981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 85981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Structures */ 86981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 87981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* External data definitions */ 88981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 89981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* External functions definitions */ 90981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 91981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Global variables */ 92981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 93981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Local function prototypes */ 94981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 95981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* functions */ 96981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 97981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 98981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* state machine functions */ 99981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smEvent(assoc_t *pAssoc, TI_UINT8 event, void *pData); 102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid assoc_smTimeout(TI_HANDLE hAssoc, TI_BOOL bTwdInitOccured); 104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartIdle(assoc_t *pAssoc); 106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopWait(assoc_t *pAssoc); 107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSuccessWait(assoc_t *pAssoc); 108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smFailureWait(assoc_t *pAssoc); 109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smTimeoutWait(assoc_t *pAssoc); 110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smMaxRetryWait(assoc_t *pAssoc); 111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopAssoc(assoc_t *pAssoc); 112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smActionUnexpected(assoc_t *pAssoc); 113981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smResetRetry(assoc_t *pAssoc); 115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smIncRetry(assoc_t *pAssoc); 116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportSuccess(assoc_t *pAssoc); 117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportFailure(assoc_t *pAssoc, TI_UINT16 uStatusCode); 118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSendAssocReq(assoc_t *pAssoc); 119981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartTimer(assoc_t *pAssoc); 120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopTimer(assoc_t *pAssoc); 121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smCapBuild(assoc_t *pCtx, TI_UINT16 *cap); 123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSSIDBuild(assoc_t *pCtx, TI_UINT8 *pSSID, TI_UINT32 *ssidLen); 124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRatesBuild(assoc_t *pCtx, TI_UINT8 *pRates, TI_UINT32 *ratesLen); 125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRequestBuild(assoc_t *pCtx, TI_UINT8* reqBuf, TI_UINT32* reqLen); 126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_saveAssocReqMessage(assoc_t *pAssocSm, TI_UINT8 *pAssocBuffer, TI_UINT32 length); 128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_sendDisAssoc(assoc_t *pAssocSm, mgmtStatus_e reason); 129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 132981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_create - allocate memory for association SM 133981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 135981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 136981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Allocate memory for association SM. \n 137981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Allocates memory for Association context. \n 138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Allocates memory for association SM matrix. \n 139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hOs - OS context \n 143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 144981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 145981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 146981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 147981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 148981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa rsn_mainSecSmKeysOnlyStop() 149981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_HANDLE assoc_create(TI_HANDLE hOs) 151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* allocate association context memory */ 156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)os_memoryAlloc(hOs, sizeof(assoc_t)); 157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return NULL; 160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryZero(hOs, pHandle, sizeof(assoc_t)); 163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hOs = hOs; 165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* allocate memory for association state machine */ 167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = fsm_Create(hOs, &pHandle->pAssocSm, ASSOC_SM_NUM_STATES, ASSOC_SM_NUM_EVENTS); 168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryFree(hOs, pHandle, sizeof(assoc_t)); 171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return NULL; 172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 174981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return pHandle; 175981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assocunload - unload association SM from memory 181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 182981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 184981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Unload association SM from memory 185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - association SM context \n 189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa rsn_mainSecSmKeysOnlyStop() 195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_unload(TI_HANDLE hAssoc) 197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 19812d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt TI_STATUS status; 19912d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt assoc_t *pHandle; 200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 20112d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt pHandle = (assoc_t *)hAssoc; 20212d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt if (!pHandle) 20312d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt return TI_NOK; 204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 20512d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt status = fsm_Unload(pHandle->hOs, pHandle->pAssocSm); 20612d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt if (status != TI_OK) 20712d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt { 20812d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt /* report failure but don't stop... */ 20912d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: Error releasing FSM memory \n"); 21012d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt } 21112d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt 21212d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt tmr_DestroyTimer (pHandle->hAssocSmTimer); 21312d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt 21412d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt os_memoryFree(pHandle->hOs, hAssoc, sizeof(assoc_t)); 215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 21612d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt return TI_OK; 217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_config - configure a new association SM 222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Configure a new association SM. 226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* void 230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Create, assoc_Unload 232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid assoc_init (TStadHandlesList *pStadHandles) 234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle = (assoc_t*)(pStadHandles->hAssoc); 236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /** Main 802.1X State Machine matrix */ 238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt fsm_actionCell_t assoc_smMatrix[ASSOC_SM_NUM_STATES][ASSOC_SM_NUM_EVENTS] = 239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for IDLE state */ 241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smStartIdle}, 242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected}, 243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected}, 244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected}, 245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected}, 246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected} 247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }, 248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for WAIT state */ 249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smActionUnexpected}, 250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smStopWait}, 251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smSuccessWait}, 252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smFailureWait}, 253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smTimeoutWait}, 254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smMaxRetryWait} 255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }, 256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for ASSOC state */ 257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected}, 258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smStopAssoc}, 259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected}, 260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected}, 261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected}, 262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected} 263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }}; 264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* configure state machine */ 266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt fsm_Config (pHandle->pAssocSm, &assoc_smMatrix[0][0], ASSOC_SM_NUM_STATES, ASSOC_SM_NUM_EVENTS, NULL, pStadHandles->hOs); 267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocRejectCount = 0; 269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocTimeoutCount = 0; 270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->currentState = ASSOC_SM_STATE_IDLE; 271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hMlme = pStadHandles->hMlmeSm; 273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hRegulatoryDomain = pStadHandles->hRegulatoryDomain; 274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hSiteMgr = pStadHandles->hSiteMgr; 275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hCtrlData = pStadHandles->hCtrlData; 276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hTWD = pStadHandles->hTWD; 277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hRsn = pStadHandles->hRsn; 278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hReport = pStadHandles->hReport; 279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hOs = pStadHandles->hOs; 280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hXCCMngr = pStadHandles->hXCCMngr; 281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hQosMngr = pStadHandles->hQosMngr; 282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hMeasurementMgr = pStadHandles->hMeasurementMgr; 283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hApConn = pStadHandles->hAPConnection; 284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hTimer = pStadHandles->hTimer; 285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hStaCap = pStadHandles->hStaCap; 286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hSme = pStadHandles->hSme; 287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_SetDefaults (TI_HANDLE hAssoc, assocInitParams_t *pAssocInitParams) 292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle = (assoc_t*)hAssoc; 294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->timeout = pAssocInitParams->assocResponseTimeout; 296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->maxCount = pAssocInitParams->assocMaxRetryCount; 297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* allocate OS timer memory */ 299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hAssocSmTimer = tmr_CreateTimer (pHandle->hTimer); 300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle->hAssocSmTimer == NULL) 301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "assoc_SetDefaults(): Failed to create hAssocSmTimer!\n"); 303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_start - Start event for the association SM 313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Start event for the association SM 317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Stop, assoc_Recv 327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_start(TI_HANDLE hAssoc) 329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->reAssoc = TI_FALSE; 341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->disAssoc = TI_FALSE; 343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_START, hAssoc); 345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_start - Start event for the association SM 353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Start event for the association SM - for Re-assoc request 357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Stop, assoc_Recv 367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS reassoc_start(TI_HANDLE hAssoc) 369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->reAssoc = TI_TRUE; 380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_START, hAssoc); 382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_stop - Stop event for the association SM 389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Stop event for the association SM 393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Recv 403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_stop(TI_HANDLE hAssoc) 405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_STOP, hAssoc); 417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_setDisAssocFlag(TI_HANDLE hAssoc, TI_BOOL disAsoccFlag) 423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->disAssoc = disAsoccFlag; 428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_recv - Recive a message from the AP 437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Parse a message form the AP and perform the appropriate event. 441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pFrame - Frame recieved \n 446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_recv(TI_HANDLE hAssoc, mlmeFrameInfo_t *pFrame) 454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TTwdParamInfo tTwdParam; 458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 rspStatus; 459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* ensure that the SM is waiting for assoc response */ 463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->currentState != ASSOC_SM_STATE_WAIT) 464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pFrame->subType != ASSOC_RESPONSE) && (pFrame->subType != RE_ASSOC_RESPONSE)) 472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check response status */ 477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rspStatus = pFrame->content.assocRsp.status; 478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (rspStatus == 0) 480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRsnData rsnData; 482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_RSN_t *pRsnIe; 483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 curRsnData[255]; 484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 rsnAssocIeLen; 485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 length = 0; 486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG Success associating to AP \n"); 489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set AID to HAL */ 491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tTwdParam.paramType = TWD_AID_PARAM_ID; 492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tTwdParam.content.halCtrlAid = pFrame->content.assocRsp.aid; 493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TWD_SetParam (pHandle->hTWD, &tTwdParam); 494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Get the RSN IE data */ 497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRsnIe = pFrame->content.assocRsp.pRsnIe; 498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt while (length < pFrame->content.assocRsp.rsnIeLen && (pFrame->content.assocRsp.rsnIeLen < 255)) 499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt curRsnData[0+length] = pRsnIe->hdr[0]; 501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt curRsnData[1+length] = pRsnIe->hdr[1]; 502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pHandle->hOs, &curRsnData[2+length], (void *)pRsnIe->rsnIeData, pRsnIe->hdr[1]); 503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt length += pRsnIe->hdr[1] + 2; 504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRsnIe += 1; 505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pFrame->content.assocRsp.rsnIeLen != 0) 508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsnData.pIe = curRsnData; 510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsnData.ieLen = pFrame->content.assocRsp.rsnIeLen; 511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsnData.privacy = ((pFrame->content.assocRsp.capabilities >> CAP_PRIVACY_SHIFT) & CAP_PRIVACY_MASK) ? TI_TRUE : TI_FALSE; 512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsn_setSite(pHandle->hRsn, &rsnData, NULL, &rsnAssocIeLen); 513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* update siteMgr with capabilities and whether we are connected to Cisco AP */ 516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt siteMgr_assocReport(pHandle->hSiteMgr, 517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pFrame->content.assocRsp.capabilities, pFrame->content.assocRsp.ciscoIEPresent); 518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* update QoS Manager - it the QOS active protocol is NONE, or no WME IE present, it will return TI_OK */ 520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* if configured by AP, update MSDU lifetime */ 521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = qosMngr_setSite(pHandle->hQosMngr, &pFrame->content.assocRsp); 522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status != TI_OK) 524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: DEBUG - Association failed : qosMngr_setSite error \n"); 526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* in case we wanted to work with qosAP and failed to connect to qos AP we want to reassociated again 527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt to another one */ 528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_FAIL, hAssoc); 529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_SUCCESS, hAssoc); 533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocRejectCount++; 538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* If there was attempt to renegotiate voice settings, update QoS Manager */ 540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt qosMngr_checkTspecRenegResults(pHandle->hQosMngr, &pFrame->content.assocRsp); 541981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 542981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check failure reason */ 543981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch (rspStatus) 544981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 545981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 0: 546981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 547981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 1: 548981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 549981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Unspecified error \n"); 550981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 551981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 10: 552981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 553981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Cannot support all requested capabilities in the Capability Information field \n"); 554981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 555981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 11: 556981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 557981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Reassociation denied due to inability to confirm that association exists \n"); 558981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 559981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 12: 560981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 561981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Association denied due to reason outside the scope of this standard \n"); 562981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsn_reportAuthFailure(pHandle->hRsn, RSN_AUTH_STATUS_INVALID_TYPE); 563981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 564981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 13: 565981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Association denied due to wrong authentication algorithm \n"); 566981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rsn_reportAuthFailure(pHandle->hRsn, RSN_AUTH_STATUS_INVALID_TYPE); 567981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 568981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 17: 569981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 570981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Association denied because AP is unable to handle additional associated stations \n"); 571981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 572981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case 18: 573981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print debug message */ 574981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association denied: Association denied due to requesting station not supporting all of the data rates in the BSSBasicRateSet parameter \n"); 575981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 576981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 577981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* print error message on wrong error code for association response */ 578981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pHandle->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: ERROR - Association denied: error code (%d) irrelevant \n", rspStatus); 579981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 580981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 581981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 582981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_FAIL, hAssoc); 583981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 584981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 585981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 586981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 587981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 588981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 589981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 590981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_getParam - Get a specific parameter from the association SM 591981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 592981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 593981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 594981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Get a specific parameter from the association SM. 595981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 596981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 597981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 598981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 599981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I/O - pParam - Parameter \n 600981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 601981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 602981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 603981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 604981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 605981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 606981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 607981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_getParam(TI_HANDLE hAssoc, paramInfo_t *pParam) 608981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 609981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 610981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 611981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 612981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 613981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pHandle == NULL) || (pParam == NULL)) 614981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 615981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 616981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 617981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 618981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* serch parameter type */ 619981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch (pParam->paramType) 620981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 621981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_RESPONSE_TIMEOUT_PARAM: 622981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocResponseTimeout = pHandle->timeout; 623981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 624981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 625981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_COUNTERS_PARAM: 626981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.siteMgrTiWlanCounters.AssocRejects = pHandle->assocRejectCount; 627981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.siteMgrTiWlanCounters.AssocTimeouts = pHandle->assocTimeoutCount; 628981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 629981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 630981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_ASSOCIATION_RESP_PARAM: 631981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocReqBuffer.buffer = pHandle->assocReqBuffer; 632981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocReqBuffer.bufferSize = pHandle->assocRespLen; 633981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 634981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 635981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_ASSOCIATION_INFORMATION_PARAM: 636981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 637981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 reqBuffIEOffset, respBuffIEOffset; 638981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 RequestIELength = 0; 639981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 ResponseIELength = 0; 640981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 641981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 642981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association Information Get: \n"); 643981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 644981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Assoc exists only in Infrastructure */ 645981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; 646981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ctrlData_getParam(pHandle->hCtrlData, ¶m); 647981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.ctrlDataCurrentBssType != BSS_INFRASTRUCTURE) 648981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 649981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "Not in Infrastructure BSS, No ASSOC Info for GET ASSOC_ASSOCIATION_INFORMATION_PARAM\n"); 650981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 651981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 652981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 653981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Init the result buffer to 0 */ 654981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryZero(pHandle->hOs ,&pParam->content, sizeof(OS_802_11_ASSOCIATION_INFORMATION)); 655981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 656981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt reqBuffIEOffset = 4; /* In Assoc request frame IEs are located from byte 4 */ 657981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt respBuffIEOffset = 6; /* In Assoc response frame the IEs are located from byte 6 */ 658981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 659981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* If the last associate was re-associciation, the current AP MAC address */ 660981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* is placed before the IEs. Copy it to the result parameters. */ 661981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle->reAssoc) 662981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 663981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt MAC_COPY (pParam->content.assocAssociationInformation.RequestFixedIEs.CurrentAPAddress, 664981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt &pHandle->assocReqBuffer[reqBuffIEOffset]); 665981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt reqBuffIEOffset += MAC_ADDR_LEN; 666981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 667981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 668981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Calculate length of Info elements in assoc request and response frames */ 669981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->assocReqLen > reqBuffIEOffset) 670981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt RequestIELength = pHandle->assocReqLen - reqBuffIEOffset; 671981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 672981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->assocRespLen > respBuffIEOffset) 673981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ResponseIELength = pHandle->assocRespLen - respBuffIEOffset; 674981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 675981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Copy the association request information */ 676981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.Length = sizeof(OS_802_11_ASSOCIATION_INFORMATION); 677981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.AvailableRequestFixedIEs = OS_802_11_AI_REQFI_CAPABILITIES | OS_802_11_AI_REQFI_LISTENINTERVAL; 678981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestFixedIEs.Capabilities = *(TI_UINT16*)&(pHandle->assocReqBuffer[0]); 679981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestFixedIEs.ListenInterval = *(TI_UINT16*)(&pHandle->assocReqBuffer[2]); 680981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 681981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestIELength = RequestIELength; 682981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetRequestIEs = 0; 683981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (RequestIELength > 0) 684981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 685981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetRequestIEs = (TI_UINT32)&pHandle->assocReqBuffer[reqBuffIEOffset]; 686981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 687981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Copy the association response information */ 688981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.AvailableResponseFixedIEs = 689981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt OS_802_11_AI_RESFI_CAPABILITIES | OS_802_11_AI_RESFI_STATUSCODE | OS_802_11_AI_RESFI_ASSOCIATIONID; 690981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.Capabilities = *(TI_UINT16*)&(pHandle->assocRespBuffer[0]); 691981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.StatusCode = *(TI_UINT16*)&(pHandle->assocRespBuffer[2]); 692981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.AssociationId = *(TI_UINT16*)&(pHandle->assocRespBuffer[4]); 693981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseIELength = ResponseIELength; 694981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetResponseIEs = 0; 695981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (ResponseIELength > 0) 696981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 697981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetResponseIEs = (TI_UINT32)&pHandle->assocRespBuffer[respBuffIEOffset]; 698981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 699981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 700981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 701981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 702981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 703981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 704981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 705981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 706981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 707981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 708981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 709981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 710981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 711981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_setParam - Set a specific parameter to the association SM 712981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 713981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 714981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 715981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Set a specific parameter to the association SM. 716981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 717981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 718981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 719981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 720981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I/O - pParam - Parameter \n 721981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 722981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 723981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 724981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 725981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 726981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 727981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 728981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_setParam(TI_HANDLE hAssoc, paramInfo_t *pParam) 729981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 730981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 731981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 732981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 733981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 734981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pHandle == NULL) || (pParam == NULL)) 735981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 736981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 737981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 738981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 739981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch (pParam->paramType) 740981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 741981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_RESPONSE_TIMEOUT_PARAM: 742981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check bounds */ 743981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pParam->content.assocResponseTimeout >= ASSOC_RESPONSE_TIMEOUT_MIN) && 744981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (pParam->content.assocResponseTimeout <= ASSOC_RESPONSE_TIMEOUT_MAX)) 745981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 746981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->timeout = pParam->content.assocResponseTimeout; 747981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 748981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 749981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 750981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 751981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 752981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 753981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 754981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 755981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 756981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 757981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 758981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 759981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 760981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_smTimeout - Time out event activation function 761981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 762981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 763981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 764981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Time out event activation function. 765981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 766981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 767981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 768981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 769981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 770981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 771981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 772981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 773981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 774981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 775981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 776981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid assoc_smTimeout(TI_HANDLE hAssoc, TI_BOOL bTwdInitOccured) 777981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 778981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 779981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 780981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 781981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 782981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 783981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 784981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 785981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 786981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 787981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 788981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocTimeoutCount++; 789981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 790981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_smEvent(pHandle, ASSOC_SM_EVENT_TIMEOUT, hAssoc); 791981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 792981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 793981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 794981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 795981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_smEvent - Perform an event on the association SM 796981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 797981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 798981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 799981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Perform an event on the association SM. 800981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 801981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 802981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 803981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pAssoc - Association SM context \n 804981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - event - Current event \n 805981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pData - event related data 806981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 807981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 808981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 809981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 810981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 811981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa 812981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 813981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smEvent(assoc_t *pAssoc, TI_UINT8 event, void *pData) 814981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 815981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 816981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 nextState; 817981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 818981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = fsm_GetNextState(pAssoc->pAssocSm, pAssoc->currentState, event, &nextState); 819981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 820981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 821981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pAssoc->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: ERROR - failed getting next state \n"); 822981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 823981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return(TI_NOK); 824981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 825981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 826981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3( pAssoc->hReport, REPORT_SEVERITY_INFORMATION, "assoc_smEvent: <currentState = %d, event = %d> --> nextState = %d\n", pAssoc->currentState, event, nextState); 827981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 828981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = fsm_Event(pAssoc->pAssocSm, &pAssoc->currentState, event, pData); 829981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 830981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return(status); 831981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 832981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 833981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* state machine functions */ 834981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 835981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartIdle(assoc_t *pAssoc) 836981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 837981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 838981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 839981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smResetRetry(pAssoc); 840981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSendAssocReq(pAssoc); 841981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStartTimer(pAssoc); 842981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smIncRetry(pAssoc); 843981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 844981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 845981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 846981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 847981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopWait(assoc_t *pAssoc) 848981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 849981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 850981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 851981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 852981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 853981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 854981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 855981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 856981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSuccessWait(assoc_t *pAssoc) 857981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 858981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 859981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 860981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 861981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportSuccess(pAssoc); 862981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 863981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 864981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 865981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 866981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smFailureWait(assoc_t *pAssoc) 867981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 868981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 869981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 uRspStatus = *(TI_UINT16*)&(pAssoc->assocRespBuffer[2]); 870981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 871981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 872981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 873981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Sanity check. If the Response status is indeed not 0 */ 874981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (uRspStatus) 875981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 876981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, uRspStatus); 877981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 878981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* (uRspStatus == 0) how did we get here ? */ 879981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 880981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pAssoc->hReport, REPORT_SEVERITY_ERROR, "while Response status is OK (0) !!! \n"); 881981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 882981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, (TI_UINT16)TI_NOK); 883981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 884981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 885981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 886981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 887981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smTimeoutWait(assoc_t *pAssoc) 888981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 889981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 890981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 891981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSendAssocReq(pAssoc); 892981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStartTimer(pAssoc); 893981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smIncRetry(pAssoc); 894981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 895981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 896981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 897981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 898981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smMaxRetryWait(assoc_t *pAssoc) 899981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 900981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 901981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 902981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 903981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, STATUS_PACKET_REJ_TIMEOUT); 904981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 905981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 906981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 907981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 908981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSendAssocReq(assoc_t *pAssoc) 909981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 910981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 assocMsg[MAX_ASSOC_MSG_LENGTH]; 911981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 msgLen; 912981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 913981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11MgmtSubType_e assocType=ASSOC_REQUEST; 914981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 915981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->reAssoc) 916981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 917981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assocType = RE_ASSOC_REQUEST; 918981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 919981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smRequestBuild(pAssoc, assocMsg, &msgLen); 920981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 921981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 922981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 923981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Save the association request message */ 924981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_saveAssocReqMessage(pAssoc, assocMsg, msgLen); 925981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlmeBuilder_sendFrame(pAssoc->hMlme, assocType, assocMsg, msgLen, 0); 926981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 927981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 928981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 929981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 930981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopAssoc(assoc_t *pAssoc) 931981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 932981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->disAssoc) { 933981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_sendDisAssoc(pAssoc, STATUS_UNSPECIFIED); 934981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 935981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 936981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 937981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 938981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smActionUnexpected(assoc_t *pAssoc) 939981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 940981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 941981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 942981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 943981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* local functions */ 944981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 945981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 946981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smResetRetry(assoc_t *pAssoc) 947981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 948981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 949981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 950981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 951981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 952981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 953981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->retryCount = 0; 954981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 955981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 956981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 957981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 958981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smIncRetry(assoc_t *pAssoc) 959981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 960981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 961981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 962981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 963981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 964981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 965981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 966981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 967981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->retryCount++; 968981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 969981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->retryCount > pAssoc->maxCount) 970981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 971981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pAssoc, ASSOC_SM_EVENT_MAX_RETRY, pAssoc); 972981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 973981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 974981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 975981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 976981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 977981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 978981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 979981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportSuccess(assoc_t *pAssoc) 980981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 981981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 982981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 983981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 984981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 985981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 986981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 987981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlme_reportAssocStatus(pAssoc->hMlme, (TI_UINT16)TI_OK); 988981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 989981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 990981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 991981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 992981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportFailure(assoc_t *pAssoc, TI_UINT16 uStatusCode) 993981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 994981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 995981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 996981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 997981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 998981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 999981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1000981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1001981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlme_reportAssocStatus(pAssoc->hMlme, uStatusCode); 1002981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1003981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1004981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1005981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1006981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartTimer(assoc_t *pAssoc) 1007981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1008981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 1009981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1010981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1011981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1012981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1013981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tmr_StartTimer (pAssoc->hAssocSmTimer, 1014981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_smTimeout, 1015981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (TI_HANDLE)pAssoc, 1016981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->timeout, 1017981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_FALSE); 1018981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1019981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1020981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1021981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1022981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopTimer(assoc_t *pAssoc) 1023981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1024981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 1025981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1026981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1027981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1028981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1029981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tmr_StopTimer (pAssoc->hAssocSmTimer); 1030981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1031981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1032981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1033981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1034981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************** 1035981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** 1036981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** Association messages builder/Parser 1037981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** 1038981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************/ 1039981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1040981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smCapBuild(assoc_t *pCtx, TI_UINT16 *cap) 1041981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1042981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1043981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1044981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt EDot11Mode mode; 1045981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 rateSuppMask, rateBasicMask; 1046981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 ratesBuf[DOT11_MAX_SUPPORTED_RATES]; 1047981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len = 0, ofdmIndex = 0; 1048981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL b11nEnable, bWmeEnable; 1049981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1050981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap = 0; 1051981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1052981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Bss type */ 1053981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; 1054981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = ctrlData_getParam(pCtx->hCtrlData, ¶m); 1055981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1056981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1057981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.ctrlDataCurrentBssType == BSS_INFRASTRUCTURE) 1058981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1059981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_ESS; 1060981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1061981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_IBSS; 1062981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1063981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1064981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1065981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1066981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1067981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Privacy */ 1068981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = RSN_ENCRYPTION_STATUS_PARAM; 1069981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getParam(pCtx->hRsn, ¶m); 1070981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1071981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1072981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.rsnEncryptionStatus != TWD_CIPHER_NONE) 1073981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1074981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_PRIVACY; 1075981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1076981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1077981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1078981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1079981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1080981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Preamble */ 1081981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_DESIRED_PREAMBLE_TYPE_PARAM; 1082981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1083981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1084981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1085981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.siteMgrCurrentPreambleType == PREAMBLE_SHORT) 1086981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_PREAMBLE; 1087981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1088981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1089981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1090981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1091981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Pbcc */ 1092981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1093981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1094981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1095981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1096981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(param.content.siteMgrCurrentRateMask.supportedRateMask & DRV_RATE_MASK_22_PBCC) 1097981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_PBCC; 1098981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1099981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking if the station supports Spectrum Management (802.11h) */ 1104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 1105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain, ¶m); 1106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK ) 1107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( param.content.spectrumManagementEnabled) 1109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_SPECTRUM_MANAGEMENT; 1110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1113981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* slot time */ 1117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM; 1118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1119981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK) 1120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt mode = param.content.siteMgrDot11OperationalMode; 1122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(mode == DOT11_G_MODE) 1127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* new requirement: the short slot time should be set only 1129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if the AP's modulation is OFDM (highest rate) */ 1130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get Rates */ 1132981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1133981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1135981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1136981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateBasicMask = param.content.siteMgrCurrentRateMask.basicRateMask; 1137981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask = param.content.siteMgrCurrentRateMask.supportedRateMask; 1138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* convert the bit map to the rates array */ 1143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rate_DrvBitmapToNetStr (rateSuppMask, rateBasicMask, ratesBuf, &len, &ofdmIndex); 1144981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1145981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(ofdmIndex < len) 1146981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_SLOT_TIME; 1147981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1148981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 1149981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_MODULATION_TYPE_PARAM; 1150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(param.content.siteMgrCurrentModulationType == DRV_MODULATION_OFDM) 1152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_SLOT_TIME; 1153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 1154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Immediate Block Ack subfield - (is WME on?) AND (is HT Enable?) */ 1157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* verify 11n_Enable and Chip type */ 1158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt StaCap_IsHtEnable (pCtx->hStaCap, &b11nEnable); 1159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* verify that WME flag enable */ 1160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt qosMngr_GetWmeEnableFlag (pCtx->hQosMngr, &bWmeEnable); 1161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((b11nEnable != TI_FALSE) && (bWmeEnable != TI_FALSE)) 1163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_IMMEDIATE_BA; 1165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSSIDBuild(assoc_t *pCtx, TI_UINT8 *pSSID, TI_UINT32 *ssidLen) 1172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1174981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1175981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_SSID_t *pDot11Ssid; 1176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid = (dot11_SSID_t*)pSSID; 1178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set SSID element id */ 1179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[0] = SSID_IE_ID; 1180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get SSID */ 1182981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SME_DESIRED_SSID_ACT_PARAM; 1183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = sme_GetParam(pCtx->hSme, ¶m); 1184981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check for ANY ssid */ 1190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.smeDesiredSSID.len != 0) 1191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[1] = param.content.smeDesiredSSID.len; 1193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pCtx->hOs, 1194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pDot11Ssid->serviceSetId, 1195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)param.content.smeDesiredSSID.str, 1196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.content.smeDesiredSSID.len); 1197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* if ANY ssid is configured, use the current SSID */ 1200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_SSID_PARAM; 1201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[1] = param.content.siteMgrCurrentSSID.len; 1207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pCtx->hOs, 1208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pDot11Ssid->serviceSetId, 1209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)param.content.siteMgrCurrentSSID.str, 1210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.content.siteMgrCurrentSSID.len); 1211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ssidLen = pDot11Ssid->hdr[1] + sizeof(dot11_eleHdr_t); 1215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRatesBuild(assoc_t *pCtx, TI_UINT8 *pRates, TI_UINT32 *ratesLen) 1220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 rateSuppMask, rateBasicMask; 1224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_RATES_t *pDot11Rates; 1225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len = 0, ofdmIndex = 0; 1226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 ratesBuf[DOT11_MAX_SUPPORTED_RATES]; 1227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt EDot11Mode mode; 1228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 suppRatesLen, extSuppRatesLen, i; 1229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates = (dot11_RATES_t*)pRates; 1230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get Rates */ 1233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateBasicMask = param.content.siteMgrCurrentRateMask.basicRateMask; 1238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask = param.content.siteMgrCurrentRateMask.supportedRateMask; 1239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get operational mode */ 1246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM; 1247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK) 1249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt mode = param.content.siteMgrDot11OperationalMode; 1250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* convert the bit map to the rates array */ 1254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* remove MCS rates from Extended Supported Rates IE */ 1255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask &= ~(DRV_RATE_MASK_MCS_0_OFDM | 1256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_1_OFDM | 1257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_2_OFDM | 1258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_3_OFDM | 1259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_4_OFDM | 1260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_5_OFDM | 1261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_6_OFDM | 1262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_7_OFDM ); 1263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rate_DrvBitmapToNetStr (rateSuppMask, rateBasicMask, ratesBuf, &len, &ofdmIndex); 1265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(mode != DOT11_G_MODE || ofdmIndex == len ) 1267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = SUPPORTED_RATES_IE_ID; 1269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = len; 1270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, ratesBuf, len); 1271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ratesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* fill in the supported rates */ 1276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = SUPPORTED_RATES_IE_ID; 1277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = ofdmIndex; 1278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr[1]); 1279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt suppRatesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* fill in the extended supported rates */ 1281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates = (dot11_RATES_t*)(pRates + suppRatesLen); 1282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = EXT_SUPPORTED_RATES_IE_ID; 1283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = len - ofdmIndex; 1284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, &ratesBuf[ofdmIndex], pDot11Rates->hdr[1]); 1285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt extSuppRatesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ratesLen = suppRatesLen + extSuppRatesLen; 1287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3(pCtx->hReport, REPORT_SEVERITY_INFORMATION, "ASSOC_SM: ASSOC_REQ - bitmapSupp= 0x%X,bitMapBasic = 0x%X, len = %d\n", rateSuppMask,rateBasicMask,len); 1290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for(i=0; i<len; i++) 1291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pCtx->hReport, REPORT_SEVERITY_INFORMATION, "ASSOC_SM: ASSOC_REQ - ratesBuf[%d] = 0x%X\n", i, ratesBuf[i]); 1293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_powerCapabilityBuild(assoc_t *pCtx, TI_UINT8 *pPowerCapability, TI_UINT32 *powerCapabilityLen) 1299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_CAPABILITY_t *pDot11PowerCapability; 1303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability = (dot11_CAPABILITY_t*)pPowerCapability; 1305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set Power Capability element id */ 1307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->hdr[0] = DOT11_CAPABILITY_ELE_ID; 1308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->hdr[1] = DOT11_CAPABILITY_ELE_LEN; 1309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get power capability */ 1311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_POWER_CAPABILITY_PARAM; 1312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain, ¶m); 1313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->minTxPower = param.content.powerCapability.minTxPower; 1317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->maxTxPower = param.content.powerCapability.maxTxPower; 1318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *powerCapabilityLen = pDot11PowerCapability->hdr[1] + sizeof(dot11_eleHdr_t); 1319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *powerCapabilityLen = 0; 1322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRequestBuild(assoc_t *pCtx, TI_UINT8* reqBuf, TI_UINT32* reqLen) 1327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 *pRequest; 1330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len; 1331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TTwdParamInfo tTwdParam; 1333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 capabilities; 1334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest = reqBuf; 1336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen = 0; 1337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert capabilities */ 1339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smCapBuild(pCtx, &capabilities); 1340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *(TI_UINT16*)pRequest = capabilities; 1343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += 2; 1348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += 2; 1349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert listen interval */ 1351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tTwdParam.paramType = TWD_LISTEN_INTERVAL_PARAM_ID; 1352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = TWD_GetParam (pCtx->hTWD, &tTwdParam); 1353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *(TI_UINT16*)pRequest = ENDIAN_HANDLE_WORD((TI_UINT16)tTwdParam.content.halCtrlListenInterval); 1356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += 2; 1361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += 2; 1362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pCtx->reAssoc) 1363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Insert currentAPAddress element only in reassoc request*/ 1364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_PREV_SITE_BSSID_PARAM; 1365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt MAC_COPY (pRequest, param.content.siteMgrDesiredBSSID); 1369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE6(pCtx->hReport, REPORT_SEVERITY_INFORMATION, "ASSOC_SM: ASSOC_REQ - prev AP = %x-%x-%x-%x-%x-%x\n", param.content.siteMgrDesiredBSSID[0], param.content.siteMgrDesiredBSSID[1], param.content.siteMgrDesiredBSSID[2], param.content.siteMgrDesiredBSSID[3], param.content.siteMgrDesiredBSSID[4], param.content.siteMgrDesiredBSSID[5]); 1370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += MAC_ADDR_LEN; 1373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += MAC_ADDR_LEN; 1374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pCtx->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: ASSOC_REQ - No prev AP \n"); 1378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert SSID element */ 1384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSSIDBuild(pCtx, pRequest, &len); 1385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Rates element */ 1394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smRatesBuild(pCtx, pRequest, &len); 1395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking if the station supports Spectrum Management (802.11h) */ 1403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 1404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain,¶m); 1405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( (status == TI_OK) && param.content.spectrumManagementEnabled) 1406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking the selected AP capablities */ 1408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_SITE_CAPABILITY_PARAM; 1409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr,¶m); 1410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK && ((param.content.siteMgrSiteCapability & DOT11_SPECTRUM_MANAGEMENT) != 0)) 1411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Power capability element */ 1413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_powerCapabilityBuild(pCtx, pRequest, &len); 1414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#if 0 1421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Supported Channels element */ 1422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_supportedChannelBuild(pCtx, pRequest, &len); 1423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif 1430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = qosMngr_getQosCapabiltyInfeElement(pCtx->hQosMngr,pRequest,&len); 1436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef XCC_MODULE_INCLUDED 1445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getXCCExtendedInfoElement(pCtx->hRsn, pRequest, (TI_UINT8*)&len); 1446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pCtx->reAssoc) 1454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* insert CCKM information element only in reassoc */ 1455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = XCCMngr_getCckmInfoElement(pCtx->hXCCMngr, pRequest, (TI_UINT8*)&len); 1456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = XCCMngr_getXCCVersionInfoElement(pCtx->hXCCMngr, pRequest, (TI_UINT8*)&len); 1465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Insert Radio Mngt Capability IE */ 1473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = measurementMgr_radioMngtCapabilityBuild(pCtx->hMeasurementMgr, pRequest, (TI_UINT8*)&len); 1474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif 1481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert RSN information elements */ 1483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getInfoElement(pCtx->hRsn, pRequest, &len); 1484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Primary Site support HT ? */ 1494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_PRIMARY_SITE_HT_SUPPORT; 1495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(TI_TRUE == param.content.bPrimarySiteHtSupport) 1498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = StaCap_GetHtCapabilitiesIe (pCtx->hStaCap, pRequest, &len); 1500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = qosMngr_assocReqBuild(pCtx->hQosMngr,pRequest,&len); 1509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = apConn_getVendorSpecificIE(pCtx->hApConn, pRequest, &len); 1517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (*reqLen>=MAX_ASSOC_MSG_LENGTH) 1525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_saveAssocRespMessage(assoc_t *pAssocSm, TI_UINT8 *pAssocBuffer, TI_UINT32 length) 1535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pAssocSm==NULL) || (pAssocBuffer==NULL) || (length>=MAX_ASSOC_MSG_LENGTH)) 1537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pAssocSm->hOs, pAssocSm->assocRespBuffer, pAssocBuffer, length); 1541981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssocSm->assocRespLen = length; 1542981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1543981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pAssocSm->hReport, REPORT_SEVERITY_INFORMATION, "assoc_saveAssocRespMessage: length=%ld \n",length); 1544981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1545981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1546981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1547981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_saveAssocReqMessage(assoc_t *pAssocSm, TI_UINT8 *pAssocBuffer, TI_UINT32 length) 1548981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1549981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1550981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pAssocSm==NULL) || (pAssocBuffer==NULL) || (length>=MAX_ASSOC_MSG_LENGTH)) 1551981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1552981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1553981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1554981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1555981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pAssocSm->hOs, pAssocSm->assocReqBuffer, pAssocBuffer, length); 1556981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssocSm->assocReqLen = length; 1557981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1558981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pAssocSm->hReport, REPORT_SEVERITY_INFORMATION, "assoc_saveAssocReqMessage: length=%ld \n",length); 1559981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1560981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1561981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1562981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1563981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_sendDisAssoc(assoc_t *pAssocSm, mgmtStatus_e reason) 1564981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1565981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1566981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc_t disAssoc; 1567981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1568981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (reason == STATUS_SUCCESSFUL) 1569981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1570981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc.reason = ENDIAN_HANDLE_WORD(STATUS_UNSPECIFIED); 1571981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1572981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc.reason = ENDIAN_HANDLE_WORD(reason); 1573981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1574981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1575981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlmeBuilder_sendFrame(pAssocSm->hMlme, DIS_ASSOC, (TI_UINT8*)&disAssoc, sizeof(disAssoc_t), 0); 1576981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1577981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1578981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1579981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1580981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1581