• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
69 typedef 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 */
80 typedef 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 
96 typedef 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 */
107 typedef 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 */
119 typedef 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 */
128 typedef enum
129 {
130     RSN_PAE_AP      = 0,
131     RSN_PAE_SUPP    = 1
132 
133 } ERsnPaeRole;
134 
135 
136 /** RSN Events */
137 typedef 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 */
148 typedef 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 */
159 typedef struct
160 {
161     EExternalAuthMode   authProtocol;
162     ERsnKeyMngSuite     keyExchangeProtocol;
163     ECipherSuite        unicastSuite;
164     ECipherSuite        broadcastSuite;
165 
166 } TRsnPaeConfig;
167 
168 
169 typedef struct
170 {
171     TI_BOOL             privacy;
172     TI_UINT8            *pIe;
173     TI_UINT8            ieLen;
174 
175 } TRsnData;
176 
177 
178 typedef struct
179 {
180    TMacAddr             bssId;
181    dot11_RSN_t          *pRsnIEs;
182    TI_UINT8             rsnIeLen;
183 
184 } TBssidRsnInfo;
185 
186 
187 typedef struct
188 {
189    TI_UINT8             NumOfItems;
190    TBssidRsnInfo        bssidList[MAX_NUM_OF_PRE_AUTH_BSSIDS];
191 
192 } TBssidList4PreAuth;
193 
194 
195 typedef 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 
211 typedef struct
212 {
213 	ScanBssType_e 				bssType;
214 	TMacAddr 	  				bssid;
215 	Tdot11HtInformationUnparse  *pHTInfo;
216 	Tdot11HtCapabilitiesUnparse *pHTCapabilities;
217 } TRsnSiteParams;
218 
219 
220 /* Prototypes */
221 
222 TI_HANDLE rsn_create(TI_HANDLE hOs);
223 
224 TI_STATUS rsn_unload(TI_HANDLE hRsn);
225 
226 void      rsn_init (TStadHandlesList *pStadHandles);
227 
228 TI_STATUS rsn_SetDefaults (TI_HANDLE hRsn, TRsnInitParams *pInitParam);
229 
230 TI_STATUS rsn_reconfig(TI_HANDLE hRsn);
231 
232 TI_STATUS rsn_start(TI_HANDLE hRsn);
233 
234 TI_STATUS rsn_stop(TI_HANDLE hRsn, TI_BOOL removeKeys);
235 
236 TI_STATUS rsn_eventRecv(TI_HANDLE hRsn, ERsnEvent event, void* pData);
237 
238 TI_STATUS rsn_setParam(TI_HANDLE hCtrlData, void *pParam);
239 
240 TI_STATUS rsn_getParamEncryptionStatus(TI_HANDLE hRsn, ECipherSuite *rsnStatus);
241 TI_STATUS rsn_getParam(TI_HANDLE hCtrlData, void *pParam);
242 
243 TI_STATUS rsn_evalSite(TI_HANDLE hRsn, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pMetric);
244 
245 TI_STATUS rsn_setSite(TI_HANDLE hRsn, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen);
246 
247 TI_STATUS rsn_getInfoElement(TI_HANDLE hRsn, TI_UINT8 *pRsnIe, TI_UINT32 *pRsnIeLen);
248 
249 #ifdef XCC_MODULE_INCLUDED
250 TI_STATUS rsn_getXCCExtendedInfoElement(TI_HANDLE hRsn, TI_UINT8 *pRsnIe, TI_UINT8 *pRsnIeLen);
251 #endif
252 
253 TI_STATUS rsn_reportAuthFailure(TI_HANDLE hRsn, EAuthStatus authStatus);
254 
255 TI_STATUS rsn_reportMicFailure(TI_HANDLE hRsn, TI_UINT8 *pType, TI_UINT32 Length);
256 
257 TI_STATUS rsn_resetPMKIDList(TI_HANDLE hRsn);
258 
259 TI_STATUS rsn_removedDefKeys(TI_HANDLE hRsn);
260 
261 TI_STATUS rsn_startPreAuth(TI_HANDLE hRsn, TBssidList4PreAuth *pBssidList);
262 
263 ERsnSiteBanLevel rsn_banSite(TI_HANDLE hRsn, TMacAddr siteBssid, ERsnSiteBanLevel banLevel, TI_UINT32 durationMs);
264 
265 TI_BOOL rsn_isSiteBanned(TI_HANDLE hRsn, TMacAddr siteBssid);
266 
267 void rsn_MboxFlushFinishCb(TI_HANDLE handle, TI_UINT16 MboxStatus, char *InterrogateParamsBuf);
268 
269 TI_STATUS rsn_setPortStatus(TI_HANDLE hRsn, TI_BOOL state);
270 
271 void rsn_reAuth(TI_HANDLE hRsn);
272 
273 #endif /* __RSN_API_H__*/
274