/* * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * File: iocmd.h * * Purpose: Handles the viawget ioctl private interface functions * * Author: Lyndon Chen * * Date: May 8, 2002 * */ #ifndef __IOCMD_H__ #define __IOCMD_H__ #include "ttype.h" /*--------------------- Export Definitions -------------------------*/ // ioctl Command code #define MAGIC_CODE 0x3142 #define IOCTL_CMD_TEST (SIOCDEVPRIVATE + 0) #define IOCTL_CMD_SET (SIOCDEVPRIVATE + 1) #define IOCTL_CMD_HOSTAPD (SIOCDEVPRIVATE + 2) #define IOCTL_CMD_WPA (SIOCDEVPRIVATE + 3) typedef enum tagWMAC_CMD { WLAN_CMD_BSS_SCAN, WLAN_CMD_BSS_JOIN, WLAN_CMD_DISASSOC, WLAN_CMD_SET_WEP, WLAN_CMD_GET_LINK, WLAN_CMD_GET_LISTLEN, WLAN_CMD_GET_LIST, WLAN_CMD_GET_MIB, WLAN_CMD_GET_STAT, WLAN_CMD_STOP_MAC, WLAN_CMD_START_MAC, WLAN_CMD_AP_START, WLAN_CMD_SET_HOSTAPD, WLAN_CMD_SET_HOSTAPD_STA, WLAN_CMD_SET_802_1X, WLAN_CMD_SET_HOST_WEP, WLAN_CMD_SET_WPA, WLAN_CMD_GET_NODE_CNT, WLAN_CMD_ZONETYPE_SET, WLAN_CMD_GET_NODE_LIST } WMAC_CMD, *PWMAC_CMD; typedef enum tagWZONETYPE { ZoneType_USA = 0, ZoneType_Japan = 1, ZoneType_Europe = 2 } WZONETYPE; #define ADHOC 0 #define INFRA 1 #define BOTH 2 #define AP 3 #define ADHOC_STARTED 1 #define ADHOC_JOINTED 2 #define PHY80211a 0 #define PHY80211b 1 #define PHY80211g 2 #define SSID_ID 0 #define SSID_MAXLEN 32 #define BSSID_LEN 6 #define WEP_NKEYS 4 #define WEP_KEYMAXLEN 29 #define WEP_40BIT_LEN 5 #define WEP_104BIT_LEN 13 #define WEP_232BIT_LEN 16 // Ioctl interface structure // Command structure // #pragma pack(1) typedef struct tagSCmdRequest { u8 name[16]; void *data; u16 wResult; u16 wCmdCode; } SCmdRequest, *PSCmdRequest; // // Scan // typedef struct tagSCmdScan { u8 ssid[SSID_MAXLEN + 2]; } SCmdScan, *PSCmdScan; // // BSS Join // typedef struct tagSCmdBSSJoin { u16 wBSSType; u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; u32 uChannel; BOOL bPSEnable; BOOL bShareKeyAuth; } SCmdBSSJoin, *PSCmdBSSJoin; // // Zonetype Setting // typedef struct tagSCmdZoneTypeSet { BOOL bWrite; WZONETYPE ZoneType; } SCmdZoneTypeSet, *PSCmdZoneTypeSet; typedef struct tagSWPAResult { char ifname[100]; u8 proto; u8 key_mgmt; u8 eap_type; BOOL authenticated; } SWPAResult, *PSWPAResult; typedef struct tagSCmdStartAP { u16 wBSSType; u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; u32 uChannel; u32 uBeaconInt; BOOL bShareKeyAuth; u8 byBasicRate; } SCmdStartAP, *PSCmdStartAP; typedef struct tagSCmdSetWEP { BOOL bEnableWep; u8 byKeyIndex; u8 abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN]; BOOL bWepKeyAvailable[WEP_NKEYS]; u32 auWepKeyLength[WEP_NKEYS]; } SCmdSetWEP, *PSCmdSetWEP; typedef struct tagSBSSIDItem { u32 uChannel; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 1]; u16 wBeaconInterval; u16 wCapInfo; u8 byNetType; BOOL bWEPOn; u32 uRSSI; } SBSSIDItem; typedef struct tagSBSSIDList { u32 uItem; SBSSIDItem sBSSIDList[0]; } SBSSIDList, *PSBSSIDList; typedef struct tagSNodeItem { // STA info u16 wAID; u8 abyMACAddr[6]; u16 wTxDataRate; u16 wInActiveCount; u16 wEnQueueCnt; u16 wFlags; BOOL bPWBitOn; u8 byKeyIndex; u16 wWepKeyLength; u8 abyWepKey[WEP_KEYMAXLEN]; // Auto rate fallback vars BOOL bIsInFallback; u32 uTxFailures; u32 uTxAttempts; u16 wFailureRatio; } SNodeItem; typedef struct tagSNodeList { u32 uItem; SNodeItem sNodeList[0]; } SNodeList, *PSNodeList; typedef struct tagSCmdLinkStatus { BOOL bLink; u16 wBSSType; u8 byState; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 2]; u32 uChannel; u32 uLinkRate; } SCmdLinkStatus, *PSCmdLinkStatus; // // 802.11 counter // typedef struct tagSDot11MIBCount { u32 TransmittedFragmentCount; u32 MulticastTransmittedFrameCount; u32 FailedCount; u32 RetryCount; u32 MultipleRetryCount; u32 RTSSuccessCount; u32 RTSFailureCount; u32 ACKFailureCount; u32 FrameDuplicateCount; u32 ReceivedFragmentCount; u32 MulticastReceivedFrameCount; u32 FCSErrorCount; } SDot11MIBCount, *PSDot11MIBCount; // // statistic counter // typedef struct tagSStatMIBCount { // // ISR status count // u32 dwIsrTx0OK; u32 dwIsrTx1OK; u32 dwIsrBeaconTxOK; u32 dwIsrRxOK; u32 dwIsrTBTTInt; u32 dwIsrSTIMERInt; u32 dwIsrUnrecoverableError; u32 dwIsrSoftInterrupt; u32 dwIsrRxNoBuf; ///////////////////////////////////// u32 dwIsrUnknown; /* unknown interrupt count */ // RSR status count // u32 dwRsrFrmAlgnErr; u32 dwRsrErr; u32 dwRsrCRCErr; u32 dwRsrCRCOk; u32 dwRsrBSSIDOk; u32 dwRsrADDROk; u32 dwRsrICVOk; u32 dwNewRsrShortPreamble; u32 dwRsrLong; u32 dwRsrRunt; u32 dwRsrRxControl; u32 dwRsrRxData; u32 dwRsrRxManage; u32 dwRsrRxPacket; u32 dwRsrRxOctet; u32 dwRsrBroadcast; u32 dwRsrMulticast; u32 dwRsrDirected; // 64-bit OID u32 ullRsrOK; // for some optional OIDs (64 bits) and DMI support u32 ullRxBroadcastBytes; u32 ullRxMulticastBytes; u32 ullRxDirectedBytes; u32 ullRxBroadcastFrames; u32 ullRxMulticastFrames; u32 ullRxDirectedFrames; u32 dwRsrRxFragment; u32 dwRsrRxFrmLen64; u32 dwRsrRxFrmLen65_127; u32 dwRsrRxFrmLen128_255; u32 dwRsrRxFrmLen256_511; u32 dwRsrRxFrmLen512_1023; u32 dwRsrRxFrmLen1024_1518; // TSR0,1 status count // u32 dwTsrTotalRetry[2]; /* total collision retry count */ u32 dwTsrOnceRetry[2]; /* this packet had one collision */ u32 dwTsrMoreThanOnceRetry[2]; /* this packet had many collisions */ u32 dwTsrRetry[2]; /* this packet has ever occur collision, * that is (dwTsrOnceCollision0 plus * dwTsrMoreThanOnceCollision0) */ u32 dwTsrACKData[2]; u32 dwTsrErr[2]; u32 dwAllTsrOK[2]; u32 dwTsrRetryTimeout[2]; u32 dwTsrTransmitTimeout[2]; u32 dwTsrTxPacket[2]; u32 dwTsrTxOctet[2]; u32 dwTsrBroadcast[2]; u32 dwTsrMulticast[2]; u32 dwTsrDirected[2]; // RD/TD count u32 dwCntRxFrmLength; u32 dwCntTxBufLength; u8 abyCntRxPattern[16]; u8 abyCntTxPattern[16]; /* Software check.... */ u32 dwCntRxDataErr; /* rx buffer data CRC err count */ u32 dwCntDecryptErr; /* rx buffer data CRC err count */ u32 dwCntRxICVErr; /* rx buffer data CRC err count */ u32 idxRxErrorDesc; /* index for rx data error RD */ /* 64-bit OID */ u32 ullTsrOK[2]; // for some optional OIDs (64 bits) and DMI support u32 ullTxBroadcastFrames[2]; u32 ullTxMulticastFrames[2]; u32 ullTxDirectedFrames[2]; u32 ullTxBroadcastBytes[2]; u32 ullTxMulticastBytes[2]; u32 ullTxDirectedBytes[2]; } SStatMIBCount, *PSStatMIBCount; typedef struct tagSCmdValue { u32 dwValue; } SCmdValue, *PSCmdValue; // // hostapd & viawget ioctl related // // VIAGWET_IOCTL_HOSTAPD ioctl() cmd: enum { VIAWGET_HOSTAPD_FLUSH = 1, VIAWGET_HOSTAPD_ADD_STA = 2, VIAWGET_HOSTAPD_REMOVE_STA = 3, VIAWGET_HOSTAPD_GET_INFO_STA = 4, VIAWGET_HOSTAPD_SET_ENCRYPTION = 5, VIAWGET_HOSTAPD_GET_ENCRYPTION = 6, VIAWGET_HOSTAPD_SET_FLAGS_STA = 7, VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR = 8, VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT = 9, VIAWGET_HOSTAPD_MLME = 10, VIAWGET_HOSTAPD_SCAN_REQ = 11, VIAWGET_HOSTAPD_STA_CLEAR_STATS = 12, }; #define VIAWGET_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ ((int) (&((struct viawget_hostapd_param *) 0)->u.generic_elem.data)) // Maximum length for algorithm names (-1 for nul termination) used in ioctl() struct viawget_hostapd_param { u32 cmd; u8 sta_addr[6]; union { struct { u16 aid; u16 capability; u8 tx_supp_rates; } add_sta; struct { u32 inactive_sec; } get_info_sta; struct { u8 alg; u32 flags; u32 err; u8 idx; u8 seq[8]; u16 key_len; u8 key[0]; } crypt; struct { u32 flags_and; u32 flags_or; } set_flags_sta; struct { u16 rid; u16 len; u8 data[0]; } rid; struct { u8 len; u8 data[0]; } generic_elem; struct { u16 cmd; u16 reason_code; } mlme; struct { u8 ssid_len; u8 ssid[32]; } scan_req; } u; }; /*--------------------- Export Classes ----------------------------*/ /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Types ------------------------------*/ /*--------------------- Export Functions --------------------------*/ #endif /* __IOCMD_H__ */