blob: ee5b25dd9ee004fa89dfc06cc9922ce54c281961 [file] [log] [blame]
/*
* mlmeApi.h
*
* Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name Texas Instruments nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** \file mlmeApi.h
* \brief MLME API
*
* \see mlmeSm.c
*/
/***************************************************************************/
/* */
/* MODULE: mlmeApi.h */
/* PURPOSE: MLME API */
/* */
/***************************************************************************/
#ifndef __MLME_API_H__
#define __MLME_API_H__
#include "tidef.h"
#include "paramOut.h"
#include "802_11Defs.h"
#include "TWDriver.h"
#include "DrvMainModules.h"
/* Constants */
/* Enumerations */
typedef enum
{
MLME_LEGACY_TYPE_PARAM = 0x01,
MLME_RE_ASSOC_PARAM = 0x02,
MLME_TNET_WAKE_ON_PARAM = 0x03,
MLME_CAPABILITY_PARAM = 0x04
} EMlmeParam;
typedef enum
{
AUTH_LEGACY_TYPE_PARAM = 0x01
} EAuthLegacyParam;
typedef enum
{
MSG_BROADCAST,
MSG_MULTICAST,
MSG_UNICAST
} mlmeMsgDestType_t;
/* Typedefs */
/* Disassociation frame structure */
typedef struct
{
TI_UINT16 reason;
} disAssoc_t;
/* (Re)Association response frame structure */
#define ASSOC_RESP_FIXED_DATA_LEN 6
#define ASSOC_RESP_AID_MASK 0x3FFF /* The AID is only in 14 LS bits. */
typedef struct
{
TI_UINT16 capabilities;
TI_UINT16 status;
TI_UINT16 aid;
dot11_RATES_t *pRates;
dot11_RATES_t *pExtRates;
TI_UINT8 useProtection;
TI_BOOL ciscoIEPresent;
EPreamble barkerPreambleMode;
TI_UINT8 NonErpPresent;
dot11_WME_PARAM_t *WMEParams;
dot11_RSN_t *pRsnIe;
TI_UINT8 rsnIeLen;
dot11_QOS_CAPABILITY_IE_t *QoSCapParameters;
Tdot11HtCapabilitiesUnparse *pHtCapabilities;
Tdot11HtInformationUnparse *pHtInformation;
TI_UINT8 *tspecVoiceParameters; /* dot11_WME_TSPEC_IE_t is unpacked so need to access as bytes. */
TI_UINT8 *tspecSignalParameters; /* dot11_WME_TSPEC_IE_t is unpacked so need to access as bytes. */
XCCv4IEs_t XCCIEs[MAX_NUM_OF_AC];
} assocRsp_t;
/* Probe response frame structure */
/* Please notice, the order of fields in the beacon must be identical to the order of
field in the probe response. This is because of the parsing that is done by the site manager. */
typedef struct
{
char timestamp[TIME_STAMP_LEN];
TI_UINT16 beaconInerval;
TI_UINT16 capabilities;
dot11_SSID_t *pSsid;
dot11_RATES_t *pRates;
dot11_COUNTRY_t *country;
dot11_POWER_CONSTRAINT_t *powerConstraint;
dot11_CHANNEL_SWITCH_t *channelSwitch;
dot11_QUIET_t *quiet;
dot11_TPC_REPORT_t *TPCReport;
#ifdef XCC_MODULE_INCLUDED
dot11_CELL_TP_t *cellTP;
#endif
dot11_WME_PARAM_t *WMEParams;
dot11_WSC_t *WSCParams;
dot11_RATES_t *pExtRates;
TI_UINT8 useProtection;
EPreamble barkerPreambleMode;
TI_UINT8 NonErpPresent;
dot11_FH_PARAMS_t *pFHParamsSet;
dot11_DS_PARAMS_t *pDSParamsSet;
dot11_CF_PARAMS_t *pCFParamsSet;
dot11_IBSS_PARAMS_t *pIBSSParamsSet;
dot11_RSN_t *pRsnIe;
TI_UINT8 rsnIeLen;
dot11_QOS_CAPABILITY_IE_t *QoSCapParameters;
Tdot11HtCapabilitiesUnparse *pHtCapabilities;
Tdot11HtInformationUnparse *pHtInformation;
dot11_TIM_t *pTIM; /* for beacons only */
TI_UINT8 *pUnknownIe;
TI_UINT16 unknownIeLen;
} beacon_probeRsp_t;
/* Authentication message frame structure */
typedef struct
{
TI_UINT16 authAlgo;
TI_UINT16 seqNum;
TI_UINT16 status;
dot11_CHALLENGE_t *pChallenge;
} authMsg_t;
/* DeAuthentication message frame structure */
typedef struct
{
TI_UINT16 reason;
} deAuth_t;
/* Action message frame structure */
typedef struct
{
TI_UINT8 frameType;
TI_UINT8 category;
TI_UINT8 action;
} action_t;
typedef struct
{
dot11MgmtSubType_e subType;
union
{
beacon_probeRsp_t iePacket;
disAssoc_t disAssoc;
assocRsp_t assocRsp;
authMsg_t auth;
deAuth_t deAuth;
action_t action;
} content;
union
{
mlmeMsgDestType_t destType;
} extesion;
} mlmeFrameInfo_t;
typedef struct
{
dot11_SSID_t ssid;
TMacAddr bssid;
dot11_CHALLENGE_t challenge;
dot11_RATES_t rates;
dot11_RATES_t extRates;
dot11_FH_PARAMS_t fhParams;
dot11_CF_PARAMS_t cfParams;
dot11_DS_PARAMS_t dsParams;
dot11_IBSS_PARAMS_t ibssParams;
dot11_COUNTRY_t country;
dot11_WME_PARAM_t WMEParams;
dot11_WSC_t WSCParams;
dot11_POWER_CONSTRAINT_t powerConstraint;
dot11_CHANNEL_SWITCH_t channelSwitch;
dot11_QUIET_t quiet;
dot11_TPC_REPORT_t TPCReport;
#ifdef XCC_MODULE_INCLUDED
dot11_CELL_TP_t cellTP;
#endif
dot11_RSN_t rsnIe[3];
dot11_TIM_t tim;
dot11_QOS_CAPABILITY_IE_t QosCapParams;
Tdot11HtCapabilitiesUnparse tHtCapabilities;
Tdot11HtInformationUnparse tHtInformation;
TI_UINT8 rxChannel;
TI_UINT8 band;
TI_BOOL myBssid;
TI_BOOL myDst;
TI_BOOL mySa;
TI_BOOL recvChannelSwitchAnnoncIE;
TI_UINT8 unknownIe[MAX_BEACON_BODY_LENGTH];
mlmeFrameInfo_t frame;
}mlmeIEParsingParams_t;
typedef void (*mlme_resultCB_t)( TI_HANDLE hObj, TMacAddr* bssid, mlmeFrameInfo_t* pFrameInfo,
TRxAttr* pRxAttr, TI_UINT8* frame, TI_UINT16 frameLength );
/* External data definitions */
/* External functions definitions */
/* Function prototypes */
/* MLME SM API */
TI_HANDLE mlme_create(TI_HANDLE hOs);
TI_STATUS mlme_unload(TI_HANDLE hMlme);
void mlme_init (TStadHandlesList *pStadHandles);
void mlme_SetDefaults (TI_HANDLE hMlmeSm, TMlmeInitParams *pMlmeInitParams);
TI_STATUS mlme_setParam(TI_HANDLE hMlmeSm,
paramInfo_t *pParam);
TI_STATUS mlme_getParam(TI_HANDLE hMlmeSm,
paramInfo_t *pParam);
TI_STATUS mlme_start(TI_HANDLE hMlme);
TI_STATUS mlme_stop(TI_HANDLE hMlme, DisconnectType_e disConnType, mgmtStatus_e reason);
TI_STATUS mlme_reportAuthStatus(TI_HANDLE hMlme, TI_UINT16 status);
TI_STATUS mlme_reportAssocStatus(TI_HANDLE hMlme, TI_UINT16 status);
/* MLME parser API */
TI_STATUS mlmeParser_recv(TI_HANDLE hMlme, void *pBuffer, TRxAttr* pRxAttr);
TI_STATUS mlmeParser_parseIEs(TI_HANDLE hMlme,
TI_UINT8 *pData,
TI_INT32 bodyDataLen,
mlmeIEParsingParams_t *params);
TI_BOOL mlmeParser_ParseIeBuffer (TI_HANDLE hMlme, TI_UINT8 *pIeBuffer, TI_UINT32 length, TI_UINT8 desiredIeId, TI_UINT8 **pDesiredIe, TI_UINT8 *pMatchBuffer, TI_UINT32 matchBufferLen);
#ifdef XCC_MODULE_INCLUDED
void mlmeParser_readXCCOui (TI_UINT8 *pData,
TI_UINT32 dataLen,
TI_UINT32 *pReadLen,
XCCv4IEs_t *XCCIEs);
#endif
mlmeIEParsingParams_t *mlmeParser_getParseIEsBuffer(TI_HANDLE *hMlme);
/* Association SM API */
TI_HANDLE assoc_create(TI_HANDLE pOs);
TI_STATUS assoc_unload(TI_HANDLE pAssoc);
void assoc_init (TStadHandlesList *pStadHandles);
TI_STATUS assoc_SetDefaults (TI_HANDLE hAssoc, assocInitParams_t *pAssocInitParams);
TI_STATUS assoc_setParam(TI_HANDLE hCtrlData, paramInfo_t *pParam);
TI_STATUS assoc_getParam(TI_HANDLE hCtrlData, paramInfo_t *pParam);
/* Authentication SM API */
TI_HANDLE auth_create(TI_HANDLE hOs);
TI_STATUS auth_unload(TI_HANDLE hAuth);
void auth_init (TStadHandlesList *pStadHandles);
TI_STATUS auth_SetDefaults (TI_HANDLE hAuth, authInitParams_t *pAuthInitParams);
TI_STATUS auth_setParam(TI_HANDLE hCtrlData, paramInfo_t *pParam);
TI_STATUS auth_getParam(TI_HANDLE hCtrlData, paramInfo_t *pParam);
#endif /* __MLME_API_H__*/