1/*
2 * rsnApi.h
3 *
4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 *  * Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *  * Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in
15 *    the documentation and/or other materials provided with the
16 *    distribution.
17 *  * Neither the name Texas Instruments nor the names of its
18 *    contributors may be used to endorse or promote products derived
19 *    from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/** \file utilsReplvl.h
35 *  \brief Report level API
36 *
37 *  \see utilsReplvl.c
38 */
39
40/***************************************************************************/
41/*                                                                                                  */
42/*    MODULE:   utilsReplvl.h                                                               */
43/*    PURPOSE:  Report level API                                            */
44/*                                                                                                  */
45/***************************************************************************/
46#ifndef __RSN_API_H__
47#define __RSN_API_H__
48
49#include "tidef.h"
50#include "TWDriver.h"
51#include "802_11Defs.h"
52#include "DrvMainModules.h"
53
54/* Constants */
55
56#define RSN_MAC_ADDR_LEN            6
57#define MAX_KEY_RSC_LEN             8
58#define MAX_SSN_KEY_DATA_LENGTH     32
59#define RSN_AUTH_FAILURE_TIMEOUT    30000
60#define MAX_NUM_OF_PRE_AUTH_BSSIDS  16
61#define MAX_KEYS_NUM                4
62
63
64/* Enumerations */
65
66
67
68/** RSN supported authentication suites */
69typedef enum
70{
71    RSN_AUTH_OPEN           = 0,        /*< Legacy Open authentication suite */
72    RSN_AUTH_SHARED_KEY     = 1,        /*< Legacy Shared Key authentication suite */
73    RSN_AUTH_AUTO_SWITCH    = 2,        /*< Automatic authentication suite */
74    RSN_AUTH_NONE           = 255       /*< no authentication suite */
75
76} EAuthSuite;
77
78
79/* Available External authentication modes for admission control */
80typedef enum
81{
82    RSN_EXT_AUTH_MODE_OPEN           =   RSN_AUTH_OPEN,
83    RSN_EXT_AUTH_MODE_SHARED_KEY     =   RSN_AUTH_SHARED_KEY,
84    RSN_EXT_AUTH_MODE_AUTO_SWITCH    =   RSN_AUTH_AUTO_SWITCH,
85    RSN_EXT_AUTH_MODE_WPA,
86    RSN_EXT_AUTH_MODE_WPAPSK,
87    RSN_EXT_AUTH_MODE_WPANONE,
88    RSN_EXT_AUTH_MODE_WPA2,
89    RSN_EXT_AUTH_MODE_WPA2PSK,
90    /* Not a real mode, defined as upper bound */
91    RSN_EXT_AUTH_MODEMAX
92
93} EExternalAuthMode;
94
95
96typedef enum
97{
98    RSN_AUTH_STATUS_INVALID_TYPE                = 0x0001,
99    RSN_AUTH_STATUS_TIMEOUT                     = 0x0002,
100    RSN_AUTH_STATUS_CHALLENGE_FROM_AP_FAILED    = 0x0003,
101    RSN_AUTH_STATUS_CHALLENGE_TO_AP_FAILED      = 0x0004
102
103} EAuthStatus;
104
105
106/** RSN key management suites */
107typedef enum
108{
109    RSN_KEY_MNG_NONE                = 0,        /**< no key management available */
110    RSN_KEY_MNG_802_1X              = 1,        /**< "802.1X" key management */
111    RSN_KEY_MNG_WPA                 = 2,        /**< "WPA 4 way handshake" key management */
112    RSN_KEY_MNG_XCC                 = 3,        /**< "XCC" key management */
113    RSN_KEY_MNG_UNKNOWN             = 255       /**< UNKNOWN key management available */
114
115} ERsnKeyMngSuite;
116
117
118/** Available cipher suites for admission control */
119typedef enum
120{
121    RSN_IBSS                = 0,        /**< IBSS mode */
122    RSN_INFRASTRUCTURE      = 1         /**< Infrastructure mode */
123
124} ERsnNetworkMode;
125
126
127/** Port Access Entity role type */
128typedef enum
129{
130    RSN_PAE_AP      = 0,
131    RSN_PAE_SUPP    = 1
132
133} ERsnPaeRole;
134
135
136/** RSN Events */
137typedef enum
138{
139    RSN_EVENT_EAPOL_RECV            = 0x0,      /**< EAPOL frame received in the RX */
140    RSN_EVENT_SEC_ATTACK_DETECT     = 0x1,      /**< Security Attack detection */
141    RSN_EVENT_RAW_KEY_RECV          = 0x2,      /**< Raw key recive */
142    RSN_EVENT_KEY_REMOVE            = 0x3       /**< Key remove event */
143
144} ERsnEvent;
145
146
147/** Site ben levels */
148typedef enum
149{
150    RSN_SITE_BAN_LEVEL_HALF = 1,
151    RSN_SITE_BAN_LEVEL_FULL = 2
152
153} ERsnSiteBanLevel;
154
155
156/* Typedefs */
157
158/** Port Access Entity structure */
159typedef struct
160{
161    EExternalAuthMode   authProtocol;
162    ERsnKeyMngSuite     keyExchangeProtocol;
163    ECipherSuite        unicastSuite;
164    ECipherSuite        broadcastSuite;
165
166} TRsnPaeConfig;
167
168
169typedef struct
170{
171    TI_BOOL             privacy;
172    TI_UINT8            *pIe;
173    TI_UINT8            ieLen;
174
175} TRsnData;
176
177
178typedef struct
179{
180   TMacAddr             bssId;
181   dot11_RSN_t          *pRsnIEs;
182   TI_UINT8             rsnIeLen;
183
184} TBssidRsnInfo;
185
186
187typedef struct
188{
189   TI_UINT8             NumOfItems;
190   TBssidRsnInfo        bssidList[MAX_NUM_OF_PRE_AUTH_BSSIDS];
191
192} TBssidList4PreAuth;
193
194
195typedef struct
196{
197    EAuthSuite          authSuite;
198    TI_BOOL             privacyOn;
199    TSecurityKeys       keys[MAX_KEYS_NUM];
200    TI_UINT8            defaultKeyId;
201    EExternalAuthMode   externalAuthMode;
202    TI_BOOL             mixedMode;
203    TI_BOOL             WPAMixedModeEnable;
204    TI_BOOL             preAuthSupport;
205    TI_UINT32           preAuthTimeout;
206    TI_BOOL             bRsnExternalMode;
207    TI_BOOL             bPairwiseMicFailureFilter;
208
209} TRsnInitParams;
210
211typedef struct
212{
213	ScanBssType_e 				bssType;
214	TMacAddr 	  				bssid;
215	Tdot11HtInformationUnparse  *pHTInfo;
216	Tdot11HtCapabilitiesUnparse *pHTCapabilities;
217} TRsnSiteParams;
218
219
220/* Prototypes */
221
222TI_HANDLE rsn_create(TI_HANDLE hOs);
223
224TI_STATUS rsn_unload(TI_HANDLE hRsn);
225
226void      rsn_init (TStadHandlesList *pStadHandles);
227
228TI_STATUS rsn_SetDefaults (TI_HANDLE hRsn, TRsnInitParams *pInitParam);
229
230TI_STATUS rsn_reconfig(TI_HANDLE hRsn);
231
232TI_STATUS rsn_start(TI_HANDLE hRsn);
233
234TI_STATUS rsn_stop(TI_HANDLE hRsn, TI_BOOL removeKeys);
235
236TI_STATUS rsn_eventRecv(TI_HANDLE hRsn, ERsnEvent event, void* pData);
237
238TI_STATUS rsn_setParam(TI_HANDLE hCtrlData, void *pParam);
239
240TI_STATUS rsn_getParamEncryptionStatus(TI_HANDLE hRsn, ECipherSuite *rsnStatus);
241TI_STATUS rsn_getParam(TI_HANDLE hCtrlData, void *pParam);
242
243TI_STATUS rsn_evalSite(TI_HANDLE hRsn, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pMetric);
244
245TI_STATUS rsn_setSite(TI_HANDLE hRsn, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen);
246
247TI_STATUS rsn_getInfoElement(TI_HANDLE hRsn, TI_UINT8 *pRsnIe, TI_UINT32 *pRsnIeLen);
248
249#ifdef XCC_MODULE_INCLUDED
250TI_STATUS rsn_getXCCExtendedInfoElement(TI_HANDLE hRsn, TI_UINT8 *pRsnIe, TI_UINT8 *pRsnIeLen);
251#endif
252
253TI_STATUS rsn_reportAuthFailure(TI_HANDLE hRsn, EAuthStatus authStatus);
254
255TI_STATUS rsn_reportMicFailure(TI_HANDLE hRsn, TI_UINT8 *pType, TI_UINT32 Length);
256
257TI_STATUS rsn_resetPMKIDList(TI_HANDLE hRsn);
258
259TI_STATUS rsn_removedDefKeys(TI_HANDLE hRsn);
260
261TI_STATUS rsn_startPreAuth(TI_HANDLE hRsn, TBssidList4PreAuth *pBssidList);
262
263ERsnSiteBanLevel rsn_banSite(TI_HANDLE hRsn, TMacAddr siteBssid, ERsnSiteBanLevel banLevel, TI_UINT32 durationMs);
264
265TI_BOOL rsn_isSiteBanned(TI_HANDLE hRsn, TMacAddr siteBssid);
266
267void rsn_MboxFlushFinishCb(TI_HANDLE handle, TI_UINT16 MboxStatus, char *InterrogateParamsBuf);
268
269TI_STATUS rsn_setPortStatus(TI_HANDLE hRsn, TI_BOOL state);
270
271void rsn_reAuth(TI_HANDLE hRsn);
272
273#endif /* __RSN_API_H__*/
274