• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * roamingMngrApi.h
3  *
4  * Copyright(c) 1998 - 2010 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 roamingMngrApi.h
35  *  \brief Internal Roaming Manager API
36  *
37  *  \see roamingMngr.c
38  */
39 
40 /****************************************************************************
41  *                                                                          *
42  *   MODULE:  Roaming Manager	    		                                *
43  *   PURPOSE: Roaming Manager Module API                              		*
44  *                                                                          *
45  ****************************************************************************/
46 
47 #ifndef _ROAMING_MNGR_API_H_
48 #define _ROAMING_MNGR_API_H_
49 
50 /*#include "802_11Defs.h"*/
51 #include "osApi.h"
52 #include "paramOut.h"
53 #include "scanMngrApi.h"
54 #include "bssTypes.h"
55 #include "DrvMainModules.h"
56 #include "apConnApi.h"
57 /*-----------*/
58 /* Constants */
59 /*-----------*/
60 
61 #define MAX_ROAMING_TRIGGERS  ROAMING_TRIGGER_LAST
62 
63 
64 /*--------------*/
65 /* Enumerations */
66 /*--------------*/
67 
68 /* Roaming Trigger groups, according to Roaming Triggers */
69 typedef enum
70 {
71     ROAMING_TRIGGER_BG_SCAN_GROUP 		= ROAMING_TRIGGER_NORMAL_QUALITY_FOR_BG_SCAN,
72     ROAMING_TRIGGER_LOW_QUALITY_GROUP 	= ROAMING_TRIGGER_MAX_TX_RETRIES,
73     ROAMING_TRIGGER_FAST_CONNECT_GROUP 	= ROAMING_TRIGGER_SWITCH_CHANNEL,
74     ROAMING_TRIGGER_FULL_CONNECT_GROUP 	= ROAMING_TRIGGER_SECURITY_ATTACK
75 } roamingMngr_connectTypeGroup_e;
76 
77 
78 /*----------*/
79 /* Typedefs */
80 /*----------*/
81 
82 /* scan types */
83 typedef enum
84 {
85 /*	0	*/	ROAMING_NO_SCAN,
86 /*	1	*/	ROAMING_PARTIAL_SCAN,
87 /*	2	*/	ROAMING_PARTIAL_SCAN_RETRY,
88 /*	3	*/	ROAMING_FULL_SCAN,
89 /*	4	*/	ROAMING_FULL_SCAN_RETRY
90 
91 } scan4RoamingType_e;
92 
93 typedef struct
94 {
95     TI_UINT8   preAuthBSSList[MAX_SIZE_OF_BSS_TRACK_LIST];
96     TI_UINT8   numOfPreAuthBSS;
97     TI_UINT8   neighborBSSList[MAX_SIZE_OF_BSS_TRACK_LIST];
98     TI_UINT8   numOfNeighborBSS;
99     TI_UINT8   regularBSSList[MAX_SIZE_OF_BSS_TRACK_LIST];
100     TI_UINT8   numOfRegularBSS;
101 } listOfCandidateAps_t;
102 
103 
104 struct _roamingMngr_t
105 {
106     /*** Roaming manager parameters that can be configured externally ***/
107     roamingMngrConfig_t         	roamingMngrConfig;
108     roamingMngrThresholdsConfig_t   roamingMngrThresholdsConfig;
109     TI_UINT32                      	lowPassFilterRoamingAttemptInMsec;
110 
111     /*** Internal roaming parameters ***/
112     apConn_roamingTrigger_e     	roamingTrigger;				/* the roaming trigger type */
113     TI_UINT32*                      pCurrentState;				/* pointer to Roaming Generic SM current state */
114     TI_BOOL                        	maskRoamingEvents;			/* Indicate if a trigger is already in process, and therefore the
115 																	other triggers will be ignored */
116     TI_UINT32                      	lowQualityTriggerTimestamp;	/* TS to filter Too many low Quality roaming triggers */
117     scan4RoamingType_e          	scanType; 					/* the scan type performed for Roaming */
118     bssList_t                   	*pListOfAPs;				/* list of BSS received from Scan Manager */
119     TI_BOOL                        	neighborApsExist;			/* Indicating if Neighbor APs exist */
120     listOfCandidateAps_t        	listOfCandidateAps;			/* a list of the candiadte APs indexes in pListOfAPs according to
121 																	neighbor APs, pre-auth APs and other APs */
122     TI_UINT8                       	candidateApIndex;			/* The current candidate AP's index to Roam to */
123     TI_BOOL                        	handoverWasPerformed;		/* Indicates whether at least one handover was performed */
124     apConn_staCapabilities_t    	staCapabilities;
125     	/* The station capabilities for the current Connection */
126     TI_HANDLE          	            hRoamingSm;				    /* Roaming manager SM handle */
127     TI_INT8**                       RoamStateDescription;       /* Roaming states index-name keyValue */
128     TI_INT8**                       RoamEventDescription;       /* Roaming Events index-name keyValue */
129 
130 
131     /* Roaming manager handles to other objects */
132     TI_HANDLE                   	hReport;
133     TI_HANDLE                   	hOs;
134     TI_HANDLE                   	hScanMngr;
135     TI_HANDLE                   	hAPConnection;
136     TI_HANDLE                   	hTWD;
137     TI_HANDLE                   	hEvHandler;
138     TI_HANDLE                   	hCurrBss;
139 
140 #ifdef TI_DBG
141     /* Debug trace for Roaming statistics */
142     TI_UINT32                      roamingTriggerEvents[MAX_ROAMING_TRIGGERS];
143     TI_UINT32                      roamingHandoverEvents[MAX_ROAMING_TRIGGERS];
144     TI_UINT32                      roamingSuccesfulHandoverNum;
145     TI_UINT32                      roamingFailedHandoverNum;
146     TI_UINT32                      roamingTriggerTimestamp;
147     TI_UINT32                      roamingHandoverStartedTimestamp;
148     TI_UINT32                      roamingHandoverCompletedTimestamp;
149     TI_UINT32                      roamingAverageSuccHandoverDuration;
150     TI_UINT32                      roamingAverageRoamingDuration;
151 #endif
152 
153     TI_UINT8	                   RoamingOperationalMode; /* 0 - manual, 1 - auto*/
154     TI_UINT8                       bSendTspecInReassPkt;
155     TargetAp_t                     targetAP;               /* holds the AP to connect with in manual mode */
156 }; /* _roamingMngr_t */
157 
158 
159 
160 typedef struct _roamingMngr_t   roamingMngr_t;
161 
162 /*------------*/
163 /* Structures */
164 /*------------*/
165 
166 /*---------------------------*/
167 /* External data definitions */
168 /*---------------------------*/
169 
170 /*--------------------------------*/
171 /* External functions definitions */
172 /*--------------------------------*/
173 
174 /*----------------------------*/
175 /* Global Function prototypes */
176 /*----------------------------*/
177 
178 /**
179  * \brief Create the Roaming Manager context
180  *
181  * \param  hOs	  	- OS handler
182  * \return	A pointer to the roaming manager handler on success,
183  * 			NULL on failure (unable to allocate memory or other system resource)
184  *
185  * \par Description
186  * Creates the Roaming Manager context: \n
187  * Allocate control block for preconfigured parameters and internal variables, create state-machine
188  *
189  * \sa	roamingMngr_unload
190  */
191 TI_HANDLE roamingMngr_create(TI_HANDLE hOs);
192 /**
193  * \brief Configure the Roaming Manager module
194  *
195  * \param  pStadHandles	  	- The driver modules handles
196  * \return void
197  *
198  * \par Description
199  * Configure the Roaming Manager module to do the following:
200  * - Initialize the Station broadcast key State Machine matrix
201  * - Store handlers of other modules (report module, Scan Manager, AP connection, TWD)
202  * - Initialize the roaming manager internal variables
203  * - Configure the roaming manager state-machine
204  *
205  * \sa
206  */
207 void roamingMngr_init (TStadHandlesList *pStadHandles);
208 /**
209  * \brief Unloads the Roaming Manager Module
210  *
211  * \param  hRoamingMngr - Roaming Manager handler
212  * \return TI_OK on success or TI_NOK on failure
213  *
214  * \par Description
215  * Unloads the components of the Roaming Manager module from memory:	\n
216  * releases the allocation for the state-machine and internal variables
217  *
218  * \sa	roamingMngr_create
219  */
220 
221 TI_STATUS roamingMngr_unload(TI_HANDLE hRoamingMngr);
222 /**
223  * \brief Get Roaming Manager parameters from the roamingMngr SM
224  *
225  * \param  hRoamingMngr - Roaming Manager handler
226  * \param  pParam 		- Output Parameters
227  * \return TI_OK on success or TI_NOK on failure
228  *
229  * \par Description
230  *
231  * \sa
232  */
233 TI_STATUS roamingMngr_getParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam);
234 /**
235  * \brief Set Roaming Manager Module parameters to the roamingMngr SM
236  *
237  * \param  hRoamingMngr - Roaming Manager handler
238  * \param  pParam 		- Input Parameters
239  * \return TI_OK on success or TI_NOK on failure
240  *
241  * \par Description
242  *
243  * \sa
244  */
245 TI_STATUS roamingMngr_setParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam);
246 /**
247  * \brief  Indicates Roaming Manager that an Immediate Scan was completed
248  *			and provides it with the Scan result
249  *
250  * \param  hRoamingMngr  	- Handle to the roaming manager
251  * \param  scanCmpltStatus	- Scan complete reason
252  * \return TI_OK on success or TI_NOK on failure
253  *
254  * \par Description
255  * This procedure is called when the Scan Manager completed Immediate Scan for Roaming.
256  * It performs the following:
257  * - Partial or Full scan
258  * - Re-try Partial or Full scan if the previous scan failed
259  * - Full scan if the previous partial scan didn't get any APs
260  * - Fail event if all the Scans failed
261  *
262  * Algorithm description:
263  * - If Scan Complete is OK:
264  * -------------------------
265  *		- If APs found:
266  * 			- starts Selection
267  *		- If NO APs found:
268  * 			- If Previous Scan was Partial:
269  *				- Perform Full Scan
270  *			- If Previous Scan was Full:
271  *				- Report Error
272  *
273  * - If Scan Complete is NOT OK:
274  * -----------------------------
275  * - Re-Try Scan
276  *		- If APs found:
277  * 			- starts Selection
278  * 		- If NO APs found:
279  *			- Re-Try Scan with current Scan Type (Partial/Full Scan Retry or No Scan)
280  *
281  * \sa
282  */
283 TI_STATUS roamingMngr_immediateScanComplete(TI_HANDLE hRoamingMngr, scan_mngrResultStatus_e scanCmpltStatus);
284 /**
285  * \brief  Indicates that a new BSSID is added to the BSS table
286  *
287  * \param  hRoamingMngr  	- Handle to the roaming manager
288  * \param  newBss_entry	  	- List of BSSIDs that have been found
289  * \return TI_OK on success or TI_NOK on failure
290  *
291  * \par Description
292  * Indicates that a new BSSID is added to the BSS table (Called by the Scan Manager when new BSSID was found).
293  * This function triggers preauthentication to the new BSS.
294  *
295  * \sa
296  */
297 TI_STATUS roamingMngr_updateNewBssList(TI_HANDLE hRoamingMngr, bssList_t *newBss_entry);
298 
299 
300 
301 /* All functions below added by Lior*/
302 
303 TI_STATUS roamingMngr_setDefaults (TI_HANDLE hRoamingMngr, TRoamScanMngrInitParams *pInitParam);
304 TI_STATUS roamingMngr_setBssLossThreshold (TI_HANDLE hRoamingMngr, TI_UINT32 uNumOfBeacons, TI_UINT16 uClientID);
305 TI_STATUS roamingMngr_connect(TI_HANDLE hRoamingMngr, TargetAp_t* pTargetAp);
306 TI_STATUS roamingMngr_startImmediateScan(TI_HANDLE hRoamingMngr, channelList_t *pChannelList);
307 TI_STATUS roamingMngr_stopImmediateScan(TI_HANDLE hRoamingMngr);
308 TI_STATUS roamingMngr_immediateScanByAppComplete(TI_HANDLE hRoamingMngr, scan_mngrResultStatus_e scanCmpltStatus);
309 
310 TI_STATUS roamingMngr_smEvent(TI_UINT8 event, void* data);
311 void roamingMngr_smStopWhileScanning(void *pData);
312 void roamingMngr_smStop(void *pData);
313 void roamingMngr_smUnexpected(void *pData);
314 void roamingMngr_smNop(void *pData);
315 
316 
317 #endif /*  _ROAMING_MNGR_API_H_*/
318 
319