1 /*
2 * smeDebug.c
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 smeDbg.c
35 * \brief This file include the SME debug module implementation
36 * \
37 * \date 13-February-2006
38 */
39
40 #include "smePrivate.h"
41 #include "smeDebug.h"
42 #include "report.h"
43
44 void printSmeDbgFunctions (void);
45 void sme_dbgPrintObject (TI_HANDLE hSme);
46 void sme_printStats (TI_HANDLE hSme);
47 void sme_resetStats(TI_HANDLE hSme);
48 void sme_printBssidList(TI_HANDLE hSme);
49
50 #define CHAN_FREQ_TABLE_SIZE (sizeof(ChanFreq) / sizeof(struct CHAN_FREQ))
51
52 struct CHAN_FREQ {
53 unsigned char chan;
54 unsigned long freq;
55 } ChanFreq[] = {
56 {1,2412000}, {2,2417000}, {3,2422000}, {4,2427000},
57 {5,2432000}, {6,2437000}, {7,2442000}, {8,2447000},
58 {9,2452000},
59 {10,2457000}, {11,2462000}, {12,2467000}, {13,2472000},
60 {14,2484000}, {36,5180000}, {40,5200000}, {44,5220000},
61 {48,5240000}, {52,5260000}, {56,5280000}, {60,5300000},
62 {64,5320000},
63 {100,5500000}, {104,5520000}, {108,5540000}, {112,5560000},
64 {116,5580000}, {120,5600000}, {124,5620000}, {128,5640000},
65 {132,5660000}, {136,5680000}, {140,5700000}, {149,5745000},
66 {153,5765000}, {157,5785000}, {161,5805000} };
67
68 TI_UINT32 scanResultTable_CalculateBssidListSize (TI_HANDLE hScanResultTable, TI_BOOL bAllVarIes);
69 TI_STATUS scanResultTable_GetBssidList (TI_HANDLE hScanResultTable,
70 OS_802_11_BSSID_LIST_EX *pBssidList,
71 TI_UINT32 *pLength,
72 TI_BOOL bAllVarIes);
73
74 /**
75 * \fn smeDebugFunction
76 * \brief Main SME debug function
77 *
78 * Main SME debug function
79 *
80 * \param hSme - handle to the SME object
81 * \param funcType - the specific debug function
82 * \param pParam - parameters for the debug function
83 * \return None
84 */
smeDebugFunction(TI_HANDLE hSme,TI_UINT32 funcType,void * pParam)85 void smeDebugFunction (TI_HANDLE hSme, TI_UINT32 funcType, void *pParam)
86 {
87 switch (funcType)
88 {
89 case DBG_SME_PRINT_HELP:
90 printSmeDbgFunctions();
91 break;
92
93 case DBG_SME_PRINT_OBJECT:
94 sme_dbgPrintObject( hSme );
95 break;
96
97 case DBG_SME_PRINT_STATS:
98 sme_printStats( hSme );
99 break;
100
101 case DBG_SME_CLEAR_STATS:
102 sme_resetStats( hSme );
103 break;
104
105 case DBG_SME_BSSID_LIST:
106 sme_printBssidList( hSme );
107 break;
108
109 default:
110 WLAN_OS_REPORT(("Invalid function type in SME debug function: %d\n", funcType));
111 break;
112 }
113 }
114
sme_strlen(char * s)115 int sme_strlen(char *s)
116 {
117 int x=0;
118 while (*s++)
119 x++;
120 return(x);
121 }
122
123
sme_strcpy(char * s1,char * s2)124 char* sme_strcpy(char *s1,char *s2)
125 {
126 while (*s2)
127 {
128 *s1++ = *s2++;
129 }
130 *s1 = '\0';
131
132 return s1;
133 }
134
135
sme_memcmp(char * s1,char * s2,int n)136 int sme_memcmp(char* s1, char* s2, int n)
137 {
138 while(n-- > 0 && *s1 == *s2)
139 s1++, s2++;
140
141 return( n < 0 ? 0 : *s1 - *s2 );
142 }
143
144
145
146
147 /**
148 * \fn printSmeDbgFunctions
149 * \brief Print the SME debug menu
150 *
151 * Print the SME debug menu
152 *
153 * \param hSme - handle to the SME object
154 * \return None
155 */
printSmeDbgFunctions(void)156 void printSmeDbgFunctions(void)
157 {
158 WLAN_OS_REPORT((" SME Debug Functions \n"));
159 WLAN_OS_REPORT(("-------------------------\n"));
160 WLAN_OS_REPORT(("1900 - Print the SME Debug Help\n"));
161 WLAN_OS_REPORT(("1901 - Print the SME object\n"));
162 WLAN_OS_REPORT(("1902 - Print the SME statistics\n"));
163 WLAN_OS_REPORT(("1903 - Reset the SME statistics\n"));
164 WLAN_OS_REPORT(("1904 - Print BSSID list\n"));
165 }
166
167 #ifdef REPORT_LOG
Freq2Chan(TI_UINT32 freq)168 static TI_UINT8 Freq2Chan(TI_UINT32 freq)
169 {
170 TI_UINT32 i;
171
172 for(i=0; i<CHAN_FREQ_TABLE_SIZE; i++)
173 if(ChanFreq[i].freq == freq)
174 return ChanFreq[i].chan;
175
176 return 0;
177 }
178 #endif
179
PrintBssidList(OS_802_11_BSSID_LIST_EX * bssidList,TI_UINT32 IsFullPrint,TMacAddr CurrentBssid)180 static void PrintBssidList(OS_802_11_BSSID_LIST_EX* bssidList, TI_UINT32 IsFullPrint, TMacAddr CurrentBssid)
181 {
182 TI_UINT32 i;
183 TI_INT8 connectionTypeStr[50];
184 POS_802_11_BSSID_EX pBssid = &bssidList->Bssid[0];
185
186 WLAN_OS_REPORT(("BssId List: Num=%u\n", bssidList->NumberOfItems));
187 WLAN_OS_REPORT((" MAC Privacy Rssi Mode Channel SSID\n"));
188 for(i=0; i<bssidList->NumberOfItems; i++)
189 {
190 switch (pBssid->InfrastructureMode)
191 {
192 case os802_11IBSS:
193 sme_strcpy (connectionTypeStr, "Adhoc");
194 break;
195 case os802_11Infrastructure:
196 sme_strcpy (connectionTypeStr, "Infra");
197 break;
198 case os802_11AutoUnknown:
199 sme_strcpy (connectionTypeStr, "Auto");
200 break;
201 default:
202 sme_strcpy (connectionTypeStr, " --- ");
203 break;
204 }
205 WLAN_OS_REPORT(("%s%02x.%02x.%02x.%02x.%02x.%02x %3u %4d %s %6d %s\n",
206 (!sme_memcmp(CurrentBssid, pBssid->MacAddress, MAC_ADDR_LEN))?"*":" ",
207 pBssid->MacAddress[0],
208 pBssid->MacAddress[1],
209 pBssid->MacAddress[2],
210 pBssid->MacAddress[3],
211 pBssid->MacAddress[4],
212 pBssid->MacAddress[5],
213 pBssid->Privacy,
214 pBssid->Rssi,
215 connectionTypeStr,
216 Freq2Chan(pBssid->Configuration.Union.channel),
217 (pBssid->Ssid.Ssid[0] == '\0')?(TI_INT8*)"****":((TI_INT8*)pBssid->Ssid.Ssid) ));
218
219 if (IsFullPrint)
220 {
221 WLAN_OS_REPORT((" BeaconInterval %d\n", pBssid->Configuration.BeaconPeriod));
222 WLAN_OS_REPORT((" Capabilities 0x%x\n", pBssid->Capabilities));
223 }
224 #ifdef _WINDOWS /*temp fix until bringing the dual OS fix*/
225 pBssid = (POS_802_11_BSSID_EX)((TI_INT8*)pBssid + (pBssid->Length ? pBssid->Length : sizeof(OS_802_11_BSSID_EX)));
226 #else /*for Linux*/
227 pBssid = &bssidList->Bssid[i+1];
228 #endif
229 }
230 }
231
sme_printBssidList(TI_HANDLE hSme)232 void sme_printBssidList(TI_HANDLE hSme)
233 {
234 TSme* sme = (TSme*) hSme;
235 TI_UINT32 length;
236 TI_UINT8* blist;
237 TMacAddr temp_bssid = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
238
239 length = scanResultTable_CalculateBssidListSize (sme->hScanResultTable, TI_FALSE);
240
241 blist = os_memoryAlloc(NULL, length);
242
243 if(!blist)
244 {
245 WLAN_OS_REPORT(("ERROR. sme_printBssidList(): Cannot allocate memory!! length = %d\n", length));
246 return;
247 }
248
249 scanResultTable_GetBssidList (sme->hScanResultTable, (POS_802_11_BSSID_LIST_EX)blist, &length, TI_FALSE);
250
251 PrintBssidList((OS_802_11_BSSID_LIST_EX*)blist, 0, temp_bssid);
252
253 os_memoryFree(NULL, blist, length);
254 }
255
256 /**
257 * \fn sme_dbgPrintObject
258 * \brief Print the SME object
259 *
260 * Print the SME object
261 *
262 * \param hSme - handle to the SME object
263 * \return None
264 */
sme_dbgPrintObject(TI_HANDLE hSme)265 void sme_dbgPrintObject (TI_HANDLE hSme)
266 {
267 WLAN_OS_REPORT(("Not yet implemented!\n"));
268 }
269
270 /**
271 * \fn sme_printStats
272 * \brief Print the SME statistics
273 *
274 * Print the SME statistics
275 *
276 * \param hSme - handle to the SME object
277 * \return None
278 */
sme_printStats(TI_HANDLE hSme)279 void sme_printStats (TI_HANDLE hSme)
280 {
281 WLAN_OS_REPORT(("Not yet implemented!\n"));
282 }
283
284 /**
285 * \fn sme_resetStats
286 * \brief Reset the SME statistics
287 *
288 * Reset the SME statistics
289 *
290 * \param hSme - handle to the SME object
291 * \return None
292 */
sme_resetStats(TI_HANDLE hSme)293 void sme_resetStats(TI_HANDLE hSme)
294 {
295 WLAN_OS_REPORT(("Not yet implemented!\n"));
296 }
297
298