Home | History | Annotate | Download | only in Connection_Managment
      1 /*
      2  * admCtrl.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 admCtrl.h
     35  *  \brief Admission control API
     36  *
     37  *  \see admCtrl.c
     38  */
     39 
     40 /****************************************************************************
     41  *                                                                          *
     42  *   MODULE:  Admission Control                                             *
     43  *   PURPOSE: Admission Control Module API                                  *
     44  *                                                                          *
     45  ****************************************************************************/
     46 
     47 #ifndef _ADM_CTRL_H_
     48 #define _ADM_CTRL_H_
     49 
     50 #include "rsnApi.h"
     51 #include "TWDriver.h"
     52 
     53 /* Constants */
     54 
     55 /* Enumerations */
     56 
     57 /* Typedefs */
     58 
     59 typedef struct _admCtrl_t   admCtrl_t;
     60 
     61 /* RSN admission control prototypes */
     62 
     63 typedef TI_STATUS (*admCtrl_setAuthSuite_t)(admCtrl_t *pAdmCtrl, EAuthSuite authSuite);
     64 
     65 typedef TI_STATUS (*admCtrl_getAuthSuite_t)(admCtrl_t *pAdmCtrl, EAuthSuite *pSuite);
     66 
     67 typedef TI_STATUS (*admCtrl_setNetworkMode_t)(admCtrl_t *pAdmCtrl, ERsnNetworkMode mode);
     68 
     69 typedef TI_STATUS (*admCtrl_setUcastCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite suite);
     70 
     71 typedef TI_STATUS (*admCtrl_setBcastCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite suite);
     72 
     73 typedef TI_STATUS (*admCtrl_getCipherSuite_t)(admCtrl_t *pAdmCtrl, ECipherSuite *pSuite);
     74 
     75 typedef TI_STATUS (*admCtrl_setKeyMngSuite_t)(admCtrl_t *pAdmCtrl, ERsnKeyMngSuite suite);
     76 
     77 typedef TI_STATUS (*admCtrl_setExtAuthMode_t)(admCtrl_t *pAdmCtrl, EExternalAuthMode extAuthMode);
     78 
     79 typedef TI_STATUS (*admCtrl_getExtAuthMode_t)(admCtrl_t *pAdmCtrl, EExternalAuthMode *pExtAuthMode);
     80 
     81 typedef TI_STATUS (*admCtrl_getInfoElement_t)(admCtrl_t *pAdmCtrl, TI_UINT8 *pIe, TI_UINT32 *pLength);
     82 
     83 typedef TI_STATUS (*admCtrl_setSite_t)(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 *pAssocIe, TI_UINT8 *pAssocIeLen);
     84 
     85 typedef TI_STATUS (*admCtrl_evalSite_t)(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TRsnSiteParams *pRsnSiteParams, TI_UINT32 *pEvaluation);
     86 
     87 typedef TI_STATUS (*admCtrl_setMixedMode_t)(admCtrl_t *pAdmCtrl, TI_BOOL mixedMode);
     88 
     89 typedef TI_STATUS (*admCtrl_getMixedMode_t)(admCtrl_t *pAdmCtrl, TI_BOOL *mixedMode);
     90 
     91 typedef TI_STATUS (*admCtrl_getAuthEncrCapability_t)(admCtrl_t *pAdmCtrl,
     92                                         rsnAuthEncrCapability_t   *authEncrCapability);
     93 
     94 typedef TI_STATUS (*admCtrl_setPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
     95 
     96 typedef TI_STATUS (*admCtrl_getPMKIDlist_t)(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
     97 
     98 typedef TI_STATUS (*admCtrl_resetPMKIDlist_t)(admCtrl_t *pAdmCtrl);
     99 
    100 typedef TI_STATUS (*admCtrl_sendPMKIDCandListAfterDelay_t)(admCtrl_t *pAdmCtrl, TI_UINT32 delay);
    101 
    102 typedef TI_STATUS (*admCtrl_setPromoteFlags_t)(admCtrl_t *pAdmCtrl, TI_UINT32 flags);
    103 
    104 typedef TI_STATUS (*admCtrl_getPromoteFlags_t)(admCtrl_t *pAdmCtrl, TI_UINT32 *flags);
    105 
    106 typedef TI_STATUS (*admCtrl_getWPAMixedModeSupport_t)(admCtrl_t *pAdmCtrl, TI_UINT32 *support);
    107 
    108 #ifdef XCC_MODULE_INCLUDED
    109 typedef TI_STATUS (*admCtrl_getNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_XCC_NETWORK_EAP *networkEap);
    110 
    111 typedef TI_STATUS (*admCtrl_setNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_XCC_NETWORK_EAP networkEap);
    112 #endif
    113 
    114 
    115 typedef TI_BOOL (*admCtrl_getPreAuthStatus_t)(admCtrl_t *pAdmCtrl, TMacAddr *givenAP, TI_UINT8 *cacheIndex);
    116 
    117 typedef TI_STATUS (*admCtrl_startPreAuth_t)(admCtrl_t *pAdmCtrl, TBssidList4PreAuth *pBssidList);
    118 
    119 typedef TI_STATUS (*admCtrl_get802_1x_AkmExists_t)(admCtrl_t *pAdmCtrl, TI_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_NONE  							0x00000000
    124 #define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_AUTH_MODE  	0x00000001
    125 #define ADMCTRL_WPA_OPTION_ENABLE_PROMOTE_CIPHER     	0x00000002
    126 
    127 #define ADMCTRL_WPA_OPTION_MAXVALUE                  	0x00000003
    128 
    129 
    130 /* Structures */
    131 
    132 /* PMKID cache structures                        */
    133 /* (PMKID cache used for WPA2 pre-authentication */
    134 
    135 #define PMKID_VALUE_SIZE  16
    136 typedef TI_UINT8 pmkidValue_t[PMKID_VALUE_SIZE];
    137 
    138 #define PMKID_MAX_NUMBER 16
    139 
    140 typedef struct
    141 {
    142    TMacAddr         bssId;
    143    pmkidValue_t     pmkId;
    144    TI_BOOL          preAuthenticate;
    145 
    146 } pmkidEntry_t;
    147 
    148 #define ADMCTRL_PMKID_CACHE_SIZE 32
    149 
    150 typedef struct
    151 {
    152    TSsid               ssid;
    153    TI_UINT8            entriesNumber;
    154    TI_UINT8            nextFreeEntry;
    155    pmkidEntry_t        pmkidTbl[ADMCTRL_PMKID_CACHE_SIZE];
    156 } pmkid_cache_t;
    157 
    158 
    159 
    160 /* Admission control object */
    161 struct _admCtrl_t
    162 {
    163     ERsnPaeRole             role;
    164     EAuthSuite              authSuite;
    165     ERsnNetworkMode         networkMode;
    166     EExternalAuthMode       externalAuthMode;
    167     ECipherSuite            unicastSuite;
    168     ECipherSuite            broadcastSuite;
    169     ERsnKeyMngSuite         keyMngSuite;
    170     TI_BOOL                 wpaAkmExists;
    171     TI_BOOL                 mixedMode;
    172     TI_UINT8                AP_IP_Address[4];
    173     TI_UINT16               replayCnt;
    174     TI_UINT8                aironetIeReserved[8];
    175     TI_BOOL                 encrInSw;
    176     TI_BOOL                 micInSw;
    177     TI_BOOL                 setSiteFirst;
    178 #ifdef XCC_MODULE_INCLUDED
    179     OS_XCC_NETWORK_EAP      networkEapMode;
    180 #endif
    181     TI_BOOL                 XCCSupport;
    182     TI_BOOL                 proxyArpEnabled;
    183 
    184     TI_BOOL                 WPAMixedModeEnable;
    185     TI_UINT32               WPAPromoteFlags;
    186 
    187     TI_BOOL                 preAuthSupport;
    188     TI_UINT32               preAuthTimeout;
    189     TI_UINT8                MaxNumOfPMKIDs;
    190     pmkid_cache_t           pmkid_cache;
    191 
    192     struct _rsn_t           *pRsn;
    193     TI_HANDLE               hMlme;
    194     TI_HANDLE               hRx;
    195     TI_HANDLE               hReport;
    196     TI_HANDLE               hOs;
    197     TI_HANDLE               hXCCMngr;
    198     TI_HANDLE               hPowerMgr;
    199     TI_HANDLE               hEvHandler;
    200     TI_HANDLE               hTimer;
    201     TI_HANDLE               hCurrBss;
    202     TI_HANDLE               hSme;
    203 
    204 
    205     admCtrl_setAuthSuite_t              setAuthSuite;
    206     admCtrl_getAuthSuite_t              getAuthSuite;
    207     admCtrl_setNetworkMode_t            setNetworkMode;
    208     admCtrl_setUcastCipherSuite_t       setUcastSuite;
    209     admCtrl_setBcastCipherSuite_t       setBcastSuite;
    210     admCtrl_setExtAuthMode_t            setExtAuthMode;
    211     admCtrl_getExtAuthMode_t            getExtAuthMode;
    212     admCtrl_getCipherSuite_t            getCipherSuite;
    213     admCtrl_setKeyMngSuite_t            setKeyMngSuite;
    214     admCtrl_setMixedMode_t              setMixedMode;
    215     admCtrl_getMixedMode_t              getMixedMode;
    216     admCtrl_getInfoElement_t            getInfoElement;
    217     admCtrl_setSite_t                   setSite;
    218     admCtrl_evalSite_t                  evalSite;
    219     admCtrl_getAuthEncrCapability_t     getAuthEncrCap;
    220     admCtrl_setPMKIDlist_t              setPmkidList;
    221     admCtrl_getPMKIDlist_t              getPmkidList;
    222     admCtrl_resetPMKIDlist_t            resetPmkidList;
    223     admCtrl_setPromoteFlags_t           setPromoteFlags;
    224     admCtrl_getPromoteFlags_t           getPromoteFlags;
    225     admCtrl_getWPAMixedModeSupport_t    getWPAMixedModeSupport;
    226     admCtrl_get802_1x_AkmExists_t       get802_1x_AkmExists;
    227 
    228 
    229 #ifdef XCC_MODULE_INCLUDED
    230     admCtrl_getNetworkEap_t         getNetworkEap;
    231     admCtrl_setNetworkEap_t         setNetworkEap;
    232 #endif
    233 
    234     admCtrl_getPreAuthStatus_t      getPreAuthStatus;
    235     admCtrl_startPreAuth_t          startPreAuth;
    236 
    237     void                            *hPreAuthTimerWpa2;
    238     TI_UINT8                           numberOfPreAuthCandidates;
    239 };
    240 
    241 /* External data definitions */
    242 
    243 /* External functions definitions */
    244 
    245 /* Function prototypes */
    246 
    247 admCtrl_t* admCtrl_create(TI_HANDLE hOs);
    248 
    249 TI_STATUS admCtrl_config (TI_HANDLE hAdmCtrl,
    250                           TI_HANDLE hMlme,
    251                           TI_HANDLE hRx,
    252                           TI_HANDLE hReport,
    253                           TI_HANDLE hOs,
    254                           struct _rsn_t *pRsn,
    255                           TI_HANDLE hXCCMngr,
    256                           TI_HANDLE hPowerMgr,
    257                           TI_HANDLE hEvHandler,
    258                           TI_HANDLE hTimer,
    259                           TI_HANDLE hCurrBss,
    260                           TRsnInitParams *pInitParam);
    261 
    262 TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl);
    263 
    264 TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl);
    265 
    266 TI_STATUS admCtrlWpa_config(admCtrl_t *pAdmCtrl);
    267 
    268 TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, TRsnData *pRsnData, TI_UINT8 **pIe, TI_UINT8 IeId);
    269 
    270 TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl);
    271 
    272 TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
    273 
    274 TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
    275 
    276 TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl);
    277 
    278 TI_BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, TMacAddr *givenAP, TI_UINT8 *cacheIndex);
    279 
    280 TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, TBssidList4PreAuth *pBssidList);
    281 
    282 TI_STATUS admCtrl_nullGet802_1x_AkmExists(admCtrl_t *pAdmCtrl, TI_BOOL *wpa_802_1x_AkmExists);
    283 
    284 void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus);
    285 
    286 #endif /*  _ADM_H_*/
    287 
    288