1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * File: iocmd.h
20  *
21  * Purpose: Handles the viawget ioctl private interface functions
22  *
23  * Author: Lyndon Chen
24  *
25  * Date: May 8, 2002
26  *
27  */
28 
29 #ifndef __IOCMD_H__
30 #define __IOCMD_H__
31 
32 #include "ttype.h"
33 
34 /*---------------------  Export Definitions -------------------------*/
35 
36 //typedef uint32_t u32;
37 //typedef uint16_t u16;
38 //typedef uint8_t u8;
39 
40 
41 // ioctl Command code
42 #define MAGIC_CODE	                 0x3142
43 #define IOCTL_CMD_TEST	            (SIOCDEVPRIVATE + 0)
44 #define IOCTL_CMD_SET			    (SIOCDEVPRIVATE + 1)
45 #define IOCTL_CMD_HOSTAPD           (SIOCDEVPRIVATE + 2)
46 #define IOCTL_CMD_WPA               (SIOCDEVPRIVATE + 3)
47 
48 
49 typedef enum tagWMAC_CMD {
50 
51     WLAN_CMD_BSS_SCAN,
52     WLAN_CMD_BSS_JOIN,
53     WLAN_CMD_DISASSOC,
54     WLAN_CMD_SET_WEP,
55     WLAN_CMD_GET_LINK,
56     WLAN_CMD_GET_LISTLEN,
57     WLAN_CMD_GET_LIST,
58     WLAN_CMD_GET_MIB,
59     WLAN_CMD_GET_STAT,
60     WLAN_CMD_STOP_MAC,
61     WLAN_CMD_START_MAC,
62     WLAN_CMD_AP_START,
63     WLAN_CMD_SET_HOSTAPD,
64     WLAN_CMD_SET_HOSTAPD_STA,
65     WLAN_CMD_SET_802_1X,
66     WLAN_CMD_SET_HOST_WEP,
67     WLAN_CMD_SET_WPA,
68     WLAN_CMD_GET_NODE_CNT,
69     WLAN_CMD_ZONETYPE_SET,
70     WLAN_CMD_GET_NODE_LIST
71 
72 } WMAC_CMD, *PWMAC_CMD;
73 
74 typedef enum tagWZONETYPE {
75   ZoneType_USA=0,
76   ZoneType_Japan=1,
77   ZoneType_Europe=2
78 }WZONETYPE;
79 
80 #define ADHOC	0
81 #define INFRA	1
82 #define BOTH	2
83 #define AP	    3
84 
85 #define ADHOC_STARTED	   1
86 #define ADHOC_JOINTED	   2
87 
88 
89 #define PHY80211a 	    0
90 #define PHY80211b       1
91 #define PHY80211g       2
92 
93 #define SSID_ID                0
94 #define SSID_MAXLEN            32
95 #define BSSID_LEN              6
96 #define WEP_NKEYS              4
97 #define WEP_KEYMAXLEN          29
98 #define WEP_40BIT_LEN          5
99 #define WEP_104BIT_LEN         13
100 #define WEP_232BIT_LEN         16
101 
102 // Ioctl interface structure
103 // Command structure
104 //
105 #pragma pack(1)
106 typedef struct tagSCmdRequest {
107 	u8	    name[16];
108 	void	*data;
109 	u16	    wResult;
110 	u16     wCmdCode;
111 } SCmdRequest, *PSCmdRequest;
112 
113 //
114 // Scan
115 //
116 
117 typedef struct tagSCmdScan {
118 
119 	u8 ssid[SSID_MAXLEN + 2];
120 
121 } SCmdScan, *PSCmdScan;
122 
123 
124 //
125 // BSS Join
126 //
127 
128 typedef struct tagSCmdBSSJoin {
129 
130     u16	    wBSSType;
131     u16     wBBPType;
132     u8	    ssid[SSID_MAXLEN + 2];
133     u32	    uChannel;
134     bool bPSEnable;
135     bool bShareKeyAuth;
136 
137 } SCmdBSSJoin, *PSCmdBSSJoin;
138 
139 //
140 // Zonetype Setting
141 //
142 
143 typedef struct tagSCmdZoneTypeSet {
144 
145  bool bWrite;
146  WZONETYPE  ZoneType;
147 
148 } SCmdZoneTypeSet, *PSCmdZoneTypeSet;
149 
150 #ifdef WPA_SM_Transtatus
151 typedef struct tagSWPAResult {
152          char	ifname[100];
153          u8 proto;
154          u8 key_mgmt;
155          u8 eap_type;
156          bool authenticated;
157 } SWPAResult, *PSWPAResult;
158 #endif
159 
160 typedef struct tagSCmdStartAP {
161 
162     u16	    wBSSType;
163     u16     wBBPType;
164     u8	    ssid[SSID_MAXLEN + 2];
165     u32	    uChannel;
166     u32     uBeaconInt;
167     bool bShareKeyAuth;
168     u8      byBasicRate;
169 
170 } SCmdStartAP, *PSCmdStartAP;
171 
172 
173 typedef struct tagSCmdSetWEP {
174 
175     bool bEnableWep;
176     u8      byKeyIndex;
177     u8      abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN];
178     bool bWepKeyAvailable[WEP_NKEYS];
179     u32     auWepKeyLength[WEP_NKEYS];
180 
181 } SCmdSetWEP, *PSCmdSetWEP;
182 
183 
184 
185 typedef struct tagSBSSIDItem {
186 
187 	u32	    uChannel;
188     u8      abyBSSID[BSSID_LEN];
189     u8      abySSID[SSID_MAXLEN + 1];
190     //2006-1116-01,<Modify> by NomadZhao
191     //u16	    wBeaconInterval;
192     //u16	    wCapInfo;
193     //u8      byNetType;
194     u8      byNetType;
195     u16	    wBeaconInterval;
196     u16	    wCapInfo;        // for address of byNetType at align 4
197 
198     bool bWEPOn;
199     u32     uRSSI;
200 
201 } SBSSIDItem;
202 
203 
204 typedef struct tagSBSSIDList {
205 
206 	u32		    uItem;
207 	SBSSIDItem	sBSSIDList[0];
208 } SBSSIDList, *PSBSSIDList;
209 
210 
211 typedef struct tagSCmdLinkStatus {
212 
213     bool bLink;
214 	u16   wBSSType;
215 	u8      byState;
216     u8      abyBSSID[BSSID_LEN];
217     u8      abySSID[SSID_MAXLEN + 2];
218     u32     uChannel;
219     u32     uLinkRate;
220 
221 } SCmdLinkStatus, *PSCmdLinkStatus;
222 
223 //
224 // 802.11 counter
225 //
226 typedef struct tagSDot11MIBCount {
227 	u32 TransmittedFragmentCount;
228 	u32 MulticastTransmittedFrameCount;
229 	u32 FailedCount;
230 	u32 RetryCount;
231 	u32 MultipleRetryCount;
232 	u32 RTSSuccessCount;
233 	u32 RTSFailureCount;
234 	u32 ACKFailureCount;
235 	u32 FrameDuplicateCount;
236 	u32 ReceivedFragmentCount;
237 	u32 MulticastReceivedFrameCount;
238 	u32 FCSErrorCount;
239 } SDot11MIBCount, *PSDot11MIBCount;
240 
241 
242 
243 //
244 // statistic counter
245 //
246 typedef struct tagSStatMIBCount {
247     //
248     // ISR status count
249     //
250 	u32   dwIsrTx0OK;
251 	u32   dwIsrTx1OK;
252 	u32   dwIsrBeaconTxOK;
253 	u32   dwIsrRxOK;
254 	u32   dwIsrTBTTInt;
255 	u32   dwIsrSTIMERInt;
256 	u32   dwIsrUnrecoverableError;
257 	u32   dwIsrSoftInterrupt;
258 	u32   dwIsrRxNoBuf;
259     /////////////////////////////////////
260 
261 	u32   dwIsrUnknown;               // unknown interrupt count
262 
263     // RSR status count
264     //
265 	u32   dwRsrFrmAlgnErr;
266 	u32   dwRsrErr;
267 	u32   dwRsrCRCErr;
268 	u32   dwRsrCRCOk;
269 	u32   dwRsrBSSIDOk;
270 	u32   dwRsrADDROk;
271 	u32   dwRsrICVOk;
272 	u32   dwNewRsrShortPreamble;
273 	u32   dwRsrLong;
274 	u32   dwRsrRunt;
275 
276 	u32   dwRsrRxControl;
277 	u32   dwRsrRxData;
278 	u32   dwRsrRxManage;
279 
280 	u32   dwRsrRxPacket;
281 	u32   dwRsrRxOctet;
282 	u32   dwRsrBroadcast;
283 	u32   dwRsrMulticast;
284 	u32   dwRsrDirected;
285     // 64-bit OID
286 	u32   ullRsrOK;
287 
288     // for some optional OIDs (64 bits) and DMI support
289 	u32   ullRxBroadcastBytes;
290 	u32   ullRxMulticastBytes;
291 	u32   ullRxDirectedBytes;
292 	u32   ullRxBroadcastFrames;
293 	u32   ullRxMulticastFrames;
294 	u32   ullRxDirectedFrames;
295 
296 	u32   dwRsrRxFragment;
297 	u32   dwRsrRxFrmLen64;
298 	u32   dwRsrRxFrmLen65_127;
299 	u32   dwRsrRxFrmLen128_255;
300 	u32   dwRsrRxFrmLen256_511;
301 	u32   dwRsrRxFrmLen512_1023;
302 	u32   dwRsrRxFrmLen1024_1518;
303 
304     // TSR0,1 status count
305     //
306 	u32   dwTsrTotalRetry[2];        // total collision retry count
307 	u32   dwTsrOnceRetry[2];         // this packet only occur one collision
308 	u32   dwTsrMoreThanOnceRetry[2]; // this packet occur more than one collision
309 	u32   dwTsrRetry[2];             // this packet has ever occur collision,
310                                        // that is (dwTsrOnceCollision0 + dwTsrMoreThanOnceCollision0)
311 	u32   dwTsrACKData[2];
312 	u32   dwTsrErr[2];
313 	u32   dwAllTsrOK[2];
314 	u32   dwTsrRetryTimeout[2];
315 	u32   dwTsrTransmitTimeout[2];
316 
317 	u32   dwTsrTxPacket[2];
318 	u32   dwTsrTxOctet[2];
319 	u32   dwTsrBroadcast[2];
320 	u32   dwTsrMulticast[2];
321 	u32   dwTsrDirected[2];
322 
323     // RD/TD count
324 	u32   dwCntRxFrmLength;
325 	u32   dwCntTxBufLength;
326 
327 	u8    abyCntRxPattern[16];
328 	u8    abyCntTxPattern[16];
329 
330     // Software check....
331 	u32   dwCntRxDataErr;             // rx buffer data software compare CRC err count
332 	u32   dwCntDecryptErr;            // rx buffer data software compare CRC err count
333 	u32   dwCntRxICVErr;              // rx buffer data software compare CRC err count
334 	u32    idxRxErrorDesc;             // index for rx data error RD
335 
336     // 64-bit OID
337 	u32   ullTsrOK[2];
338 
339     // for some optional OIDs (64 bits) and DMI support
340 	u32   ullTxBroadcastFrames[2];
341 	u32   ullTxMulticastFrames[2];
342 	u32   ullTxDirectedFrames[2];
343 	u32   ullTxBroadcastBytes[2];
344 	u32   ullTxMulticastBytes[2];
345 	u32   ullTxDirectedBytes[2];
346 } SStatMIBCount, *PSStatMIBCount;
347 
348 
349 typedef struct tagSNodeItem {
350     // STA info
351     u16            wAID;
352     u8             abyMACAddr[6];
353     u16            wTxDataRate;
354     u16            wInActiveCount;
355     u16            wEnQueueCnt;
356     u16            wFlags;
357     bool bPWBitOn;
358     u8             byKeyIndex;
359     u16            wWepKeyLength;
360     u8            abyWepKey[WEP_KEYMAXLEN];
361     // Auto rate fallback vars
362     bool bIsInFallback;
363     u32            uTxFailures;
364     u32            uTxAttempts;
365     u16            wFailureRatio;
366 
367 } SNodeItem;
368 
369 
370 typedef struct tagSNodeList {
371 
372 	u32		    uItem;
373 	SNodeItem	sNodeList[0];
374 
375 } SNodeList, *PSNodeList;
376 
377 
378 
379 typedef struct tagSCmdValue {
380 
381 	u32 dwValue;
382 
383 } SCmdValue,  *PSCmdValue;
384 
385 
386 //
387 // hostapd & viawget ioctl related
388 //
389 
390 
391 // VIAGWET_IOCTL_HOSTAPD ioctl() cmd:
392 enum {
393 	VIAWGET_HOSTAPD_FLUSH = 1,
394 	VIAWGET_HOSTAPD_ADD_STA = 2,
395 	VIAWGET_HOSTAPD_REMOVE_STA = 3,
396 	VIAWGET_HOSTAPD_GET_INFO_STA = 4,
397 	VIAWGET_HOSTAPD_SET_ENCRYPTION = 5,
398 	VIAWGET_HOSTAPD_GET_ENCRYPTION = 6,
399 	VIAWGET_HOSTAPD_SET_FLAGS_STA = 7,
400 	VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR = 8,
401 	VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT = 9,
402 	VIAWGET_HOSTAPD_MLME = 10,
403 	VIAWGET_HOSTAPD_SCAN_REQ = 11,
404 	VIAWGET_HOSTAPD_STA_CLEAR_STATS = 12,
405 };
406 
407 
408 #define VIAWGET_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \
409 ((int) (&((struct viawget_hostapd_param *) 0)->u.generic_elem.data))
410 
411 // Maximum length for algorithm names (-1 for nul termination) used in ioctl()
412 
413 
414 
415 struct viawget_hostapd_param {
416 	u32 cmd;
417 	u8 sta_addr[6];
418 	union {
419 		struct {
420 			u16 aid;
421 			u16 capability;
422 			u8 tx_supp_rates;
423 		} add_sta;
424 		struct {
425 			u32 inactive_sec;
426 		} get_info_sta;
427 		struct {
428 			u8 alg;
429 			u32 flags;
430 			u32 err;
431 			u8 idx;
432 			u8 seq[8];
433 			u16 key_len;
434 			u8 key[0];
435 		} crypt;
436 		struct {
437 			u32 flags_and;
438 			u32 flags_or;
439 		} set_flags_sta;
440 		struct {
441 			u16 rid;
442 			u16 len;
443 			u8 data[0];
444 		} rid;
445 		struct {
446 			u8 len;
447 			u8 data[0];
448 		} generic_elem;
449 		struct {
450 			u16 cmd;
451 			u16 reason_code;
452 		} mlme;
453 		struct {
454 			u8 ssid_len;
455 			u8 ssid[32];
456 		} scan_req;
457 	} u;
458 };
459 
460 //2006-1116-01,<Add> by NomadZhao
461 #pragma pack()
462 
463 /*---------------------  Export Classes  ----------------------------*/
464 
465 /*---------------------  Export Variables  --------------------------*/
466 
467 
468 /*---------------------  Export Types  ------------------------------*/
469 
470 
471 /*---------------------  Export Functions  --------------------------*/
472 
473 
474 
475 #endif //__IOCMD_H__
476