PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/net/wireless/tiwlan1251/common/src/core/rsn/admCtrl.c

http://github.com/CyanogenMod/cm-kernel
C | 1068 lines | 468 code | 151 blank | 449 comment | 62 complexity | d64413675d496ba5a388de6f541dde60 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.0
  1. /****************************************************************************
  2. **+-----------------------------------------------------------------------+**
  3. **| |**
  4. **| Copyright(c) 1998 - 2008 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. ****************************************************************************/
  35. /** \file admCtrl.c
  36. * \brief Admission control API implimentation
  37. *
  38. * \see admCtrl.h
  39. */
  40. #include "osApi.h"
  41. #include "paramOut.h"
  42. #include "paramIn.h"
  43. #include "utils.h"
  44. #include "fsm.h"
  45. #include "report.h"
  46. #include "mlmeApi.h"
  47. #include "DataCtrl_Api.h"
  48. #include "TI_IPC_Api.h"
  49. #include "rsn.h"
  50. #include "admCtrl.h"
  51. #include "admCtrlWpa.h"
  52. #include "admCtrlWpa2.h"
  53. #include "admCtrlNone.h"
  54. #include "admCtrlWep.h"
  55. #include "EvHandler.h"
  56. /* Constants */
  57. /* Enumerations */
  58. /* Typedefs */
  59. /* Structures */
  60. /* External data definitions */
  61. /* Local functions definitions */
  62. /* Global variables */
  63. /* Function prototypes */
  64. TI_STATUS admCtrl_setAuthSuite(admCtrl_t *pAdmCtrl, authSuite_e authSuite);
  65. TI_STATUS admCtrl_getAuthSuite(admCtrl_t *pAdmCtrl, authSuite_e *pSuite);
  66. TI_STATUS admCtrl_setNetworkMode(admCtrl_t *pAdmCtrl, rsn_networkMode_t mode);
  67. TI_STATUS admCtrl_setExtAuthMode(admCtrl_t *pAdmCtrl, externalAuthMode_e extAuthMode);
  68. TI_STATUS admCtrl_getExtAuthMode(admCtrl_t *pAdmCtrl, externalAuthMode_e *pExtAuthMode);
  69. TI_STATUS admCtrl_setUcastSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
  70. TI_STATUS admCtrl_setBcastSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
  71. TI_STATUS admCtrl_getCipherSuite(admCtrl_t *pAdmCtrl, cipherSuite_e *pSuite);
  72. TI_STATUS admCtrl_setKeyMngSuite(admCtrl_t *pAdmCtrl, rsn_keyMngSuite_e suite);
  73. TI_STATUS admCtrl_getMixedMode(admCtrl_t *pAdmCtrl, BOOL *pMixedMode);
  74. TI_STATUS admCtrl_setMixedMode(admCtrl_t *pAdmCtrl, BOOL mixedMode);
  75. TI_STATUS admCtrl_getAuthEncrCapability(admCtrl_t *pAdmCtrl,
  76. rsnAuthEncrCapability_t *authEncrCapability);
  77. TI_STATUS admCtrl_getPromoteFlags(admCtrl_t *pAdmCtrl, UINT32 *WPAPromoteFlags);
  78. TI_STATUS admCtrl_setPromoteFlags(admCtrl_t *pAdmCtrl, UINT32 WPAPromoteFlags);
  79. TI_STATUS admCtrl_getWPAMixedModeSupport(admCtrl_t *pAdmCtrl, UINT32 *support);
  80. TI_STATUS admCtrl_checkSetSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite, BOOL Broadcast);
  81. #ifdef EXC_MODULE_INCLUDED
  82. TI_STATUS admCtrl_setNetworkEap(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP networkEap);
  83. TI_STATUS admCtrl_getNetworkEap(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP *networkEap);
  84. #endif
  85. /**
  86. *
  87. * admCtrl_create
  88. *
  89. * \b Description:
  90. *
  91. * Create the admission control context.
  92. *
  93. * \b ARGS:
  94. *
  95. * I - role - admission cotrol role (AP or Station) \n
  96. * I - authSuite - authentication suite to work with \n
  97. *
  98. * \b RETURNS:
  99. *
  100. * OK on success, NOK on failure.
  101. *
  102. * \sa
  103. */
  104. admCtrl_t* admCtrl_create(TI_HANDLE hOs)
  105. {
  106. admCtrl_t *pHandle;
  107. /* allocate rsniation context memory */
  108. pHandle = (admCtrl_t*)os_memoryAlloc(hOs, sizeof(admCtrl_t));
  109. if (pHandle == NULL)
  110. {
  111. return NULL;
  112. }
  113. os_memoryZero(hOs, pHandle, sizeof(admCtrl_t));
  114. pHandle->preAuthTimerWpa2 = os_timerCreate(hOs, admCtrlWpa2_preAuthTimerExpire, pHandle);
  115. /* If we failed to create the timer - exit with error */
  116. if (pHandle->preAuthTimerWpa2 == NULL)
  117. {
  118. os_memoryFree(pHandle->hOs, pHandle, sizeof(admCtrl_t));
  119. return NULL;
  120. }
  121. pHandle->hOs = hOs;
  122. return pHandle;
  123. }
  124. /**
  125. *
  126. * admCtrl_unload
  127. *
  128. * \b Description:
  129. *
  130. * Unload admission control module from memory
  131. *
  132. * \b ARGS:
  133. *
  134. * I - hAdmCtrl - Admossion control context \n
  135. *
  136. * \b RETURNS:
  137. *
  138. * OK if successful, NOK otherwise.
  139. *
  140. * \sa admCtrl_create
  141. */
  142. TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl)
  143. {
  144. if (pAdmCtrl == NULL)
  145. {
  146. return NOK;
  147. }
  148. /* Stop and destroy the wpa2 pre-authentication timer */
  149. os_timerStop(pAdmCtrl->hOs, pAdmCtrl->preAuthTimerWpa2);
  150. utils_nullTimerDestroy(pAdmCtrl->hOs, pAdmCtrl->preAuthTimerWpa2);
  151. os_memoryFree(pAdmCtrl->hOs, pAdmCtrl, sizeof(admCtrl_t));
  152. return OK;
  153. }
  154. /**
  155. *
  156. * admCtrl_config
  157. *
  158. * \b Description:
  159. *
  160. * Configure the admission control module.
  161. *
  162. * \b ARGS:
  163. *
  164. * I - role - admission cotrol role (AP or Station) \n
  165. * I - authSuite - authentication suite to work with \n
  166. *
  167. * \b RETURNS:
  168. *
  169. * OK on success, NOK on failure.
  170. *
  171. * \sa
  172. */
  173. TI_STATUS admCtrl_config(TI_HANDLE hAdmCtrl,
  174. TI_HANDLE hMlme,
  175. TI_HANDLE hRx,
  176. TI_HANDLE hReport,
  177. TI_HANDLE hOs,
  178. struct _rsn_t *pRsn,
  179. TI_HANDLE hExcMngr,
  180. TI_HANDLE hPowerMgr,
  181. TI_HANDLE hEvHandler,
  182. rsnInitParams_t *pInitParam)
  183. {
  184. admCtrl_t *pAdmCtrl;
  185. TI_STATUS status;
  186. if (hAdmCtrl == NULL)
  187. {
  188. return NOK;
  189. }
  190. pAdmCtrl = (admCtrl_t*)hAdmCtrl;
  191. pAdmCtrl->pRsn = pRsn;
  192. pAdmCtrl->hMlme = hMlme;
  193. pAdmCtrl->hRx = hRx;
  194. pAdmCtrl->hReport = hReport;
  195. pAdmCtrl->hOs = hOs;
  196. pAdmCtrl->hExcMngr = hExcMngr;
  197. pAdmCtrl->hPowerMgr = hPowerMgr;
  198. pAdmCtrl->hEvHandler = hEvHandler;
  199. /* Initialize admission control parameters */
  200. pAdmCtrl->role = RSN_PAE_SUPP;
  201. pAdmCtrl->networkMode = RSN_INFRASTRUCTURE;
  202. pAdmCtrl->authSuite = pInitParam->authSuite;
  203. pAdmCtrl->externalAuthMode = pInitParam->externalAuthMode;
  204. pAdmCtrl->mixedMode = pInitParam->mixedMode;
  205. if (pInitParam->privacyOn)
  206. {
  207. pAdmCtrl->broadcastSuite = RSN_CIPHER_WEP;
  208. pAdmCtrl->unicastSuite = RSN_CIPHER_WEP;
  209. } else {
  210. pAdmCtrl->broadcastSuite = RSN_CIPHER_NONE;
  211. pAdmCtrl->unicastSuite = RSN_CIPHER_NONE;
  212. }
  213. pAdmCtrl->preAuthSupport = pInitParam->preAuthSupport;
  214. pAdmCtrl->preAuthTimeout = pInitParam->preAuthTimeout;
  215. pAdmCtrl->WPAMixedModeEnable = pInitParam->WPAMixedModeEnable;
  216. /*pAdmCtrl->PMKIDCandListDelay = pInitParam->PMKIDCandListDelay;*/
  217. pAdmCtrl->MaxNumOfPMKIDs = PMKID_MAX_NUMBER;
  218. /* Initialize admission control member functions */
  219. pAdmCtrl->setAuthSuite = admCtrl_setAuthSuite;
  220. pAdmCtrl->setNetworkMode = admCtrl_setNetworkMode;
  221. pAdmCtrl->getAuthSuite = admCtrl_getAuthSuite;
  222. pAdmCtrl->setExtAuthMode = admCtrl_setExtAuthMode;
  223. pAdmCtrl->getExtAuthMode = admCtrl_getExtAuthMode;
  224. pAdmCtrl->setUcastSuite = admCtrl_setUcastSuite;
  225. pAdmCtrl->setBcastSuite = admCtrl_setBcastSuite;
  226. pAdmCtrl->getCipherSuite = admCtrl_getCipherSuite;
  227. pAdmCtrl->setKeyMngSuite = admCtrl_setKeyMngSuite;
  228. pAdmCtrl->getMixedMode = admCtrl_getMixedMode;
  229. pAdmCtrl->setMixedMode = admCtrl_setMixedMode;
  230. pAdmCtrl->getAuthEncrCap = admCtrl_getAuthEncrCapability;
  231. pAdmCtrl->getPmkidList = admCtrl_nullGetPMKIDlist;
  232. pAdmCtrl->setPmkidList = admCtrl_nullSetPMKIDlist;
  233. pAdmCtrl->resetPmkidList = admCtrl_resetPMKIDlist;
  234. pAdmCtrl->getPromoteFlags = admCtrl_getPromoteFlags;
  235. pAdmCtrl->setPromoteFlags = admCtrl_setPromoteFlags;
  236. pAdmCtrl->getWPAMixedModeSupport = admCtrl_getWPAMixedModeSupport;
  237. #ifdef EXC_MODULE_INCLUDED
  238. pAdmCtrl->setNetworkEap = admCtrl_setNetworkEap;
  239. pAdmCtrl->getNetworkEap = admCtrl_getNetworkEap;
  240. pAdmCtrl->networkEapMode = OS_EXC_NETWORK_EAP_OFF;
  241. #endif
  242. pAdmCtrl->getPreAuthStatus = admCtrl_nullGetPreAuthStatus;
  243. pAdmCtrl->startPreAuth = admCtrl_nullStartPreAuth;
  244. pAdmCtrl->get802_1x_AkmExists = admCtrl_nullGet802_1x_AkmExists;
  245. /* Zero number of sent wpa2 preauthentication candidates */
  246. pAdmCtrl->numberOfPreAuthCandidates = 0;
  247. status = admCtrl_subConfig(pAdmCtrl);
  248. return status;
  249. }
  250. /**
  251. *
  252. * admCtrl_subConfig
  253. *
  254. * \b Description:
  255. *
  256. * Configure the admission control module according to the Privacy Mode.
  257. *
  258. * \b ARGS:
  259. *
  260. * I - pAdmCtrl - pointer to admission cotrol context \n
  261. *
  262. * \b RETURNS:
  263. *
  264. * OK on success, NOK on failure.
  265. *
  266. * \sa
  267. */
  268. TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl)
  269. {
  270. admCtrl_t* pAdmCtrl = (admCtrl_t*)hAdmCtrl;
  271. TI_STATUS status;
  272. switch(pAdmCtrl->externalAuthMode)
  273. {
  274. case RSN_EXT_AUTH_MODE_WPA:
  275. case RSN_EXT_AUTH_MODE_WPAPSK:
  276. case RSN_EXT_AUTH_MODE_WPANONE:
  277. status = admCtrlWpa_config(pAdmCtrl);
  278. break;
  279. case RSN_EXT_AUTH_MODE_WPA2:
  280. case RSN_EXT_AUTH_MODE_WPA2PSK:
  281. status = admCtrlWpa2_config(pAdmCtrl);
  282. break;
  283. default:
  284. if(pAdmCtrl->unicastSuite==RSN_CIPHER_NONE)
  285. {
  286. status = admCtrlNone_config(pAdmCtrl);
  287. }
  288. else
  289. {
  290. status = admCtrlWep_config(pAdmCtrl);
  291. }
  292. break;
  293. }
  294. return status;
  295. }
  296. /**
  297. *
  298. * admCtrl_setNetworkMode - Change current network mode.
  299. *
  300. * \b Description:
  301. *
  302. * Change current network mode.
  303. *
  304. * \b ARGS:
  305. *
  306. * I - pAdmCtrl - context \n
  307. * I - mode - network association mode (Infustrucure/IBSS) \n
  308. *
  309. * \b RETURNS:
  310. *
  311. * OK on success, NOK on failure.
  312. *
  313. * \sa
  314. */
  315. TI_STATUS admCtrl_setNetworkMode(admCtrl_t *pAdmCtrl, rsn_networkMode_t mode)
  316. {
  317. pAdmCtrl->networkMode = mode;
  318. return OK;
  319. }
  320. /**
  321. *
  322. * admCtrl_setAuthSuite - Change current authentication suite.
  323. *
  324. * \b Description:
  325. *
  326. * Change current authentication suite.
  327. *
  328. * \b ARGS:
  329. *
  330. * I - pAdmCtrl - context \n
  331. * I - authSuite - authentication suite to work with \n
  332. *
  333. * \b RETURNS:
  334. *
  335. * OK on success, NOK on failure.
  336. *
  337. * \sa
  338. */
  339. TI_STATUS admCtrl_setAuthSuite(admCtrl_t *pAdmCtrl, authSuite_e authSuite)
  340. {
  341. TI_STATUS status = NOK;
  342. if (pAdmCtrl == NULL)
  343. {
  344. return NOK;
  345. }
  346. if (pAdmCtrl->authSuite == authSuite)
  347. {
  348. return OK;
  349. }
  350. if (pAdmCtrl->authSuite > RSN_AUTH_AUTO_SWITCH)
  351. {
  352. return NOK;
  353. }
  354. pAdmCtrl->externalAuthMode = (externalAuthMode_e)authSuite;
  355. pAdmCtrl->authSuite = authSuite;
  356. status = admCtrl_subConfig(pAdmCtrl);
  357. return status;
  358. }
  359. /**
  360. *
  361. * admCtrl_getAuthSuite - Get current authentication suite.
  362. *
  363. * \b Description:
  364. *
  365. * Get current authentication suite.
  366. *
  367. * \b ARGS:
  368. *
  369. * I - pAdmCtrl - context \n
  370. * O - suite - key management suite to work with \n
  371. *
  372. * \b RETURNS:
  373. *
  374. * OK on success, NOK on failure.
  375. *
  376. * \sa
  377. */
  378. TI_STATUS admCtrl_getAuthSuite(admCtrl_t *pAdmCtrl, authSuite_e *pSuite)
  379. {
  380. if (pAdmCtrl == NULL)
  381. {
  382. return NOK;
  383. }
  384. *pSuite = pAdmCtrl->authSuite;
  385. return OK;
  386. }
  387. /**
  388. *
  389. * admCtrl_setExtAuthMode - Set current External authentication Mode Status.
  390. *
  391. * \b Description:
  392. *
  393. * Set current External authentication Mode Status.
  394. *
  395. * \b ARGS:
  396. *
  397. * I - pAdmCtrl - context \n
  398. * I - extAuthMode - External authentication Mode \n
  399. *
  400. * \b RETURNS:
  401. *
  402. * OK on success, NOK on failure.
  403. *
  404. * \sa
  405. */
  406. TI_STATUS admCtrl_setExtAuthMode(admCtrl_t *pAdmCtrl, externalAuthMode_e extAuthMode)
  407. {
  408. if (extAuthMode >= RSN_EXT_AUTH_MODEMAX)
  409. {
  410. return NOK;
  411. }
  412. if (pAdmCtrl->externalAuthMode == extAuthMode)
  413. {
  414. return OK;
  415. }
  416. pAdmCtrl->externalAuthMode = extAuthMode;
  417. if (extAuthMode <= RSN_EXT_AUTH_MODE_AUTO_SWITCH)
  418. {
  419. pAdmCtrl->authSuite = (authSuite_e)extAuthMode;
  420. }
  421. else
  422. {
  423. pAdmCtrl->authSuite = RSN_AUTH_OPEN;
  424. }
  425. return (admCtrl_subConfig(pAdmCtrl));
  426. }
  427. /**
  428. *
  429. * admCtrl_getExtAuthMode - Get current External authentication Mode Status.
  430. *
  431. * \b Description:
  432. *
  433. * Get current External Mode Status.
  434. *
  435. * \b ARGS:
  436. *
  437. * I - pAdmCtrl - context \n
  438. * I - pExtAuthMode - EXC External Mode Status \n
  439. *
  440. * \b RETURNS:
  441. *
  442. * OK on success, NOK on failure.
  443. *
  444. * \sa
  445. */
  446. TI_STATUS admCtrl_getExtAuthMode(admCtrl_t *pAdmCtrl, externalAuthMode_e *pExtAuthMode)
  447. {
  448. *pExtAuthMode = pAdmCtrl->externalAuthMode;
  449. return OK;
  450. }
  451. /**
  452. *
  453. * admCtrl_checkSetSuite -
  454. *
  455. * \b Description:
  456. *
  457. * Check the validity/support of the cipher suite according to
  458. * the admission control parameters
  459. *
  460. * \b ARGS:
  461. *
  462. * I - pAdmCtrl - context \n
  463. * I - suite - cipher suite to check \n
  464. *
  465. * \b RETURNS:
  466. *
  467. * OK on success, NOK on failure.
  468. *
  469. * \sa
  470. */
  471. TI_STATUS admCtrl_checkSetSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite, BOOL Broadcast)
  472. {
  473. if (pAdmCtrl->externalAuthMode<=RSN_EXT_AUTH_MODE_AUTO_SWITCH)
  474. {
  475. if ((suite==RSN_CIPHER_NONE) || (suite==RSN_CIPHER_WEP) || (suite==RSN_CIPHER_WEP104))
  476. {
  477. return OK;
  478. }
  479. }
  480. else
  481. {
  482. if ((suite==RSN_CIPHER_TKIP) || (suite==RSN_CIPHER_WEP) ||
  483. (suite==RSN_CIPHER_WEP104) || (suite==RSN_CIPHER_AES_CCMP))
  484. {
  485. return OK;
  486. }
  487. else if (!Broadcast && (suite==RSN_CIPHER_NONE))
  488. {
  489. return OK;
  490. }
  491. }
  492. return NOK;
  493. }
  494. /**
  495. *
  496. * admCtrl_setUcastSuite - Set current unicast cipher suite support.
  497. *
  498. * \b Description:
  499. *
  500. * Set current unicast cipher suite support.
  501. *
  502. * \b ARGS:
  503. *
  504. * I - pAdmCtrl - context \n
  505. * I - suite - cipher suite to work with \n
  506. *
  507. * \b RETURNS:
  508. *
  509. * OK on success, NOK on failure.
  510. *
  511. * \sa
  512. */
  513. TI_STATUS admCtrl_setUcastSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite)
  514. {
  515. TI_STATUS status;
  516. if (suite == pAdmCtrl->unicastSuite)
  517. {
  518. return OK;
  519. }
  520. status = admCtrl_checkSetSuite(pAdmCtrl, suite, FALSE);
  521. if (status == OK)
  522. {
  523. pAdmCtrl->unicastSuite = suite;
  524. status = admCtrl_subConfig(pAdmCtrl);
  525. }
  526. return status;
  527. }
  528. /**
  529. *
  530. * admCtrl_setBcastSuite - Set current broadcast cipher suite support.
  531. *
  532. * \b Description:
  533. *
  534. * Set current broadcast cipher suite support.
  535. *
  536. * \b ARGS:
  537. *
  538. * I - pAdmCtrl - context \n
  539. * I - suite - cipher suite to work with \n
  540. *
  541. * \b RETURNS:
  542. *
  543. * OK on success, NOK on failure.
  544. *
  545. * \sa
  546. */
  547. TI_STATUS admCtrl_setBcastSuite(admCtrl_t *pAdmCtrl, cipherSuite_e suite)
  548. {
  549. TI_STATUS status;
  550. if (suite == pAdmCtrl->broadcastSuite)
  551. {
  552. return OK;
  553. }
  554. status = admCtrl_checkSetSuite(pAdmCtrl, suite, TRUE);
  555. if (status == OK)
  556. {
  557. pAdmCtrl->broadcastSuite = suite;
  558. status = admCtrl_subConfig(pAdmCtrl);
  559. }
  560. return status;
  561. }
  562. /**
  563. *
  564. * admCtrl_getCipherSuite - Set current broadcast cipher suite support.
  565. *
  566. * \b Description:
  567. *
  568. * Set current broadcast cipher suite support.
  569. *
  570. * \b ARGS:
  571. *
  572. * I - pAdmCtrl - context \n
  573. * O - suite - cipher suite to work with \n
  574. *
  575. * \b RETURNS:
  576. *
  577. * OK on success, NOK on failure.
  578. *
  579. * \sa
  580. */
  581. TI_STATUS admCtrl_getCipherSuite(admCtrl_t *pAdmCtrl, cipherSuite_e *pSuite)
  582. {
  583. if (pAdmCtrl == NULL)
  584. {
  585. return NOK;
  586. }
  587. *pSuite = (pAdmCtrl->broadcastSuite > pAdmCtrl->unicastSuite) ? pAdmCtrl->broadcastSuite :pAdmCtrl->unicastSuite;
  588. return OK;
  589. }
  590. /**
  591. *
  592. * admCtrl_setKeyMngSuite - Set current key management suite support.
  593. *
  594. * \b Description:
  595. *
  596. * Set current key management suite support.
  597. *
  598. * \b ARGS:
  599. *
  600. * I - pAdmCtrl - context \n
  601. * I - suite - key management suite to work with \n
  602. *
  603. * \b RETURNS:
  604. *
  605. * OK on success, NOK on failure.
  606. *
  607. * \sa
  608. */
  609. TI_STATUS admCtrl_setKeyMngSuite(admCtrl_t *pAdmCtrl, rsn_keyMngSuite_e suite)
  610. {
  611. pAdmCtrl->keyMngSuite = suite;
  612. return OK;
  613. }
  614. /**
  615. *
  616. * admCtrl_parseIe - Parse a required information element.
  617. *
  618. * \b Description:
  619. *
  620. * Parse an Aironet information element.
  621. * Builds a structure of all the capabilities described in the Aironet IE.
  622. * We look at Flags field only to determine KP and MIC bits value
  623. *
  624. * \b ARGS:
  625. *
  626. * I - pAdmCtrl - pointer to admCtrl context
  627. * I - pAironetIe - pointer to Aironet IE buffer \n
  628. * O - pAironetData - capabilities structure
  629. *
  630. *
  631. * \b RETURNS:
  632. *
  633. * OK on success, NOK on failure.
  634. *
  635. * \sa
  636. */
  637. TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 **pIe, UINT8 IeId)
  638. {
  639. dot11_eleHdr_t *eleHdr;
  640. INT16 length;
  641. UINT8 *pCurIe;
  642. *pIe = NULL;
  643. if ((pRsnData == NULL) || (pRsnData->ieLen==0))
  644. {
  645. return OK;
  646. }
  647. pCurIe = pRsnData->pIe;
  648. length = pRsnData->ieLen;
  649. while (length>0)
  650. {
  651. eleHdr = (dot11_eleHdr_t*)pCurIe;
  652. if (length<(eleHdr->eleLen+2))
  653. {
  654. WLAN_REPORT_INFORMATION(pAdmCtrl->hReport, RSN_MODULE_LOG,
  655. ("admCtrl_parseIe ERROR: pRsnData->ieLen=%d, length=%d\n\n", pRsnData->ieLen,length));
  656. return OK;
  657. }
  658. if (eleHdr->eleId == IeId)
  659. {
  660. *pIe = (UINT8*)eleHdr;
  661. break;
  662. }
  663. length -= eleHdr->eleLen+2;
  664. pCurIe += eleHdr->eleLen+2;
  665. }
  666. return OK;
  667. }
  668. /**
  669. *
  670. * admCtrl_setMixedMode - Set current mixed Mode Status.
  671. *
  672. * \b Description:
  673. *
  674. * Set current mixed Mode Status.
  675. *
  676. * \b ARGS:
  677. *
  678. * I - pAdmCtrl - context \n
  679. * I - authMode - mixed Mode \n
  680. *
  681. * \b RETURNS:
  682. *
  683. * OK on success, NOK on failure.
  684. *
  685. * \sa
  686. */
  687. TI_STATUS admCtrl_setMixedMode(admCtrl_t *pAdmCtrl, BOOL mixedMode)
  688. {
  689. if (pAdmCtrl->mixedMode == mixedMode)
  690. {
  691. return OK;
  692. }
  693. pAdmCtrl->mixedMode = mixedMode;
  694. return OK;
  695. }
  696. /**
  697. *
  698. * admCtrl_getMixedMode - Get current mixed Mode Status.
  699. *
  700. * \b Description:
  701. *
  702. * Get current mixed Mode Status.
  703. *
  704. * \b ARGS:
  705. *
  706. * I - pAdmCtrl - context \n
  707. * I - pAuthMode - mixed Mode Status \n
  708. *
  709. * \b RETURNS:
  710. *
  711. * OK on success, NOK on failure.
  712. *
  713. * \sa
  714. */
  715. TI_STATUS admCtrl_getMixedMode(admCtrl_t *pAdmCtrl, BOOL *pMixedMode)
  716. {
  717. *pMixedMode = pAdmCtrl->mixedMode;
  718. return OK;
  719. }
  720. /* This table presents supported pairs of auth.mode/cipher type */
  721. static authEncrPairList_t supportedAuthEncrPairs[MAX_AUTH_ENCR_PAIR] =
  722. {
  723. {RSN_EXT_AUTH_MODE_OPEN, RSN_CIPHER_NONE},
  724. {RSN_EXT_AUTH_MODE_OPEN, RSN_CIPHER_WEP},
  725. {RSN_EXT_AUTH_MODE_SHARED_KEY, RSN_CIPHER_NONE},
  726. {RSN_EXT_AUTH_MODE_SHARED_KEY, RSN_CIPHER_WEP},
  727. {RSN_EXT_AUTH_MODE_WPA, RSN_CIPHER_TKIP},
  728. {RSN_EXT_AUTH_MODE_WPA, RSN_CIPHER_AES_CCMP},
  729. {RSN_EXT_AUTH_MODE_WPAPSK, RSN_CIPHER_TKIP},
  730. {RSN_EXT_AUTH_MODE_WPAPSK, RSN_CIPHER_AES_CCMP},
  731. {RSN_EXT_AUTH_MODE_WPANONE, RSN_CIPHER_NONE}, /* No encryption in IBSS mode */
  732. {RSN_EXT_AUTH_MODE_WPA2, RSN_CIPHER_TKIP},
  733. {RSN_EXT_AUTH_MODE_WPA2, RSN_CIPHER_AES_CCMP},
  734. {RSN_EXT_AUTH_MODE_WPA2PSK, RSN_CIPHER_TKIP},
  735. {RSN_EXT_AUTH_MODE_WPA2PSK, RSN_CIPHER_AES_CCMP}
  736. };
  737. /**
  738. *
  739. * admCtrl_getAuthEncrCapability - Get all supported pais of
  740. * authenticationmode/cipher suite
  741. *
  742. * \b Description:
  743. *
  744. * Returns all supported pais of authenticationmode/cipher suite
  745. *
  746. * \b ARGS:
  747. *
  748. * I - pAdmCtrl - context \n
  749. * I - authEncrCapability - ptr to list of auth.mode/cipher pairs \n
  750. *
  751. * \b RETURNS:
  752. *
  753. * OK on success, NOK on failure.
  754. *
  755. * \sa
  756. */
  757. TI_STATUS admCtrl_getAuthEncrCapability(admCtrl_t *pAdmCtrl,
  758. rsnAuthEncrCapability_t *authEncrCapability)
  759. {
  760. int i = 0;
  761. if(!authEncrCapability)
  762. return NOK;
  763. /* The current driver code version uses the above hardcoded list */
  764. /* of auth/encr pairs */
  765. authEncrCapability->NoOfAuthEncrPairSupported = MAX_AUTH_ENCR_PAIR;
  766. authEncrCapability->NoOfPMKIDs = PMKID_MAX_NUMBER;
  767. WLAN_REPORT_INFORMATION(pAdmCtrl->hReport, RSN_MODULE_LOG,
  768. ("admCtrl get AuthEncr capability: No. of auth/encr pairs = %d, No of PMKIDs = %d \n",
  769. authEncrCapability->NoOfAuthEncrPairSupported, authEncrCapability->NoOfPMKIDs));
  770. /* Copy the hardcoded table of the auth.mode/cipher type */
  771. for (i = 0; i < MAX_AUTH_ENCR_PAIR; i++)
  772. {
  773. authEncrCapability->authEncrPairs[i].authenticationMode =
  774. supportedAuthEncrPairs[i].authenticationMode;
  775. authEncrCapability->authEncrPairs[i].cipherSuite =
  776. supportedAuthEncrPairs[i].cipherSuite;
  777. WLAN_REPORT_INFORMATION(pAdmCtrl->hReport, RSN_MODULE_LOG,
  778. ("admCtrl get AuthEncr pair list: i = %d, auth mode = %d , cipher suite = %d \n", i,
  779. authEncrCapability->authEncrPairs[i].authenticationMode,
  780. authEncrCapability->authEncrPairs[i].cipherSuite));
  781. }
  782. return OK;
  783. }
  784. TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList)
  785. {
  786. return CONFIGURATION_NOT_VALID;
  787. }
  788. TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID *pmkIdList)
  789. {
  790. return CONFIGURATION_NOT_VALID;
  791. }
  792. TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl)
  793. {
  794. os_memoryZero(pAdmCtrl->hOs, (PVOID)&pAdmCtrl->pmkid_cache, sizeof(pmkid_cache_t));
  795. return OK;
  796. }
  797. TI_STATUS admCtrl_getWPAMixedModeSupport(admCtrl_t *pAdmCtrl, UINT32 *support)
  798. {
  799. if(pAdmCtrl->WPAMixedModeEnable)
  800. *support = ADMCTRL_WPA_OPTION_MAXVALUE;
  801. else
  802. *support = 0;
  803. return OK;
  804. }
  805. TI_STATUS admCtrl_getPromoteFlags(admCtrl_t *pAdmCtrl, UINT32 *WPAPromoteFlags)
  806. {
  807. *WPAPromoteFlags = pAdmCtrl->WPAPromoteFlags;
  808. return OK;
  809. }
  810. TI_STATUS admCtrl_setPromoteFlags(admCtrl_t *pAdmCtrl, UINT32 WPAPromoteFlags)
  811. {
  812. if(WPAPromoteFlags > ADMCTRL_WPA_OPTION_MAXVALUE)
  813. return NOK;
  814. if(!pAdmCtrl->WPAMixedModeEnable)
  815. return NOK;
  816. pAdmCtrl->WPAPromoteFlags = WPAPromoteFlags;
  817. return OK;
  818. }
  819. BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex)
  820. {
  821. return FALSE;
  822. }
  823. TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList)
  824. {
  825. return OK;
  826. }
  827. TI_STATUS admCtrl_nullGet802_1x_AkmExists (admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists)
  828. {
  829. *wpa_802_1x_AkmExists = FALSE;
  830. return OK;
  831. }
  832. /*-----------------------------------------------------------------------------
  833. Routine Name: admCtrl_notifyPreAuthStatus
  834. Routine Description: This routine is used to notify higher level application of the pre-authentication status
  835. Arguments: newStatus - pre authentication status
  836. Return Value:
  837. -----------------------------------------------------------------------------*/
  838. void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus)
  839. {
  840. UINT32 memBuff;
  841. memBuff = (UINT32) newStatus;
  842. EvHandlerSendEvent(pAdmCtrl->hEvHandler, IPC_EVENT_WPA2_PREAUTHENTICATION,
  843. (UINT8*)&memBuff, sizeof(UINT32));
  844. }
  845. #ifdef EXC_MODULE_INCLUDED
  846. /**
  847. *
  848. * admCtrl_setNetworkEap - Set current Network EAP Mode Status.
  849. *
  850. * \b Description:
  851. *
  852. * Set current Network EAP Mode Status..
  853. *
  854. * \b ARGS:
  855. *
  856. * I - pAdmCtrl - context \n
  857. * I - networkEap - Network EAP Mode \n
  858. *
  859. * \b RETURNS:
  860. *
  861. * OK on success, NOK on failure.
  862. *
  863. * \sa
  864. */
  865. TI_STATUS admCtrl_setNetworkEap(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP networkEap)
  866. {
  867. if (pAdmCtrl==NULL)
  868. return NOK;
  869. if (pAdmCtrl->networkEapMode == networkEap)
  870. {
  871. return OK;
  872. }
  873. pAdmCtrl->networkEapMode = networkEap;
  874. return OK;
  875. }
  876. /**
  877. *
  878. * admCtrl_getNetworkEap - Get current Network EAP Mode Status.
  879. *
  880. * \b Description:
  881. *
  882. * Get current Network EAP Mode Status.
  883. *
  884. * \b ARGS:
  885. *
  886. * I - pAdmCtrl - context \n
  887. * I - networkEap - Network EAP Mode \n
  888. *
  889. * \b RETURNS:
  890. *
  891. * OK on success, NOK on failure.
  892. *
  893. * \sa
  894. */
  895. TI_STATUS admCtrl_getNetworkEap(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP *networkEap)
  896. {
  897. if (pAdmCtrl==NULL)
  898. {
  899. return NOK;
  900. }
  901. switch (pAdmCtrl->networkEapMode)
  902. {
  903. case OS_EXC_NETWORK_EAP_OFF:
  904. *networkEap = OS_EXC_NETWORK_EAP_OFF;
  905. break;
  906. case OS_EXC_NETWORK_EAP_ON:
  907. case OS_EXC_NETWORK_EAP_ALLOWED:
  908. case OS_EXC_NETWORK_EAP_PREFERRED:
  909. *networkEap = OS_EXC_NETWORK_EAP_ON;
  910. break;
  911. default:
  912. return NOK;
  913. /* break; - unreachable */
  914. }
  915. return OK;
  916. }
  917. #endif /* EXC_MODULE_INCLUDED*/