1/*
2 * admCtrlNone.c
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 admCtrl.c
35 *  \brief Admission control API implimentation
36 *
37 *  \see admCtrl.h
38 */
39
40/****************************************************************************
41 *                                                                          *
42 *   MODULE:  Admission Control	    		                                *
43 *   PURPOSE: Admission Control Module API                              	*
44 *                                                                          *
45 ****************************************************************************/
46
47#define __FILE_ID__  FILE_ID_17
48#include "osApi.h"
49#include "paramOut.h"
50#include "fsm.h"
51#include "report.h"
52#include "mlmeApi.h"
53#include "DataCtrl_Api.h"
54#include "rsn.h"
55#include "admCtrl.h"
56#include "admCtrlNone.h"
57#ifdef XCC_MODULE_INCLUDED
58#include "XCCMngr.h"
59#include "admCtrlWpa.h"
60#include "admCtrlXCC.h"
61#endif
62#include "TWDriver.h"
63
64
65/* Constants */
66
67/* Enumerations */
68
69/* Typedefs */
70
71/* Structures */
72
73/* External data definitions */
74
75/* Local functions definitions */
76
77/* Global variables */
78
79/* Function prototypes */
80
81/**
82*
83* admCtrlNone_config  - Configure empty admission control.
84*
85* \b Description:
86*
87* Configure empty admission control.
88*
89* \b ARGS:
90*
91*  I   - pAdmCtrl - context \n
92*
93* \b RETURNS:
94*
95*  TI_OK on success, TI_NOK on failure.
96*
97* \sa
98*/
99TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl)
100{
101	TI_STATUS			status;
102	TRsnPaeConfig   	paeConfig;
103
104#ifdef XCC_MODULE_INCLUDED
105	TTwdParamInfo   	tTwdParam;
106#endif
107
108	if ((pAdmCtrl->authSuite !=	RSN_AUTH_OPEN ) &&
109		(pAdmCtrl->authSuite !=	RSN_AUTH_SHARED_KEY) &&
110		(pAdmCtrl->authSuite !=	RSN_AUTH_AUTO_SWITCH))	{
111		/* The default is OPEN */
112		pAdmCtrl->authSuite =	RSN_AUTH_OPEN;
113	}
114
115	/* set admission control parameters */
116    pAdmCtrl->keyMngSuite = RSN_KEY_MNG_NONE;
117	pAdmCtrl->externalAuthMode = (EExternalAuthMode)pAdmCtrl->authSuite;
118
119	/* set callback functions (API) */
120	pAdmCtrl->getInfoElement = admCtrlNone_getInfoElement;
121	pAdmCtrl->setSite = admCtrlNone_setSite;
122	pAdmCtrl->evalSite = admCtrlNone_evalSite;
123
124	pAdmCtrl->getPmkidList	 = admCtrl_nullGetPMKIDlist;
125	pAdmCtrl->setPmkidList	 = admCtrl_nullSetPMKIDlist;
126	pAdmCtrl->resetPmkidList = admCtrl_resetPMKIDlist;
127	pAdmCtrl->getPreAuthStatus = admCtrl_nullGetPreAuthStatus;
128	pAdmCtrl->startPreAuth	= admCtrl_nullStartPreAuth;
129    pAdmCtrl->get802_1x_AkmExists = admCtrl_nullGet802_1x_AkmExists;
130
131
132
133	/* set cipher suite */
134	pAdmCtrl->broadcastSuite =  TWD_CIPHER_NONE;
135	pAdmCtrl->unicastSuite = TWD_CIPHER_NONE;
136
137
138	/* set PAE parametrs */
139	paeConfig.authProtocol = pAdmCtrl->externalAuthMode;
140	paeConfig.unicastSuite = pAdmCtrl->unicastSuite;
141	paeConfig.broadcastSuite = pAdmCtrl->broadcastSuite;
142	paeConfig.keyExchangeProtocol = pAdmCtrl->keyMngSuite;
143	/* set default PAE configuration */
144	status = pAdmCtrl->pRsn->setPaeConfig(pAdmCtrl->pRsn, &paeConfig);
145
146#ifdef XCC_MODULE_INCLUDED
147	/* Clean MIC and KP in HAL and re-send WEP-keys  */
148	tTwdParam.paramType = TWD_RSN_XCC_SW_ENC_ENABLE_PARAM_ID;
149	tTwdParam.content.rsnXCCSwEncFlag = TI_FALSE;
150	status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam);
151
152	tTwdParam.paramType = TWD_RSN_XCC_MIC_FIELD_ENABLE_PARAM_ID;
153	tTwdParam.content.rsnXCCMicFieldFlag = TI_FALSE;
154	status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam);
155#endif /*XCC_MODULE_INCLUDED*/
156
157	return status;
158}
159
160
161/**
162*
163* admCtrlNone_getInfoElement - Get the current information element.
164*
165* \b Description:
166*
167* Get the current information element.
168*
169* \b ARGS:
170*
171*  I   - pAdmCtrl - context \n
172*  I   - pIe - IE buffer \n
173*  I   - pLength - length of IE \n
174*
175* \b RETURNS:
176*
177*  TI_OK on success, TI_NOK on failure.
178*
179* \sa
180*/
181TI_STATUS admCtrlNone_getInfoElement(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength)
182{
183	*pLength = 0;
184	pIe = NULL;
185
186	TI_VOIDCAST(pIe);
187	return TI_OK;
188}
189/**
190*
191* admCtrlNone_setSite  - Set current primary site parameters for registration.
192*
193* \b Description:
194*
195* Set current primary site parameters for registration.
196*
197* \b ARGS:
198*
199*  I   - pAdmCtrl - context \n
200*  I   - pRsnData - site's RSN data \n
201*  O   - pAssocIe - result IE of evaluation \n
202*  O   - pAssocIeLen - length of result IE of evaluation \n
203*
204* \b RETURNS:
205*
206*  TI_OK on site is aproved, TI_NOK on site is rejected.
207*
208* \sa
209*/
210TI_STATUS admCtrlNone_setSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen)
211{
212	TI_STATUS			status;
213	paramInfo_t			param;
214	TTwdParamInfo		tTwdParam;
215	EAuthSuite			authSuite;
216
217	admCtrlNone_config(pAdmCtrl);
218
219	authSuite = pAdmCtrl->authSuite;
220
221  /* Config the default keys */
222	if ((authSuite == RSN_AUTH_SHARED_KEY) || (authSuite == RSN_AUTH_AUTO_SWITCH))
223	{   /* Configure Security status in HAL */
224		tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID;
225		tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_WEP;
226		status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam);
227		/* Configure the keys in HAL */
228		rsn_setDefaultKeys(pAdmCtrl->pRsn);
229	}
230
231#ifdef XCC_MODULE_INCLUDED
232	admCtrlXCC_setExtendedParams(pAdmCtrl, pRsnData);
233#endif
234
235	/* Now we configure the MLME module with the 802.11 legacy authentication suite,
236		THe MLME will configure later the authentication module */
237	param.paramType = MLME_LEGACY_TYPE_PARAM;
238	switch (authSuite)
239	{
240	case RSN_AUTH_OPEN:
241		param.content.mlmeLegacyAuthType = AUTH_LEGACY_OPEN_SYSTEM;
242		break;
243
244	case RSN_AUTH_SHARED_KEY:
245		param.content.mlmeLegacyAuthType = AUTH_LEGACY_SHARED_KEY;
246		break;
247
248	case RSN_AUTH_AUTO_SWITCH:
249		param.content.mlmeLegacyAuthType = AUTH_LEGACY_AUTO_SWITCH;
250		break;
251
252	default:
253		return TI_NOK;
254	}
255
256	status = mlme_setParam(pAdmCtrl->hMlme, &param);
257	if (status != TI_OK)
258	{
259		return status;
260	}
261
262	param.paramType = RX_DATA_EAPOL_DESTINATION_PARAM;
263	param.content.rxDataEapolDestination = OS_ABS_LAYER;
264	status = rxData_setParam(pAdmCtrl->hRx, &param);
265	if (status != TI_OK)
266	{
267		return status;
268	}
269
270	/* Configure privacy status in HAL */
271	if (authSuite == RSN_AUTH_OPEN)
272	{
273		tTwdParam.paramType = TWD_RSN_SECURITY_MODE_PARAM_ID;
274		tTwdParam.content.rsnEncryptionStatus = (ECipherSuite)TWD_CIPHER_NONE;
275		status = TWD_SetParam(pAdmCtrl->pRsn->hTWD, &tTwdParam);
276	}
277
278	return status;
279}
280
281/**
282*
283* admCtrlNone_evalSite  - Evaluate site for registration.
284*
285* \b Description:
286*
287* evaluate site RSN capabilities against the station's cap.
288* If the BSS type is infrastructure, the station matches the site only if it's WEP status is same as the site
289* In IBSS, it does not matter
290*
291* \b ARGS:
292*
293*  I   - pAdmCtrl - Context \n
294*  I   - pRsnData - site's RSN data \n
295*  O   - pEvaluation - Result of evaluation \n
296*
297* \b RETURNS:
298*
299*  TI_OK
300*
301* \sa
302*/
303TI_STATUS admCtrlNone_evalSite(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation)
304{
305	if ((pAdmCtrl==NULL) || (pEvaluation==NULL)){
306		return TI_NOK;
307	}
308	*pEvaluation = 1;
309
310	/* Check privacy bit if not in mixed mode */
311	if (!pAdmCtrl->mixedMode)
312	{   /* There's no mixed mode, so make sure that the privacy Bit is off*/
313		if (pRsnData->privacy)
314		{
315			*pEvaluation = 0;
316			return TI_NOK;
317		}
318	}
319
320    TRACE1(pAdmCtrl->hReport, REPORT_SEVERITY_INFORMATION, "admCtrlNone_evalSite:  pEvaluation=%d\n\n", *pEvaluation);
321
322   	return TI_OK;
323
324}
325
326
327