164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file admCtrlWpa2.h
264064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief Admission control header file for WPA2
364064216a8433360745f69edddce19a606659163The Android Open Source Project *
464064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see admCtrl.c and admCtrlWpa2.c
564064216a8433360745f69edddce19a606659163The Android Open Source Project */
664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
764064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
4064064216a8433360745f69edddce19a606659163The Android Open Source Project
4164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
4264064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
4364064216a8433360745f69edddce19a606659163The Android Open Source Project *   MODULE:  Admission Control                                             *
4464064216a8433360745f69edddce19a606659163The Android Open Source Project *   PURPOSE: Admission Control Header file for WPA2                        *
4564064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
4664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
4764064216a8433360745f69edddce19a606659163The Android Open Source Project
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _ADM_CTRL_WPA2_H_
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#define _ADM_CTRL_WPA2_H_
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project
5264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */
5364064216a8433360745f69edddce19a606659163The Android Open Source Project
5464064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */
5564064216a8433360745f69edddce19a606659163The Android Open Source Project
5664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */
5764064216a8433360745f69edddce19a606659163The Android Open Source Project
5864064216a8433360745f69edddce19a606659163The Android Open Source Project/* WPA2 configuration parameters:                                       */
5964064216a8433360745f69edddce19a606659163The Android Open Source Project/* defined here only for debugging purposes; should be moved from here  */
6064064216a8433360745f69edddce19a606659163The Android Open Source Project
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PRE_AUTHENTICATION_SUPPORT 1
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PMKID_CACHE_SIZE           32
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_CANDIDATE_LIST_MAX_SIZE    16
6464064216a8433360745f69edddce19a606659163The Android Open Source Project
6564064216a8433360745f69edddce19a606659163The Android Open Source Project/* RSN admission control prototypes */
6664064216a8433360745f69edddce19a606659163The Android Open Source Project
6764064216a8433360745f69edddce19a606659163The Android Open Source Project
6864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */
6964064216a8433360745f69edddce19a606659163The Android Open Source Project
7064064216a8433360745f69edddce19a606659163The Android Open Source Project
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_WPA2_UNICAST_SUITES     (RSN_CIPHER_WEP104+1)
7364064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_WPA2_KEY_MNG_SUITES     (RSN_KEY_MNG_EXC+1)
7464064216a8433360745f69edddce19a606659163The Android Open Source Project
7564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Cipher suites for group key sent in RSN IE are: WEP40, WEP104, TKIP, CCCMP */
7664064216a8433360745f69edddce19a606659163The Android Open Source Project#define GRP_CIPHER_MAXNO_IN_RSNIE         4
7764064216a8433360745f69edddce19a606659163The Android Open Source Project
7864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Cipher suites for unicast key sent in RSN IE are TKIP, CCMP, "use Group key"*/
7964064216a8433360745f69edddce19a606659163The Android Open Source Project#define UNICAST_CIPHER_MAXNO_IN_RSNIE     3
8064064216a8433360745f69edddce19a606659163The Android Open Source Project
8164064216a8433360745f69edddce19a606659163The Android Open Source Project/* OUIs for cipher suites and appropriated values of cipherSuite_e (paramout.h file)
8264064216a8433360745f69edddce19a606659163The Android Open Source Project *
8364064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-0   Use group cipher suite     RSN_CIPHER_NONE
8464064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-1   WEP-40                     RSN_CIPHER_WEP
8564064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-2   TKIP                       RSN_CIPHER_TKIP
8664064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-3   Reserved                   RSN_CIPHER_WRAP   not used for WPA2
8764064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-4   4                          RSN_CIPHER_CCMP
8864064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC-5   WEP-104                    RSN_CIPHER_WEP104
8964064216a8433360745f69edddce19a606659163The Android Open Source Project *   00-0F-AC 6   reserved 6 to 255          RSN_CIPHER_CKIP  - not used for WPA2
9064064216a8433360745f69edddce19a606659163The Android Open Source Project *
9164064216a8433360745f69edddce19a606659163The Android Open Source Project */
9264064216a8433360745f69edddce19a606659163The Android Open Source Project
9364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Key management suites (Authentication and Key Management Protocol - AKMP)  */
9464064216a8433360745f69edddce19a606659163The Android Open Source Project/* received in RSN IE                                                         */
9564064216a8433360745f69edddce19a606659163The Android Open Source Project#define KEY_MGMT_SUITE_MAXNO_IN_RSN_IE  2
9664064216a8433360745f69edddce19a606659163The Android Open Source Project
9764064216a8433360745f69edddce19a606659163The Android Open Source Project/* OUIs for key management
9864064216a8433360745f69edddce19a606659163The Android Open Source Project*
9964064216a8433360745f69edddce19a606659163The Android Open Source Project*   00-0F-AC-00  Reserved
10064064216a8433360745f69edddce19a606659163The Android Open Source Project*   00-0F-AC-01  802.1X
10164064216a8433360745f69edddce19a606659163The Android Open Source Project*   00-0F-AC-02  PSK
10264064216a8433360745f69edddce19a606659163The Android Open Source Project*   00-0F-AC-03   reserved from 3 to 255
10364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
10464064216a8433360745f69edddce19a606659163The Android Open Source Project
10564064216a8433360745f69edddce19a606659163The Android Open Source Project/* WPA2 key management suites */
10664064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_KEY_MNG_NONE             0
10764064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_KEY_MNG_801_1X           1
10864064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_KEY_MNG_PSK_801_1X       2
10964064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_KEY_MNG_CCKM			 3
11064064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_KEY_MNG_NA               4
11164064216a8433360745f69edddce19a606659163The Android Open Source Project
11264064216a8433360745f69edddce19a606659163The Android Open Source Project
11364064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_OUI_MAX_VERSION           0x1
11464064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_OUI_DEF_TYPE              0x1
11564064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_OUI_MAX_TYPE              0x2
11664064216a8433360745f69edddce19a606659163The Android Open Source Project
11764064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PRE_AUTH_CAPABILITY_MASK               0x0001   /* bit 0 */
11864064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PRE_AUTH_CAPABILITY_SHIFT              0
11964064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_GROUP_4_UNICAST_CAPABILITY_MASK        0x0002   /* bit 1 No Pairwise */
12064064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_GROUP_4_UNICAST_CAPABILITY_SHIFT        1
12164064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PTK_REPLAY_COUNTERS_CAPABILITY_MASK    0x000c   /* bit 2 and 3 */
12264064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_PTK_REPLAY_COUNTERS_CAPABILITY_SHIFT   2
12364064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_GTK_REPLAY_COUNTERS_CAPABILITY_MASK    0x0030   /* bit 4 and 5 */
12464064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_GTK_REPLAY_COUNTERS_CAPABILITY_SHIFT   4
12564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                             /* bit 6 - 15 - reserved */
12664064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_MIN_LENGTH                  4
12764064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_GROUP_SUITE_LENGTH          8
12864064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_MIN_PAIRWISE_SUITE_LENGTH   14
12964064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_MIN_DEFAULT_LENGTH          24
13064064216a8433360745f69edddce19a606659163The Android Open Source Project#define WPA2_IE_MIN_KEY_MNG_SUITE_LENGTH(pairwiseCnt) (10+4*pairwiseCnt)
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project
13364064216a8433360745f69edddce19a606659163The Android Open Source Project
13464064216a8433360745f69edddce19a606659163The Android Open Source Project
13564064216a8433360745f69edddce19a606659163The Android Open Source Project/* WPA2 IE (RSN IE) packet structure                                          */
13664064216a8433360745f69edddce19a606659163The Android Open Source Project/* This structure is used for outgoing packets, i.e. for association request  */
13764064216a8433360745f69edddce19a606659163The Android Open Source Project/* For incoming packets (Beacon and Probe response from an AP) stucture of    */
13864064216a8433360745f69edddce19a606659163The Android Open Source Project/* dot11_RSN_t type is used as more common stucture                           */
13964064216a8433360745f69edddce19a606659163The Android Open Source ProjectPACKED_STRUCT( wpa2IePacket_t,
14064064216a8433360745f69edddce19a606659163The Android Open Source Project
14164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               elementid;           /* WPA2 IE (RSN IE) id is 0x30 */
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               length;
14364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              version;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               groupSuite[4];       /* OUI for broadcast suite */
14564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              pairwiseSuiteCnt;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               pairwiseSuite[4];    /* OUI for 1 unicast suite */
14764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              authKeyMngSuiteCnt;
14864064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               authKeyMngSuite[4];  /* OUI for 1 key mgmt suite */
14964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              capabilities;
15064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              pmkIdCnt;            /* only one PMKID is supported per AP */
15164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               pmkId[PMKID_VALUE_SIZE];
15264064216a8433360745f69edddce19a606659163The Android Open Source Project);
15364064216a8433360745f69edddce19a606659163The Android Open Source Project
15464064216a8433360745f69edddce19a606659163The Android Open Source Project
15564064216a8433360745f69edddce19a606659163The Android Open Source Project/* WPA2 data parsed from RSN info element */
15664064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
15764064216a8433360745f69edddce19a606659163The Android Open Source Project{
15864064216a8433360745f69edddce19a606659163The Android Open Source Project
15964064216a8433360745f69edddce19a606659163The Android Open Source Project    cipherSuite_e       broadcastSuite;
16064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              unicastSuiteCnt;
16164064216a8433360745f69edddce19a606659163The Android Open Source Project    cipherSuite_e       unicastSuite[MAX_WPA2_UNICAST_SUITES];
16264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              KeyMngSuiteCnt;
16364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               KeyMngSuite[MAX_WPA2_KEY_MNG_SUITES];
16464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               preAuthentication;
16564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               bcastForUnicatst;
16664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               ptkReplayCounters;
16764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               gtkReplayCounters;
16864064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16              pmkIdCnt;
16964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               pmkId[PMKID_VALUE_SIZE];
17064064216a8433360745f69edddce19a606659163The Android Open Source Project} wpa2IeData_t;
17164064216a8433360745f69edddce19a606659163The Android Open Source Project
17264064216a8433360745f69edddce19a606659163The Android Open Source Project
17364064216a8433360745f69edddce19a606659163The Android Open Source Project
17464064216a8433360745f69edddce19a606659163The Android Open Source Project/* External data definitions */
17564064216a8433360745f69edddce19a606659163The Android Open Source Project
17664064216a8433360745f69edddce19a606659163The Android Open Source Project/* External functions definitions */
17764064216a8433360745f69edddce19a606659163The Android Open Source Project
17864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Function prototypes */
17964064216a8433360745f69edddce19a606659163The Android Open Source Project
18064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS admCtrlWpa2_config(admCtrl_t *pAdmCtrl);
18164064216a8433360745f69edddce19a606659163The Android Open Source Project
18264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS admCtrlWpa2_getInfoElement(admCtrl_t *pAdmCtrl, UINT8 *pIe, UINT8 *pLength);
18364064216a8433360745f69edddce19a606659163The Android Open Source Project
18464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS admCtrlWpa2_setSite(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 *pAssocIe, UINT8 *pAssocIeLen);
18564064216a8433360745f69edddce19a606659163The Android Open Source Project
18664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS admCtrlWpa2_evalSite(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, bssType_e bssType, UINT32 *pEvaluation);
18764064216a8433360745f69edddce19a606659163The Android Open Source Project
18864064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid admCtrlWpa2_preAuthTimerExpire(TI_HANDLE hadmCtrl);
18964064216a8433360745f69edddce19a606659163The Android Open Source Project
19064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /*  _ADM_CTRL_WPA_H_*/
191