1/** \file admCtrl.h
2 *  \brief Admission control API
3 *
4 *  \see admCtrl.c
5 */
6/****************************************************************************
7**+-----------------------------------------------------------------------+**
8**|                                                                       |**
9**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
10**| All rights reserved.                                                  |**
11**|                                                                       |**
12**| Redistribution and use in source and binary forms, with or without    |**
13**| modification, are permitted provided that the following conditions    |**
14**| are met:                                                              |**
15**|                                                                       |**
16**|  * Redistributions of source code must retain the above copyright     |**
17**|    notice, this list of conditions and the following disclaimer.      |**
18**|  * Redistributions in binary form must reproduce the above copyright  |**
19**|    notice, this list of conditions and the following disclaimer in    |**
20**|    the documentation and/or other materials provided with the         |**
21**|    distribution.                                                      |**
22**|  * Neither the name Texas Instruments nor the names of its            |**
23**|    contributors may be used to endorse or promote products derived    |**
24**|    from this software without specific prior written permission.      |**
25**|                                                                       |**
26**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
27**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
28**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
29**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
30**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
31**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
32**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
33**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
34**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
35**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
36**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
37**|                                                                       |**
38**+-----------------------------------------------------------------------+**
39****************************************************************************/
40
41/****************************************************************************
42 *                                                                          *
43 *   MODULE:  Admission Control	    		                                *
44 *   PURPOSE: Admission Control Module API                              	*
45 *                                                                          *
46 ****************************************************************************/
47
48#ifndef _ADM_CTRL_H_
49#define _ADM_CTRL_H_
50
51#include "rsnApi.h"
52
53/* Constants */
54
55/* Enumerations */
56
57/* Typedefs */
58
59typedef struct _admCtrl_t	admCtrl_t;
60
61/* RSN admission control prototypes */
62
63typedef TI_STATUS (*admCtrl_setAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e authSuite);
64
65typedef TI_STATUS (*admCtrl_getAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e *pSuite);
66
67typedef TI_STATUS (*admCtrl_setNetworkMode_t)(admCtrl_t *pAdmCtrl, rsn_networkMode_t mode);
68
69typedef TI_STATUS (*admCtrl_setUcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
70
71typedef TI_STATUS (*admCtrl_setBcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
72
73typedef TI_STATUS (*admCtrl_getCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e *pSuite);
74
75typedef TI_STATUS (*admCtrl_setKeyMngSuite_t)(admCtrl_t *pAdmCtrl, rsn_keyMngSuite_e suite);
76
77typedef TI_STATUS (*admCtrl_setExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e extAuthMode);
78
79typedef TI_STATUS (*admCtrl_getExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e *pExtAuthMode);
80
81typedef TI_STATUS (*admCtrl_getInfoElement_t)(admCtrl_t *pAdmCtrl, UINT8 *pIe, UINT8 *pLength);
82
83typedef TI_STATUS (*admCtrl_setSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 *pAssocIe, UINT8 *pAssocIeLen);
84
85typedef TI_STATUS (*admCtrl_evalSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, bssType_e bssType, UINT32 *pEvaluation);
86
87typedef TI_STATUS (*admCtrl_setMixedMode_t)(admCtrl_t *pAdmCtrl, BOOL mixedMode);
88
89typedef TI_STATUS (*admCtrl_getMixedMode_t)(admCtrl_t *pAdmCtrl, BOOL *mixedMode);
90
91typedef TI_STATUS (*admCtrl_getAuthEncrCapability_t)(admCtrl_t *pAdmCtrl,
92                                        rsnAuthEncrCapability_t   *authEncrCapability);
93
94typedef TI_STATUS (*admCtrl_setPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
95
96typedef TI_STATUS (*admCtrl_getPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
97
98typedef TI_STATUS (*admCtrl_resetPMKIDlist_t)(admCtrl_t *pAdmCtrl);
99
100typedef TI_STATUS (*admCtrl_sendPMKIDCandListAfterDelay_t)(admCtrl_t *pAdmCtrl, UINT32 delay);
101
102typedef TI_STATUS (*admCtrl_setPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 flags);
103
104typedef TI_STATUS (*admCtrl_getPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 *flags);
105
106typedef TI_STATUS (*admCtrl_getWPAMixedModeSupport_t)(admCtrl_t *pAdmCtrl, UINT32 *support);
107
108#ifdef EXC_MODULE_INCLUDED
109typedef TI_STATUS (*admCtrl_getNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP *networkEap);
110
111typedef TI_STATUS (*admCtrl_setNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP networkEap);
112#endif
113
114
115typedef BOOL (*admCtrl_getPreAuthStatus_t)(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex);
116
117typedef TI_STATUS (*admCtrl_startPreAuth_t)(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList);
118
119typedef TI_STATUS (*admCtrl_get802_1x_AkmExists_t)(admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists);
120/* Constants */
121
122/* Flags for Any-WPA (WPA Mixed) mode) - set by the Supplicant  */
123#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_AUTH_MODE  0x00000001
124#define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_CIPHER     0x00000002
125
126#define ADMCTRL_WPA_OPTION_MAXVALUE                  0x00000003
127
128
129/* Structures */
130
131/* PMKID cache structures                        */
132/* (PMKID cache used for WPA2 pre-authentication */
133
134#define PMKID_VALUE_SIZE  16
135typedef UINT8 pmkidValue_t[PMKID_VALUE_SIZE];
136
137#define PMKID_MAX_NUMBER 16
138
139typedef struct
140{
141   macAddress_t bssId;
142   pmkidValue_t pmkId;
143   BOOL			preAuthenticate;
144
145} pmkidEntry_t;
146
147#define ADMCTRL_PMKID_CACHE_SIZE 32
148
149typedef struct
150{
151   ssid_t              ssid;
152   UINT8               entriesNumber;
153   UINT8               nextFreeEntry;
154   pmkidEntry_t        pmkidTbl[ADMCTRL_PMKID_CACHE_SIZE];
155} pmkid_cache_t;
156
157
158
159/* Admission control object */
160struct _admCtrl_t
161{
162	rsn_paeRole_t			role;
163	authSuite_e				authSuite;
164	rsn_networkMode_t 		networkMode;
165	externalAuthMode_e		externalAuthMode;
166	cipherSuite_e			unicastSuite;
167	cipherSuite_e			broadcastSuite;
168	rsn_keyMngSuite_e		keyMngSuite;
169    BOOL                    wpaAkmExists;
170	BOOL					mixedMode;
171	UINT8                   AP_IP_Address[4];
172	UINT16					replayCnt;
173    UINT8                   aironetIeReserved[8];
174    BOOL                    encrInSw;
175    BOOL                    micInSw;
176    BOOL                    setSiteFirst;
177#ifdef EXC_MODULE_INCLUDED
178	OS_EXC_NETWORK_EAP		networkEapMode;
179#endif
180	BOOL					excSupport;
181	BOOL					proxyArpEnabled;
182
183	BOOL                    WPAMixedModeEnable;
184	UINT32                  WPAPromoteFlags;
185
186	BOOL                    preAuthSupport;
187    UINT32                  preAuthTimeout;
188	UINT8                   MaxNumOfPMKIDs;
189	pmkid_cache_t           pmkid_cache;
190
191	struct _rsn_t 			*pRsn;
192	TI_HANDLE 				hMlme;
193	TI_HANDLE 				hRx;
194	TI_HANDLE 				hReport;
195	TI_HANDLE 				hOs;
196	TI_HANDLE 				hExcMngr;
197	TI_HANDLE				hPowerMgr;
198	TI_HANDLE				hEvHandler;
199
200
201	admCtrl_setAuthSuite_t				setAuthSuite;
202	admCtrl_getAuthSuite_t				getAuthSuite;
203	admCtrl_setNetworkMode_t			setNetworkMode;
204	admCtrl_setUcastCipherSuite_t		setUcastSuite;
205	admCtrl_setBcastCipherSuite_t		setBcastSuite;
206	admCtrl_setExtAuthMode_t			setExtAuthMode;
207	admCtrl_getExtAuthMode_t			getExtAuthMode;
208	admCtrl_getCipherSuite_t			getCipherSuite;
209	admCtrl_setKeyMngSuite_t			setKeyMngSuite;
210	admCtrl_setMixedMode_t		    	setMixedMode;
211	admCtrl_getMixedMode_t		    	getMixedMode;
212	admCtrl_getInfoElement_t			getInfoElement;
213	admCtrl_setSite_t					setSite;
214	admCtrl_evalSite_t					evalSite;
215	admCtrl_getAuthEncrCapability_t 	getAuthEncrCap;
216	admCtrl_setPMKIDlist_t          	setPmkidList;
217	admCtrl_getPMKIDlist_t          	getPmkidList;
218	admCtrl_resetPMKIDlist_t        	resetPmkidList;
219	admCtrl_setPromoteFlags_t        setPromoteFlags;
220	admCtrl_getPromoteFlags_t        getPromoteFlags;
221	admCtrl_getWPAMixedModeSupport_t getWPAMixedModeSupport;
222    admCtrl_get802_1x_AkmExists_t       get802_1x_AkmExists;
223
224
225#ifdef EXC_MODULE_INCLUDED
226	admCtrl_getNetworkEap_t			getNetworkEap;
227	admCtrl_setNetworkEap_t			setNetworkEap;
228#endif
229
230	admCtrl_getPreAuthStatus_t		getPreAuthStatus;
231	admCtrl_startPreAuth_t			startPreAuth;
232
233    void                            *preAuthTimerWpa2;
234    UINT8                           numberOfPreAuthCandidates;
235};
236
237/* External data definitions */
238
239/* External functions definitions */
240
241/* Function prototypes */
242
243admCtrl_t* admCtrl_create(TI_HANDLE hOs);
244
245TI_STATUS admCtrl_config(TI_HANDLE hAdmCtrl,
246                      TI_HANDLE hMlme,
247					  TI_HANDLE hRx,
248					  TI_HANDLE hReport,
249					  TI_HANDLE hOs,
250					  struct _rsn_t *pRsn,
251					  TI_HANDLE hExcMngr,
252					  TI_HANDLE hPowerMgr,
253                      TI_HANDLE	hEvHandler,
254					  rsnInitParams_t *pInitParam);
255
256TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl);
257
258TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl);
259
260TI_STATUS admCtrlWpa_config(admCtrl_t *pAdmCtrl);
261
262TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 **pIe, UINT8 IeId);
263
264TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl);
265
266TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
267
268TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
269
270TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl);
271
272BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex);
273
274TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList);
275
276TI_STATUS admCtrl_nullGet802_1x_AkmExists(admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists);
277
278void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus);
279
280#endif /*  _ADM_H_*/
281
282