Home | History | Annotate | Download | only in inc
      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 
     59 typedef struct _admCtrl_t	admCtrl_t;
     60 
     61 /* RSN admission control prototypes */
     62 
     63 typedef TI_STATUS (*admCtrl_setAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e authSuite);
     64 
     65 typedef TI_STATUS (*admCtrl_getAuthSuite_t)(admCtrl_t *pAdmCtrl, authSuite_e *pSuite);
     66 
     67 typedef TI_STATUS (*admCtrl_setNetworkMode_t)(admCtrl_t *pAdmCtrl, rsn_networkMode_t mode);
     68 
     69 typedef TI_STATUS (*admCtrl_setUcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
     70 
     71 typedef TI_STATUS (*admCtrl_setBcastCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e suite);
     72 
     73 typedef TI_STATUS (*admCtrl_getCipherSuite_t)(admCtrl_t *pAdmCtrl, cipherSuite_e *pSuite);
     74 
     75 typedef TI_STATUS (*admCtrl_setKeyMngSuite_t)(admCtrl_t *pAdmCtrl, rsn_keyMngSuite_e suite);
     76 
     77 typedef TI_STATUS (*admCtrl_setExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e extAuthMode);
     78 
     79 typedef TI_STATUS (*admCtrl_getExtAuthMode_t)(admCtrl_t *pAdmCtrl, externalAuthMode_e *pExtAuthMode);
     80 
     81 typedef TI_STATUS (*admCtrl_getInfoElement_t)(admCtrl_t *pAdmCtrl, UINT8 *pIe, UINT8 *pLength);
     82 
     83 typedef TI_STATUS (*admCtrl_setSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 *pAssocIe, UINT8 *pAssocIeLen);
     84 
     85 typedef TI_STATUS (*admCtrl_evalSite_t)(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, bssType_e bssType, UINT32 *pEvaluation);
     86 
     87 typedef TI_STATUS (*admCtrl_setMixedMode_t)(admCtrl_t *pAdmCtrl, BOOL mixedMode);
     88 
     89 typedef TI_STATUS (*admCtrl_getMixedMode_t)(admCtrl_t *pAdmCtrl, 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, UINT32 delay);
    101 
    102 typedef TI_STATUS (*admCtrl_setPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 flags);
    103 
    104 typedef TI_STATUS (*admCtrl_getPromoteFlags_t)(admCtrl_t *pAdmCtrl, UINT32 *flags);
    105 
    106 typedef TI_STATUS (*admCtrl_getWPAMixedModeSupport_t)(admCtrl_t *pAdmCtrl, UINT32 *support);
    107 
    108 #ifdef EXC_MODULE_INCLUDED
    109 typedef TI_STATUS (*admCtrl_getNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP *networkEap);
    110 
    111 typedef TI_STATUS (*admCtrl_setNetworkEap_t)(admCtrl_t *pAdmCtrl, OS_EXC_NETWORK_EAP networkEap);
    112 #endif
    113 
    114 
    115 typedef BOOL (*admCtrl_getPreAuthStatus_t)(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex);
    116 
    117 typedef TI_STATUS (*admCtrl_startPreAuth_t)(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList);
    118 
    119 typedef 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
    135 typedef UINT8 pmkidValue_t[PMKID_VALUE_SIZE];
    136 
    137 #define PMKID_MAX_NUMBER 16
    138 
    139 typedef 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 
    149 typedef 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 */
    160 struct _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 
    243 admCtrl_t* admCtrl_create(TI_HANDLE hOs);
    244 
    245 TI_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 
    256 TI_STATUS admCtrl_unload(admCtrl_t *pAdmCtrl);
    257 
    258 TI_STATUS admCtrlNone_config(admCtrl_t *pAdmCtrl);
    259 
    260 TI_STATUS admCtrlWpa_config(admCtrl_t *pAdmCtrl);
    261 
    262 TI_STATUS admCtrl_parseIe(admCtrl_t *pAdmCtrl, rsnData_t *pRsnData, UINT8 **pIe, UINT8 IeId);
    263 
    264 TI_STATUS admCtrl_subConfig(TI_HANDLE hAdmCtrl);
    265 
    266 TI_STATUS admCtrl_nullSetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
    267 
    268 TI_STATUS admCtrl_nullGetPMKIDlist(admCtrl_t *pAdmCtrl, OS_802_11_PMKID  *pmkIdList);
    269 
    270 TI_STATUS admCtrl_resetPMKIDlist(admCtrl_t *pAdmCtrl);
    271 
    272 BOOL admCtrl_nullGetPreAuthStatus(admCtrl_t *pAdmCtrl, macAddress_t *givenAP, UINT8 *cacheIndex);
    273 
    274 TI_STATUS admCtrl_nullStartPreAuth(admCtrl_t *pAdmCtrl, bssidList4PreAuth_t *pBssidList);
    275 
    276 TI_STATUS admCtrl_nullGet802_1x_AkmExists(admCtrl_t *pAdmCtrl, BOOL *wpa_802_1x_AkmExists);
    277 
    278 void admCtrl_notifyPreAuthStatus (admCtrl_t *pAdmCtrl, preAuthStatusEvent_e newStatus);
    279 
    280 #endif /*  _ADM_H_*/
    281 
    282