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 // ioctl Command code 33 #define MAGIC_CODE 0x3142 34 #define IOCTL_CMD_TEST (SIOCDEVPRIVATE + 0) 35 #define IOCTL_CMD_SET (SIOCDEVPRIVATE + 1) 36 #define IOCTL_CMD_HOSTAPD (SIOCDEVPRIVATE + 2) 37 #define IOCTL_CMD_WPA (SIOCDEVPRIVATE + 3) 38 39 typedef enum tagWMAC_CMD { 40 41 WLAN_CMD_BSS_SCAN, 42 WLAN_CMD_BSS_JOIN, 43 WLAN_CMD_DISASSOC, 44 WLAN_CMD_SET_WEP, 45 WLAN_CMD_GET_LINK, 46 WLAN_CMD_GET_LISTLEN, 47 WLAN_CMD_GET_LIST, 48 WLAN_CMD_GET_MIB, 49 WLAN_CMD_GET_STAT, 50 WLAN_CMD_STOP_MAC, 51 WLAN_CMD_START_MAC, 52 WLAN_CMD_AP_START, 53 WLAN_CMD_SET_HOSTAPD, 54 WLAN_CMD_SET_HOSTAPD_STA, 55 WLAN_CMD_SET_802_1X, 56 WLAN_CMD_SET_HOST_WEP, 57 WLAN_CMD_SET_WPA, 58 WLAN_CMD_GET_NODE_CNT, 59 WLAN_CMD_ZONETYPE_SET, 60 WLAN_CMD_GET_NODE_LIST 61 62 } WMAC_CMD, *PWMAC_CMD; 63 64 typedef enum tagWZONETYPE { 65 ZoneType_USA = 0, 66 ZoneType_Japan = 1, 67 ZoneType_Europe = 2 68 } WZONETYPE; 69 70 #define ADHOC 0 71 #define INFRA 1 72 #define BOTH 2 73 #define AP 3 74 75 #define ADHOC_STARTED 1 76 #define ADHOC_JOINTED 2 77 78 #define PHY80211a 0 79 #define PHY80211b 1 80 #define PHY80211g 2 81 82 #define SSID_ID 0 83 #define SSID_MAXLEN 32 84 #define BSSID_LEN 6 85 #define WEP_NKEYS 4 86 #define WEP_KEYMAXLEN 29 87 #define WEP_40BIT_LEN 5 88 #define WEP_104BIT_LEN 13 89 #define WEP_232BIT_LEN 16 90 91 // Ioctl interface structure 92 // Command structure 93 // 94 typedef struct tagSCmdRequest { 95 u8 name[16]; 96 void *data; 97 u16 wResult; 98 u16 wCmdCode; 99 } __packed SCmdRequest, *PSCmdRequest; 100 101 // 102 // Scan 103 // 104 105 typedef struct tagSCmdScan { 106 107 u8 ssid[SSID_MAXLEN + 2]; 108 109 } __packed SCmdScan, *PSCmdScan; 110 111 // 112 // BSS Join 113 // 114 115 typedef struct tagSCmdBSSJoin { 116 117 u16 wBSSType; 118 u16 wBBPType; 119 u8 ssid[SSID_MAXLEN + 2]; 120 u32 uChannel; 121 bool bPSEnable; 122 bool bShareKeyAuth; 123 124 } __packed SCmdBSSJoin, *PSCmdBSSJoin; 125 126 // 127 // Zonetype Setting 128 // 129 130 typedef struct tagSCmdZoneTypeSet { 131 132 bool bWrite; 133 WZONETYPE ZoneType; 134 135 } __packed SCmdZoneTypeSet, *PSCmdZoneTypeSet; 136 137 typedef struct tagSWPAResult { 138 char ifname[100]; 139 u8 proto; 140 u8 key_mgmt; 141 u8 eap_type; 142 bool authenticated; 143 } __packed SWPAResult, *PSWPAResult; 144 145 typedef struct tagSCmdStartAP { 146 147 u16 wBSSType; 148 u16 wBBPType; 149 u8 ssid[SSID_MAXLEN + 2]; 150 u32 uChannel; 151 u32 uBeaconInt; 152 bool bShareKeyAuth; 153 u8 byBasicRate; 154 155 } __packed SCmdStartAP, *PSCmdStartAP; 156 157 typedef struct tagSCmdSetWEP { 158 159 bool bEnableWep; 160 u8 byKeyIndex; 161 u8 abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN]; 162 bool bWepKeyAvailable[WEP_NKEYS]; 163 u32 auWepKeyLength[WEP_NKEYS]; 164 165 } __packed SCmdSetWEP, *PSCmdSetWEP; 166 167 typedef struct tagSBSSIDItem { 168 169 u32 uChannel; 170 u8 abyBSSID[BSSID_LEN]; 171 u8 abySSID[SSID_MAXLEN + 1]; 172 u16 wBeaconInterval; 173 u16 wCapInfo; 174 u8 byNetType; 175 bool bWEPOn; 176 u32 uRSSI; 177 178 } __packed SBSSIDItem; 179 180 typedef struct tagSBSSIDList { 181 182 u32 uItem; 183 SBSSIDItem sBSSIDList[0]; 184 } __packed SBSSIDList, *PSBSSIDList; 185 186 typedef struct tagSNodeItem { 187 // STA info 188 u16 wAID; 189 u8 abyMACAddr[6]; 190 u16 wTxDataRate; 191 u16 wInActiveCount; 192 u16 wEnQueueCnt; 193 u16 wFlags; 194 bool bPWBitOn; 195 u8 byKeyIndex; 196 u16 wWepKeyLength; 197 u8 abyWepKey[WEP_KEYMAXLEN]; 198 // Auto rate fallback vars 199 bool bIsInFallback; 200 u32 uTxFailures; 201 u32 uTxAttempts; 202 u16 wFailureRatio; 203 204 } __packed SNodeItem; 205 206 typedef struct tagSNodeList { 207 208 u32 uItem; 209 SNodeItem sNodeList[0]; 210 211 } __packed SNodeList, *PSNodeList; 212 213 typedef struct tagSCmdLinkStatus { 214 215 bool bLink; 216 u16 wBSSType; 217 u8 byState; 218 u8 abyBSSID[BSSID_LEN]; 219 u8 abySSID[SSID_MAXLEN + 2]; 220 u32 uChannel; 221 u32 uLinkRate; 222 223 } __packed SCmdLinkStatus, *PSCmdLinkStatus; 224 225 // 226 // 802.11 counter 227 // 228 typedef struct tagSDot11MIBCount { 229 u32 TransmittedFragmentCount; 230 u32 MulticastTransmittedFrameCount; 231 u32 FailedCount; 232 u32 RetryCount; 233 u32 MultipleRetryCount; 234 u32 RTSSuccessCount; 235 u32 RTSFailureCount; 236 u32 ACKFailureCount; 237 u32 FrameDuplicateCount; 238 u32 ReceivedFragmentCount; 239 u32 MulticastReceivedFrameCount; 240 u32 FCSErrorCount; 241 } __packed SDot11MIBCount, *PSDot11MIBCount; 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 had one collision */ 308 u32 dwTsrMoreThanOnceRetry[2]; /* this packet had many collisions */ 309 u32 dwTsrRetry[2]; /* this packet has ever occur collision, 310 * that is (dwTsrOnceCollision0 plus 311 * dwTsrMoreThanOnceCollision0) */ 312 u32 dwTsrACKData[2]; 313 u32 dwTsrErr[2]; 314 u32 dwAllTsrOK[2]; 315 u32 dwTsrRetryTimeout[2]; 316 u32 dwTsrTransmitTimeout[2]; 317 318 u32 dwTsrTxPacket[2]; 319 u32 dwTsrTxOctet[2]; 320 u32 dwTsrBroadcast[2]; 321 u32 dwTsrMulticast[2]; 322 u32 dwTsrDirected[2]; 323 324 // RD/TD count 325 u32 dwCntRxFrmLength; 326 u32 dwCntTxBufLength; 327 328 u8 abyCntRxPattern[16]; 329 u8 abyCntTxPattern[16]; 330 331 /* Software check.... */ 332 u32 dwCntRxDataErr; /* rx buffer data CRC err count */ 333 u32 dwCntDecryptErr; /* rx buffer data CRC err count */ 334 u32 dwCntRxICVErr; /* rx buffer data CRC err count */ 335 u32 idxRxErrorDesc; /* index for rx data error RD */ 336 337 /* 64-bit OID */ 338 u32 ullTsrOK[2]; 339 340 // for some optional OIDs (64 bits) and DMI support 341 u32 ullTxBroadcastFrames[2]; 342 u32 ullTxMulticastFrames[2]; 343 u32 ullTxDirectedFrames[2]; 344 u32 ullTxBroadcastBytes[2]; 345 u32 ullTxMulticastBytes[2]; 346 u32 ullTxDirectedBytes[2]; 347 } __packed SStatMIBCount, *PSStatMIBCount; 348 349 typedef struct tagSCmdValue { 350 351 u32 dwValue; 352 353 } __packed SCmdValue, *PSCmdValue; 354 355 // 356 // hostapd & viawget ioctl related 357 // 358 359 // VIAGWET_IOCTL_HOSTAPD ioctl() cmd: 360 enum { 361 VIAWGET_HOSTAPD_FLUSH = 1, 362 VIAWGET_HOSTAPD_ADD_STA = 2, 363 VIAWGET_HOSTAPD_REMOVE_STA = 3, 364 VIAWGET_HOSTAPD_GET_INFO_STA = 4, 365 VIAWGET_HOSTAPD_SET_ENCRYPTION = 5, 366 VIAWGET_HOSTAPD_GET_ENCRYPTION = 6, 367 VIAWGET_HOSTAPD_SET_FLAGS_STA = 7, 368 VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR = 8, 369 VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT = 9, 370 VIAWGET_HOSTAPD_MLME = 10, 371 VIAWGET_HOSTAPD_SCAN_REQ = 11, 372 VIAWGET_HOSTAPD_STA_CLEAR_STATS = 12, 373 }; 374 375 #define VIAWGET_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ 376 ((int) (&((struct viawget_hostapd_param *) 0)->u.generic_elem.data)) 377 378 // Maximum length for algorithm names (-1 for nul termination) used in ioctl() 379 380 struct viawget_hostapd_param { 381 u32 cmd; 382 u8 sta_addr[6]; 383 union { 384 struct { 385 u16 aid; 386 u16 capability; 387 u8 tx_supp_rates; 388 } add_sta; 389 struct { 390 u32 inactive_sec; 391 } get_info_sta; 392 struct { 393 u8 alg; 394 u32 flags; 395 u32 err; 396 u8 idx; 397 u8 seq[8]; 398 u16 key_len; 399 u8 key[0]; 400 } crypt; 401 struct { 402 u32 flags_and; 403 u32 flags_or; 404 } set_flags_sta; 405 struct { 406 u16 rid; 407 u16 len; 408 u8 data[0]; 409 } rid; 410 struct { 411 u8 len; 412 u8 data[0]; 413 } generic_elem; 414 struct { 415 u16 cmd; 416 u16 reason_code; 417 } mlme; 418 struct { 419 u8 ssid_len; 420 u8 ssid[32]; 421 } scan_req; 422 } u; 423 } __packed; 424 425 #endif /* __IOCMD_H__ */ 426