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" 71653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt#include "smeApi.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{ 198653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TI_STATUS status; 199653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt assoc_t *pHandle; 200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 201653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt pHandle = (assoc_t*)hAssoc; 202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 203653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt status = fsm_Unload(pHandle->hOs, pHandle->pAssocSm); 204653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (status != TI_OK) 205653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 206653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt /* report failure but don't stop... */ 207653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: Error releasing FSM memory \n"); 208653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 209653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt 210653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (pHandle->hAssocSmTimer) 21112d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt { 212653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt tmr_DestroyTimer (pHandle->hAssocSmTimer); 21312d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt } 214653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt 215653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt os_memoryFree(pHandle->hOs, hAssoc, sizeof(assoc_t)); 21612d754a18612383f03b960dfad4dbcaba72df370Dmitry Shmidt 217653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return TI_OK; 218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_config - configure a new association SM 223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Configure a new association SM. 227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* void 231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Create, assoc_Unload 233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid assoc_init (TStadHandlesList *pStadHandles) 235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle = (assoc_t*)(pStadHandles->hAssoc); 237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /** Main 802.1X State Machine matrix */ 239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt fsm_actionCell_t assoc_smMatrix[ASSOC_SM_NUM_STATES][ASSOC_SM_NUM_EVENTS] = 240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for IDLE state */ 242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smStartIdle}, 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 {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smActionUnexpected} 248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }, 249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for WAIT state */ 250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smActionUnexpected}, 251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smStopWait}, 252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smSuccessWait}, 253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smFailureWait}, 254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_WAIT, (fsm_Action_t)assoc_smTimeoutWait}, 255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smMaxRetryWait} 256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }, 257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* next state and actions for ASSOC state */ 258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {{ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected}, 259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt {ASSOC_SM_STATE_IDLE, (fsm_Action_t)assoc_smStopAssoc}, 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 {ASSOC_SM_STATE_ASSOC, (fsm_Action_t)assoc_smActionUnexpected} 264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt }}; 265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* configure state machine */ 267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt fsm_Config (pHandle->pAssocSm, &assoc_smMatrix[0][0], ASSOC_SM_NUM_STATES, ASSOC_SM_NUM_EVENTS, NULL, pStadHandles->hOs); 268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocRejectCount = 0; 270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocTimeoutCount = 0; 271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->currentState = ASSOC_SM_STATE_IDLE; 272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hMlme = pStadHandles->hMlmeSm; 274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hRegulatoryDomain = pStadHandles->hRegulatoryDomain; 275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hSiteMgr = pStadHandles->hSiteMgr; 276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hCtrlData = pStadHandles->hCtrlData; 277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hTWD = pStadHandles->hTWD; 278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hRsn = pStadHandles->hRsn; 279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hReport = pStadHandles->hReport; 280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hOs = pStadHandles->hOs; 281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hXCCMngr = pStadHandles->hXCCMngr; 282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hQosMngr = pStadHandles->hQosMngr; 283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hMeasurementMgr = pStadHandles->hMeasurementMgr; 284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hApConn = pStadHandles->hAPConnection; 285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hTimer = pStadHandles->hTimer; 286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hStaCap = pStadHandles->hStaCap; 287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hSme = pStadHandles->hSme; 288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_SetDefaults (TI_HANDLE hAssoc, assocInitParams_t *pAssocInitParams) 293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle = (assoc_t*)hAssoc; 295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->timeout = pAssocInitParams->assocResponseTimeout; 297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->maxCount = pAssocInitParams->assocMaxRetryCount; 298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* allocate OS timer memory */ 300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->hAssocSmTimer = tmr_CreateTimer (pHandle->hTimer); 301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle->hAssocSmTimer == NULL) 302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "assoc_SetDefaults(): Failed to create hAssocSmTimer!\n"); 304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_start - Start event for the association SM 314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Start event for the association SM 318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Stop, assoc_Recv 328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_start(TI_HANDLE hAssoc) 330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->reAssoc = TI_FALSE; 342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->disAssoc = TI_FALSE; 344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_START, hAssoc); 346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_start - Start event for the association SM 354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Start event for the association SM - for Re-assoc request 358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Stop, assoc_Recv 368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS reassoc_start(TI_HANDLE hAssoc) 370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->reAssoc = TI_TRUE; 381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_START, hAssoc); 383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_stop - Stop event for the association SM 390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Stop event for the association SM 394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Recv 404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_stop(TI_HANDLE hAssoc) 406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pHandle, ASSOC_SM_EVENT_STOP, hAssoc); 418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_setDisAssocFlag(TI_HANDLE hAssoc, TI_BOOL disAsoccFlag) 424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->disAssoc = disAsoccFlag; 429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_recv - Recive a message from the AP 438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Parse a message form the AP and perform the appropriate event. 442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pFrame - Frame recieved \n 447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_recv(TI_HANDLE hAssoc, mlmeFrameInfo_t *pFrame) 455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 457653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt assoc_t *pHandle = (assoc_t*)hAssoc; 458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TTwdParamInfo tTwdParam; 459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 rspStatus; 460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 461653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (pHandle == NULL) 462653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 463653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt return TI_NOK; 464653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* ensure that the SM is waiting for assoc response */ 467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->currentState != ASSOC_SM_STATE_WAIT) 468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 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{ 609023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt assoc_t *pHandle = (assoc_t *)hAssoc; 610981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 611981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pHandle == NULL) || (pParam == NULL)) 612981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 613981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 614981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 615981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 616981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* serch parameter type */ 617981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch (pParam->paramType) 618981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 619981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_RESPONSE_TIMEOUT_PARAM: 620981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocResponseTimeout = pHandle->timeout; 621981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 622981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 623981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_COUNTERS_PARAM: 624981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.siteMgrTiWlanCounters.AssocRejects = pHandle->assocRejectCount; 625981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.siteMgrTiWlanCounters.AssocTimeouts = pHandle->assocTimeoutCount; 626981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 627981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 628653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt case ASSOC_ASSOCIATION_REQ_PARAM: 629981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocReqBuffer.buffer = pHandle->assocReqBuffer; 630653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt pParam->content.assocReqBuffer.bufferSize = pHandle->assocReqLen; 631653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt pParam->content.assocReqBuffer.reAssoc = pHandle->reAssoc; 632653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt break; 633653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt 634653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt case ASSOC_ASSOCIATION_RESP_PARAM: 635653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt pParam->content.assocReqBuffer.buffer = pHandle->assocRespBuffer; 636981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocReqBuffer.bufferSize = pHandle->assocRespLen; 637653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt pParam->content.assocReqBuffer.reAssoc = pHandle->reAssocResp; 638981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 639981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 640981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_ASSOCIATION_INFORMATION_PARAM: 641981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 642981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 reqBuffIEOffset, respBuffIEOffset; 643981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 RequestIELength = 0; 644981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 ResponseIELength = 0; 645023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt paramInfo_t *lParam; 646023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt ScanBssType_enum bssType; 647981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 648981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_SM, "ASSOC_SM: DEBUG - Association Information Get: \n"); 649023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt lParam = (paramInfo_t *)os_memoryAlloc(pHandle->hOs, sizeof(paramInfo_t)); 650023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!lParam) 651023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return TI_NOK; 652981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 653981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Assoc exists only in Infrastructure */ 654023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt lParam->paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; 655023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt ctrlData_getParam(pHandle->hCtrlData, lParam); 656023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt bssType = lParam->content.ctrlDataCurrentBssType; 657023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pHandle->hOs, lParam, sizeof(paramInfo_t)); 658023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (bssType != BSS_INFRASTRUCTURE) 659981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 660981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "Not in Infrastructure BSS, No ASSOC Info for GET ASSOC_ASSOCIATION_INFORMATION_PARAM\n"); 661981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 662981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 663981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 664981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Init the result buffer to 0 */ 665981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryZero(pHandle->hOs ,&pParam->content, sizeof(OS_802_11_ASSOCIATION_INFORMATION)); 666981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 667981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt reqBuffIEOffset = 4; /* In Assoc request frame IEs are located from byte 4 */ 668981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt respBuffIEOffset = 6; /* In Assoc response frame the IEs are located from byte 6 */ 669981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 670981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* If the last associate was re-associciation, the current AP MAC address */ 671981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* is placed before the IEs. Copy it to the result parameters. */ 672981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle->reAssoc) 673981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 674981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt MAC_COPY (pParam->content.assocAssociationInformation.RequestFixedIEs.CurrentAPAddress, 675981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt &pHandle->assocReqBuffer[reqBuffIEOffset]); 676981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt reqBuffIEOffset += MAC_ADDR_LEN; 677981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 678981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 679981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Calculate length of Info elements in assoc request and response frames */ 680981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->assocReqLen > reqBuffIEOffset) 681981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt RequestIELength = pHandle->assocReqLen - reqBuffIEOffset; 682981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 683981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(pHandle->assocRespLen > respBuffIEOffset) 684981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ResponseIELength = pHandle->assocRespLen - respBuffIEOffset; 685981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 686981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Copy the association request information */ 687981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.Length = sizeof(OS_802_11_ASSOCIATION_INFORMATION); 688981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.AvailableRequestFixedIEs = OS_802_11_AI_REQFI_CAPABILITIES | OS_802_11_AI_REQFI_LISTENINTERVAL; 689981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestFixedIEs.Capabilities = *(TI_UINT16*)&(pHandle->assocReqBuffer[0]); 690981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestFixedIEs.ListenInterval = *(TI_UINT16*)(&pHandle->assocReqBuffer[2]); 691981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 692981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.RequestIELength = RequestIELength; 693981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetRequestIEs = 0; 694981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (RequestIELength > 0) 695981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 696981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetRequestIEs = (TI_UINT32)&pHandle->assocReqBuffer[reqBuffIEOffset]; 697981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 698981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Copy the association response information */ 699981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.AvailableResponseFixedIEs = 700981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt OS_802_11_AI_RESFI_CAPABILITIES | OS_802_11_AI_RESFI_STATUSCODE | OS_802_11_AI_RESFI_ASSOCIATIONID; 701981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.Capabilities = *(TI_UINT16*)&(pHandle->assocRespBuffer[0]); 702981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.StatusCode = *(TI_UINT16*)&(pHandle->assocRespBuffer[2]); 703981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseFixedIEs.AssociationId = *(TI_UINT16*)&(pHandle->assocRespBuffer[4]); 704981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.ResponseIELength = ResponseIELength; 705981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetResponseIEs = 0; 706981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (ResponseIELength > 0) 707981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 708981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pParam->content.assocAssociationInformation.OffsetResponseIEs = (TI_UINT32)&pHandle->assocRespBuffer[respBuffIEOffset]; 709981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 710981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 711981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 712981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 713981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 714981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 715981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 716981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 717981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 718981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 719981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 720981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 721981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 722981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_setParam - Set a specific parameter to the association SM 723981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 724981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 725981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 726981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Set a specific parameter to the association SM. 727981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 728981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 729981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 730981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 731981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I/O - pParam - Parameter \n 732981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 733981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 734981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 735981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 736981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 737981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 738981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 739981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_setParam(TI_HANDLE hAssoc, paramInfo_t *pParam) 740981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 741981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 742981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 743981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 744981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 745981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pHandle == NULL) || (pParam == NULL)) 746981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 747981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 748981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 749981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 750981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt switch (pParam->paramType) 751981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 752981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt case ASSOC_RESPONSE_TIMEOUT_PARAM: 753981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check bounds */ 754981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pParam->content.assocResponseTimeout >= ASSOC_RESPONSE_TIMEOUT_MIN) && 755981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (pParam->content.assocResponseTimeout <= ASSOC_RESPONSE_TIMEOUT_MAX)) 756981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 757981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->timeout = pParam->content.assocResponseTimeout; 758981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 759981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 760981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 761981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt break; 762981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt default: 763981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 764981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 765981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 766981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 767981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 768981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 769981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 770981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 771981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_smTimeout - Time out event activation function 772981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 773981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 774981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 775981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Time out event activation function. 776981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 777981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 778981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 779981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - hAssoc - Association SM context \n 780981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 781981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 782981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 783981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 784981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 785981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa assoc_Start, assoc_Stop 786981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 787981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid assoc_smTimeout(TI_HANDLE hAssoc, TI_BOOL bTwdInitOccured) 788981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 789981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_t *pHandle; 790981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 791981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle = (assoc_t*)hAssoc; 792981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 793981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 794981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pHandle == NULL) 795981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 796981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return; 797981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 798981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 799981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pHandle->assocTimeoutCount++; 800981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 801981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_smEvent(pHandle, ASSOC_SM_EVENT_TIMEOUT, hAssoc); 802981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 803981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 804981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** 805981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 806981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* assoc_smEvent - Perform an event on the association SM 807981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 808981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description: 809981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 810981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Perform an event on the association SM. 811981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 812981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS: 813981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 814981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pAssoc - Association SM context \n 815981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - event - Current event \n 816981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* I - pData - event related data 817981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 818981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS: 819981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 820981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* TI_OK if successful, TI_NOK otherwise. 821981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* 822981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa 823981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 824981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smEvent(assoc_t *pAssoc, TI_UINT8 event, void *pData) 825981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 826981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 827981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 nextState; 828981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 829981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = fsm_GetNextState(pAssoc->pAssocSm, pAssoc->currentState, event, &nextState); 830981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 831981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 832981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pAssoc->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: ERROR - failed getting next state \n"); 833981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 834981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return(TI_NOK); 835981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 836981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 837981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3( pAssoc->hReport, REPORT_SEVERITY_INFORMATION, "assoc_smEvent: <currentState = %d, event = %d> --> nextState = %d\n", pAssoc->currentState, event, nextState); 838981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 839981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = fsm_Event(pAssoc->pAssocSm, &pAssoc->currentState, event, pData); 840981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 841981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return(status); 842981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 843981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 844981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* state machine functions */ 845981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 846981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartIdle(assoc_t *pAssoc) 847981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 848981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 849981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 850981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smResetRetry(pAssoc); 851981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSendAssocReq(pAssoc); 852981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStartTimer(pAssoc); 853981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smIncRetry(pAssoc); 854981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 855981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 856981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 857981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 858981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopWait(assoc_t *pAssoc) 859981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 860981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 861981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 862981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 863981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 864981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 865981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 866981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 867981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSuccessWait(assoc_t *pAssoc) 868981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 869981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 870981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 871981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 872981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportSuccess(pAssoc); 873981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 874981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 875981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 876981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 877981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smFailureWait(assoc_t *pAssoc) 878981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 879981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 880981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 uRspStatus = *(TI_UINT16*)&(pAssoc->assocRespBuffer[2]); 881981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 882981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 883981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 884981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Sanity check. If the Response status is indeed not 0 */ 885981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (uRspStatus) 886981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 887981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, uRspStatus); 888981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 889981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else /* (uRspStatus == 0) how did we get here ? */ 890981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 891981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pAssoc->hReport, REPORT_SEVERITY_ERROR, "while Response status is OK (0) !!! \n"); 892981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 893981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, (TI_UINT16)TI_NOK); 894981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 895981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 896981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 897981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 898981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smTimeoutWait(assoc_t *pAssoc) 899981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 900981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 901981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 902981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSendAssocReq(pAssoc); 903981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStartTimer(pAssoc); 904981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smIncRetry(pAssoc); 905981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 906981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 907981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 908981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 909981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smMaxRetryWait(assoc_t *pAssoc) 910981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 911981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 912981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 913981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smStopTimer(pAssoc); 914981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smReportFailure(pAssoc, STATUS_PACKET_REJ_TIMEOUT); 915981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 916981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 917981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 918981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 919981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSendAssocReq(assoc_t *pAssoc) 920981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 921023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TI_UINT8 *assocMsg; 922023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt TI_UINT32 msgLen; 923981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 924981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11MgmtSubType_e assocType=ASSOC_REQUEST; 925981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 926023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt assocMsg = os_memoryAlloc(pAssoc->hOs, MAX_ASSOC_MSG_LENGTH); 927023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (!assocMsg) 928023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt return TI_NOK; 929023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt 930981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->reAssoc) 931981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 932981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assocType = RE_ASSOC_REQUEST; 933981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 934981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smRequestBuild(pAssoc, assocMsg, &msgLen); 935023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt if (status == TI_OK) { 936023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt /* Save the association request message */ 937023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt assoc_saveAssocReqMessage(pAssoc, assocMsg, msgLen); 938023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt status = mlmeBuilder_sendFrame(pAssoc->hMlme, assocType, assocMsg, msgLen, 0); 939023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt } 940023547f11f3d7c84ab64acaab9b9e821f8c528e7Dmitry Shmidt os_memoryFree(pAssoc->hOs, assocMsg, MAX_ASSOC_MSG_LENGTH); 941981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 942981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 943981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 944981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopAssoc(assoc_t *pAssoc) 945981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 946981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->disAssoc) { 947981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_sendDisAssoc(pAssoc, STATUS_UNSPECIFIED); 948981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 949981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 950981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 951981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 952981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smActionUnexpected(assoc_t *pAssoc) 953981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 954981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 955981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 956981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 957981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* local functions */ 958981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 959981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 960981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smResetRetry(assoc_t *pAssoc) 961981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 962981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 963981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 964981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 965981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 966981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 967981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->retryCount = 0; 968981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 969981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 970981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 971981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 972981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smIncRetry(assoc_t *pAssoc) 973981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 974981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 975981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 976981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 977981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 978981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 979981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 980981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 981981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->retryCount++; 982981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 983981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc->retryCount > pAssoc->maxCount) 984981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 985981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smEvent(pAssoc, ASSOC_SM_EVENT_MAX_RETRY, pAssoc); 986981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 987981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 988981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 989981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 990981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 991981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 992981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 993981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportSuccess(assoc_t *pAssoc) 994981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 995981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 996981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 997981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 998981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 999981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1000981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1001981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlme_reportAssocStatus(pAssoc->hMlme, (TI_UINT16)TI_OK); 1002981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1003981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1004981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1005981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1006981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smReportFailure(assoc_t *pAssoc, TI_UINT16 uStatusCode) 1007981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1008981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1009981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1010981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 1011981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1012981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1013981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1014981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1015981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlme_reportAssocStatus(pAssoc->hMlme, uStatusCode); 1016981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1017981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1018981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1019981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1020981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStartTimer(assoc_t *pAssoc) 1021981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1022981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 1023981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1024981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1025981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1026981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1027981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tmr_StartTimer (pAssoc->hAssocSmTimer, 1028981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt assoc_smTimeout, 1029981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (TI_HANDLE)pAssoc, 1030981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssoc->timeout, 1031981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_FALSE); 1032981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1033981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1034981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1035981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1036981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smStopTimer(assoc_t *pAssoc) 1037981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1038981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pAssoc == NULL) 1039981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1040981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1041981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1042981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1043981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tmr_StopTimer (pAssoc->hAssocSmTimer); 1044981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1045981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1046981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1047981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1048981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************** 1049981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** 1050981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** Association messages builder/Parser 1051981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** 1052981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************/ 1053981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1054981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smCapBuild(assoc_t *pCtx, TI_UINT16 *cap) 1055981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1056981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1057981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1058981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt EDot11Mode mode; 1059981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 rateSuppMask, rateBasicMask; 1060981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 ratesBuf[DOT11_MAX_SUPPORTED_RATES]; 1061981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len = 0, ofdmIndex = 0; 1062981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_BOOL b11nEnable, bWmeEnable; 1063981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1064981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap = 0; 1065981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1066981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Bss type */ 1067981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM; 1068981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = ctrlData_getParam(pCtx->hCtrlData, ¶m); 1069981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1070981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1071981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.ctrlDataCurrentBssType == BSS_INFRASTRUCTURE) 1072981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1073981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_ESS; 1074981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1075981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_IBSS; 1076981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1077981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1078981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1079981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1080981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1081981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Privacy */ 1082981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = RSN_ENCRYPTION_STATUS_PARAM; 1083981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getParam(pCtx->hRsn, ¶m); 1084981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1085981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1086981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.rsnEncryptionStatus != TWD_CIPHER_NONE) 1087981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1088981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_PRIVACY; 1089981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1090981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1091981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1092981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1093981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1094981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Preamble */ 1095981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_DESIRED_PREAMBLE_TYPE_PARAM; 1096981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1097981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1098981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1099981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.siteMgrCurrentPreambleType == PREAMBLE_SHORT) 1100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_PREAMBLE; 1101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Pbcc */ 1106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(param.content.siteMgrCurrentRateMask.supportedRateMask & DRV_RATE_MASK_22_PBCC) 1111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_PBCC; 1112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1113981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking if the station supports Spectrum Management (802.11h) */ 1118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 1119981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain, ¶m); 1120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK ) 1121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( param.content.spectrumManagementEnabled) 1123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_SPECTRUM_MANAGEMENT; 1124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* slot time */ 1131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM; 1132981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1133981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK) 1134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1135981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt mode = param.content.siteMgrDot11OperationalMode; 1136981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1137981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(mode == DOT11_G_MODE) 1141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* new requirement: the short slot time should be set only 1143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if the AP's modulation is OFDM (highest rate) */ 1144981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1145981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get Rates */ 1146981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1147981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1148981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1149981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateBasicMask = param.content.siteMgrCurrentRateMask.basicRateMask; 1151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask = param.content.siteMgrCurrentRateMask.supportedRateMask; 1152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* convert the bit map to the rates array */ 1157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rate_DrvBitmapToNetStr (rateSuppMask, rateBasicMask, ratesBuf, &len, &ofdmIndex); 1158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(ofdmIndex < len) 1160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_SLOT_TIME; 1161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* 1163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_MODULATION_TYPE_PARAM; 1164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(param.content.siteMgrCurrentModulationType == DRV_MODULATION_OFDM) 1166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_SHORT_SLOT_TIME; 1167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/ 1168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Immediate Block Ack subfield - (is WME on?) AND (is HT Enable?) */ 1171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* verify 11n_Enable and Chip type */ 1172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt StaCap_IsHtEnable (pCtx->hStaCap, &b11nEnable); 1173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* verify that WME flag enable */ 1174981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt qosMngr_GetWmeEnableFlag (pCtx->hQosMngr, &bWmeEnable); 1175981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((b11nEnable != TI_FALSE) && (bWmeEnable != TI_FALSE)) 1177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *cap |= DOT11_CAPS_IMMEDIATE_BA; 1179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1182981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1184981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smSSIDBuild(assoc_t *pCtx, TI_UINT8 *pSSID, TI_UINT32 *ssidLen) 1186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_SSID_t *pDot11Ssid; 1190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid = (dot11_SSID_t*)pSSID; 1192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set SSID element id */ 1193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[0] = SSID_IE_ID; 1194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get SSID */ 1196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SME_DESIRED_SSID_ACT_PARAM; 1197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = sme_GetParam(pCtx->hSme, ¶m); 1198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* check for ANY ssid */ 1204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (param.content.smeDesiredSSID.len != 0) 1205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[1] = param.content.smeDesiredSSID.len; 1207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pCtx->hOs, 1208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pDot11Ssid->serviceSetId, 1209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)param.content.smeDesiredSSID.str, 1210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.content.smeDesiredSSID.len); 1211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* if ANY ssid is configured, use the current SSID */ 1214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_SSID_PARAM; 1215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Ssid->hdr[1] = param.content.siteMgrCurrentSSID.len; 1221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pCtx->hOs, 1222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)pDot11Ssid->serviceSetId, 1223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt (void *)param.content.siteMgrCurrentSSID.str, 1224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.content.siteMgrCurrentSSID.len); 1225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ssidLen = pDot11Ssid->hdr[1] + sizeof(dot11_eleHdr_t); 1229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRatesBuild(assoc_t *pCtx, TI_UINT8 *pRates, TI_UINT32 *ratesLen) 1234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 rateSuppMask, rateBasicMask; 1238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_RATES_t *pDot11Rates; 1239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len = 0, ofdmIndex = 0; 1240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 ratesBuf[DOT11_MAX_SUPPORTED_RATES]; 1241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt EDot11Mode mode; 1242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 suppRatesLen, extSuppRatesLen, i; 1243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates = (dot11_RATES_t*)pRates; 1244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get Rates */ 1247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 1248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateBasicMask = param.content.siteMgrCurrentRateMask.basicRateMask; 1252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask = param.content.siteMgrCurrentRateMask.supportedRateMask; 1253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get operational mode */ 1260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM; 1261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK) 1263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt mode = param.content.siteMgrDot11OperationalMode; 1264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* convert the bit map to the rates array */ 1268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* remove MCS rates from Extended Supported Rates IE */ 1269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rateSuppMask &= ~(DRV_RATE_MASK_MCS_0_OFDM | 1270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_1_OFDM | 1271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_2_OFDM | 1272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_3_OFDM | 1273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_4_OFDM | 1274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_5_OFDM | 1275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_6_OFDM | 1276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt DRV_RATE_MASK_MCS_7_OFDM ); 1277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt rate_DrvBitmapToNetStr (rateSuppMask, rateBasicMask, ratesBuf, &len, &ofdmIndex); 1279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(mode != DOT11_G_MODE || ofdmIndex == len ) 1281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = SUPPORTED_RATES_IE_ID; 1283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = len; 1284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, ratesBuf, len); 1285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ratesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* fill in the supported rates */ 1290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = SUPPORTED_RATES_IE_ID; 1291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = ofdmIndex; 1292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, ratesBuf, pDot11Rates->hdr[1]); 1293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt suppRatesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* fill in the extended supported rates */ 1295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates = (dot11_RATES_t*)(pRates + suppRatesLen); 1296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[0] = EXT_SUPPORTED_RATES_IE_ID; 1297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11Rates->hdr[1] = len - ofdmIndex; 1298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(NULL, (void *)pDot11Rates->rates, &ratesBuf[ofdmIndex], pDot11Rates->hdr[1]); 1299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt extSuppRatesLen = pDot11Rates->hdr[1] + sizeof(dot11_eleHdr_t); 1300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *ratesLen = suppRatesLen + extSuppRatesLen; 1301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE3(pCtx->hReport, REPORT_SEVERITY_INFORMATION, "ASSOC_SM: ASSOC_REQ - bitmapSupp= 0x%X,bitMapBasic = 0x%X, len = %d\n", rateSuppMask,rateBasicMask,len); 1304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt for(i=0; i<len; i++) 1305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE2(pCtx->hReport, REPORT_SEVERITY_INFORMATION, "ASSOC_SM: ASSOC_REQ - ratesBuf[%d] = 0x%X\n", i, ratesBuf[i]); 1307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_powerCapabilityBuild(assoc_t *pCtx, TI_UINT8 *pPowerCapability, TI_UINT32 *powerCapabilityLen) 1313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt dot11_CAPABILITY_t *pDot11PowerCapability; 1317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability = (dot11_CAPABILITY_t*)pPowerCapability; 1319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* set Power Capability element id */ 1321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->hdr[0] = DOT11_CAPABILITY_ELE_ID; 1322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->hdr[1] = DOT11_CAPABILITY_ELE_LEN; 1323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* get power capability */ 1325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_POWER_CAPABILITY_PARAM; 1326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain, ¶m); 1327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->minTxPower = param.content.powerCapability.minTxPower; 1331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pDot11PowerCapability->maxTxPower = param.content.powerCapability.maxTxPower; 1332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *powerCapabilityLen = pDot11PowerCapability->hdr[1] + sizeof(dot11_eleHdr_t); 1333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *powerCapabilityLen = 0; 1336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_smRequestBuild(assoc_t *pCtx, TI_UINT8* reqBuf, TI_UINT32* reqLen) 1341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT8 *pRequest; 1344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT32 len; 1345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt paramInfo_t param; 1346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TTwdParamInfo tTwdParam; 1347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_UINT16 capabilities; 1348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest = reqBuf; 1350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen = 0; 1351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert capabilities */ 1353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smCapBuild(pCtx, &capabilities); 1354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *(TI_UINT16*)pRequest = capabilities; 1357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += 2; 1362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += 2; 1363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert listen interval */ 1365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt tTwdParam.paramType = TWD_LISTEN_INTERVAL_PARAM_ID; 1366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = TWD_GetParam (pCtx->hTWD, &tTwdParam); 1367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *(TI_UINT16*)pRequest = ENDIAN_HANDLE_WORD((TI_UINT16)tTwdParam.content.halCtrlListenInterval); 1370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1372981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += 2; 1375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += 2; 1376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pCtx->reAssoc) 1377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* Insert currentAPAddress element only in reassoc request*/ 1378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_PREV_SITE_BSSID_PARAM; 1379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status == TI_OK) 1381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt MAC_COPY (pRequest, param.content.siteMgrDesiredBSSID); 1383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry 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]); 1384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += MAC_ADDR_LEN; 1387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += MAC_ADDR_LEN; 1388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt else 1390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE0(pCtx->hReport, REPORT_SEVERITY_ERROR, "ASSOC_SM: ASSOC_REQ - No prev AP \n"); 1392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert SSID element */ 1398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smSSIDBuild(pCtx, pRequest, &len); 1399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Rates element */ 1408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_smRatesBuild(pCtx, pRequest, &len); 1409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking if the station supports Spectrum Management (802.11h) */ 1417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM; 1418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = regulatoryDomain_getParam(pCtx->hRegulatoryDomain,¶m); 1419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if( (status == TI_OK) && param.content.spectrumManagementEnabled) 1420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Checking the selected AP capablities */ 1422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_SITE_CAPABILITY_PARAM; 1423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr,¶m); 1424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(status == TI_OK && ((param.content.siteMgrSiteCapability & DOT11_SPECTRUM_MANAGEMENT) != 0)) 1425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Power capability element */ 1427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_powerCapabilityBuild(pCtx, pRequest, &len); 1428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#if 0 1435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert Supported Channels element */ 1436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = assoc_supportedChannelBuild(pCtx, pRequest, &len); 1437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif 1444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = qosMngr_getQosCapabiltyInfeElement(pCtx->hQosMngr,pRequest,&len); 1450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef XCC_MODULE_INCLUDED 1459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getXCCExtendedInfoElement(pCtx->hRsn, pRequest, (TI_UINT8*)&len); 1460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (pCtx->reAssoc) 1468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { /* insert CCKM information element only in reassoc */ 1469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = XCCMngr_getCckmInfoElement(pCtx->hXCCMngr, pRequest, (TI_UINT8*)&len); 1470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = XCCMngr_getXCCVersionInfoElement(pCtx->hXCCMngr, pRequest, (TI_UINT8*)&len); 1479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Insert Radio Mngt Capability IE */ 1487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = measurementMgr_radioMngtCapabilityBuild(pCtx->hMeasurementMgr, pRequest, (TI_UINT8*)&len); 1488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif 1495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1496653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt /* Get Simple-Config state */ 1497653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt param.paramType = SITE_MGR_SIMPLE_CONFIG_MODE; 1498653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt status = siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1499653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt 1500653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt if (param.content.siteMgrWSCMode.WSCMode == TIWLN_SIMPLE_CONFIG_OFF) 1501653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt { 1502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* insert RSN information elements */ 1503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = rsn_getInfoElement(pCtx->hRsn, pRequest, &len); 1504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1511653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt } 1512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt /* Primary Site support HT ? */ 1514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt param.paramType = SITE_MGR_PRIMARY_SITE_HT_SUPPORT; 1515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt siteMgr_getParam(pCtx->hSiteMgr, ¶m); 1516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if(TI_TRUE == param.content.bPrimarySiteHtSupport) 1518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = StaCap_GetHtCapabilitiesIe (pCtx->hStaCap, pRequest, &len); 1520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = qosMngr_assocReqBuild(pCtx->hQosMngr,pRequest,&len); 1529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = apConn_getVendorSpecificIE(pCtx->hApConn, pRequest, &len); 1537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (status != TI_OK) 1538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1541981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pRequest += len; 1542981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *reqLen += len; 1543981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1544981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (*reqLen>=MAX_ASSOC_MSG_LENGTH) 1545981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1546981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1547981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1548981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1549981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1550981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1551981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1552981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1553981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1554981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_saveAssocRespMessage(assoc_t *pAssocSm, TI_UINT8 *pAssocBuffer, TI_UINT32 length) 1555981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1556981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pAssocSm==NULL) || (pAssocBuffer==NULL) || (length>=MAX_ASSOC_MSG_LENGTH)) 1557981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1558981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1559981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1560981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pAssocSm->hOs, pAssocSm->assocRespBuffer, pAssocBuffer, length); 1561981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssocSm->assocRespLen = length; 1562981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1563981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pAssocSm->hReport, REPORT_SEVERITY_INFORMATION, "assoc_saveAssocRespMessage: length=%ld \n",length); 1564981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1565981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1566981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1567981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_saveAssocReqMessage(assoc_t *pAssocSm, TI_UINT8 *pAssocBuffer, TI_UINT32 length) 1568981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1569981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1570981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if ((pAssocSm==NULL) || (pAssocBuffer==NULL) || (length>=MAX_ASSOC_MSG_LENGTH)) 1571981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1572981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_NOK; 1573981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1574981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1575981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt os_memoryCopy(pAssocSm->hOs, pAssocSm->assocReqBuffer, pAssocBuffer, length); 1576981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt pAssocSm->assocReqLen = length; 1577981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1578981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TRACE1(pAssocSm->hReport, REPORT_SEVERITY_INFORMATION, "assoc_saveAssocReqMessage: length=%ld \n",length); 1579981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return TI_OK; 1580981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1581981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1582981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1583981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS assoc_sendDisAssoc(assoc_t *pAssocSm, mgmtStatus_e reason) 1584981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{ 1585981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt TI_STATUS status; 1586981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc_t disAssoc; 1587981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1588981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt if (reason == STATUS_SUCCESSFUL) 1589981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt { 1590981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc.reason = ENDIAN_HANDLE_WORD(STATUS_UNSPECIFIED); 1591981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } else { 1592981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt disAssoc.reason = ENDIAN_HANDLE_WORD(reason); 1593981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt } 1594981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1595981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt status = mlmeBuilder_sendFrame(pAssocSm->hMlme, DIS_ASSOC, (TI_UINT8*)&disAssoc, sizeof(disAssoc_t), 0); 1596981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1597981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt return status; 1598981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt} 1599981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1600981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt 1601