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