📄 sta_ioctl.c
字号:
/* ************************************************************************* * Ralink Tech Inc. * 5F., No.36, Taiyuan St., Jhubei City, * Hsinchu County 302, * Taiwan, R.O.C. * * (c) Copyright 2002-2007, Ralink Technology, Inc. * * 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * ************************************************************************* Module Name: sta_ioctl.c Abstract: IOCTL related subroutines Revision History: Who When What -------- ---------- ---------------------------------------------- Rory Chen 01-03-2003 created Rory Chen 02-14-2005 modify to support RT61*/#include "rt_config.h"#ifdef DBGextern ULONG RTDebugLevel;#endif#define NR_WEP_KEYS 4#define WEP_SMALL_KEY_LEN (40/8)#define WEP_LARGE_KEY_LEN (104/8)#define GROUP_KEY_NO 4#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_A, _B, _C, _D, _E)#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_A, _B, _C, _D, _E)#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_A, _B, _C, _D, _E, _F)#else#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_B, _C, _D, _E)#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_B, _C, _D, _E)#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_B, _C, _D, _E, _F)#endifextern UCHAR CipherWpa2Template[];typedef struct PACKED _RT_VERSION_INFO{ UCHAR DriverVersionW; UCHAR DriverVersionX; UCHAR DriverVersionY; UCHAR DriverVersionZ; UINT DriverBuildYear; UINT DriverBuildMonth; UINT DriverBuildDay;} RT_VERSION_INFO, *PRT_VERSION_INFO;struct iw_priv_args privtab[] = {{ RTPRIV_IOCTL_SET, IW_PRIV_TYPE_CHAR | 1024, 0, "set"},{ RTPRIV_IOCTL_SHOW, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, ""},/* --- sub-ioctls definitions --- */ { SHOW_CONN_STATUS, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "connStatus" }, { SHOW_DRVIER_VERION, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "driverVer" }, { SHOW_BA_INFO, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bainfo" }, { SHOW_DESC_INFO, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "descinfo" }, { RAIO_OFF, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" }, { RAIO_ON, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" },#ifdef QOS_DLS_SUPPORT { SHOW_DLS_ENTRY_INFO, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "dlsentryinfo" },#endif // QOS_DLS_SUPPORT // { SHOW_CFG_VALUE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "show" }, { SHOW_ADHOC_ENTRY_INFO, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "adhocEntry" },/* --- sub-ioctls relations --- */#ifdef DBG{ RTPRIV_IOCTL_BBP, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bbp"},{ RTPRIV_IOCTL_MAC, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024, "mac"}, { RTPRIV_IOCTL_E2P, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024, "e2p"},#endif /* DBG */{ RTPRIV_IOCTL_STATISTICS, 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "stat"}, { RTPRIV_IOCTL_GSITESURVEY, 0, IW_PRIV_TYPE_CHAR | 1024, "get_site_survey"},};INT Set_SSID_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);#ifdef WMM_SUPPORTINT Set_WmmCapable_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);#endifINT Set_NetworkType_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_AuthMode_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_EncrypType_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_DefaultKeyID_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_Key1_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_Key2_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_Key3_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_Key4_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_WPAPSK_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_PSMode_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);#ifdef WPA_SUPPLICANT_SUPPORTINT Set_Wpa_Support( IN PRTMP_ADAPTER pAd, IN PSTRING arg);#endif // WPA_SUPPLICANT_SUPPORT //#ifdef DBGVOID RTMPIoctlMAC( IN PRTMP_ADAPTER pAdapter, IN struct iwreq *wrq);VOID RTMPIoctlE2PROM( IN PRTMP_ADAPTER pAdapter, IN struct iwreq *wrq);#endif // DBG //NDIS_STATUS RTMPWPANoneAddKeyProc( IN PRTMP_ADAPTER pAd, IN PVOID pBuf); INT Set_FragTest_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); #ifdef DOT11_N_SUPPORT INT Set_TGnWifiTest_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);#endif // DOT11_N_SUPPORT //INT Set_LongRetryLimit_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);INT Set_ShortRetryLimit_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);#ifdef EXT_BUILD_CHANNEL_LISTINT Set_Ieee80211dClientMode_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg);#endif // EXT_BUILD_CHANNEL_LIST //#ifdef CARRIER_DETECTION_SUPPORTINT Set_CarrierDetect_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);#endif // CARRIER_DETECTION_SUPPORT //INT Show_Adhoc_MacTable_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING extra);INT Set_BeaconLostTime_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);INT Set_AutoRoaming_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);INT Set_SiteSurvey_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);INT Set_ForceTxBurst_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg);static struct { PSTRING name; INT (*set_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg);} *PRTMP_PRIVATE_SET_PROC, RTMP_PRIVATE_SUPPORT_PROC[] = { {"DriverVersion", Set_DriverVersion_Proc}, {"CountryRegion", Set_CountryRegion_Proc}, {"CountryRegionABand", Set_CountryRegionABand_Proc}, {"SSID", Set_SSID_Proc}, {"WirelessMode", Set_WirelessMode_Proc}, {"TxBurst", Set_TxBurst_Proc}, {"TxPreamble", Set_TxPreamble_Proc}, {"TxPower", Set_TxPower_Proc}, {"Channel", Set_Channel_Proc}, {"BGProtection", Set_BGProtection_Proc}, {"RTSThreshold", Set_RTSThreshold_Proc}, {"FragThreshold", Set_FragThreshold_Proc}, #ifdef DOT11_N_SUPPORT {"HtBw", Set_HtBw_Proc}, {"HtMcs", Set_HtMcs_Proc}, {"HtGi", Set_HtGi_Proc}, {"HtOpMode", Set_HtOpMode_Proc}, {"HtExtcha", Set_HtExtcha_Proc}, {"HtMpduDensity", Set_HtMpduDensity_Proc}, {"HtBaWinSize", Set_HtBaWinSize_Proc}, {"HtRdg", Set_HtRdg_Proc}, {"HtAmsdu", Set_HtAmsdu_Proc}, {"HtAutoBa", Set_HtAutoBa_Proc}, {"HtBaDecline", Set_BADecline_Proc}, {"HtProtect", Set_HtProtect_Proc}, {"HtMimoPs", Set_HtMimoPs_Proc},#endif // DOT11_N_SUPPORT // #ifdef AGGREGATION_SUPPORT {"PktAggregate", Set_PktAggregate_Proc}, #endif // AGGREGATION_SUPPORT //#ifdef WMM_SUPPORT {"WmmCapable", Set_WmmCapable_Proc}, #endif {"IEEE80211H", Set_IEEE80211H_Proc}, {"NetworkType", Set_NetworkType_Proc}, {"AuthMode", Set_AuthMode_Proc}, {"EncrypType", Set_EncrypType_Proc}, {"DefaultKeyID", Set_DefaultKeyID_Proc}, {"Key1", Set_Key1_Proc}, {"Key2", Set_Key2_Proc}, {"Key3", Set_Key3_Proc}, {"Key4", Set_Key4_Proc}, {"WPAPSK", Set_WPAPSK_Proc}, {"ResetCounter", Set_ResetStatCounter_Proc}, {"PSMode", Set_PSMode_Proc},#ifdef DBG {"Debug", Set_Debug_Proc}, #endif // DBG //#ifdef RALINK_ATE {"ATE", Set_ATE_Proc}, {"ATEDA", Set_ATE_DA_Proc}, {"ATESA", Set_ATE_SA_Proc}, {"ATEBSSID", Set_ATE_BSSID_Proc}, {"ATECHANNEL", Set_ATE_CHANNEL_Proc}, {"ATETXPOW0", Set_ATE_TX_POWER0_Proc}, {"ATETXPOW1", Set_ATE_TX_POWER1_Proc}, {"ATETXANT", Set_ATE_TX_Antenna_Proc}, {"ATERXANT", Set_ATE_RX_Antenna_Proc}, {"ATETXFREQOFFSET", Set_ATE_TX_FREQOFFSET_Proc}, {"ATETXBW", Set_ATE_TX_BW_Proc}, {"ATETXLEN", Set_ATE_TX_LENGTH_Proc}, {"ATETXCNT", Set_ATE_TX_COUNT_Proc}, {"ATETXMCS", Set_ATE_TX_MCS_Proc}, {"ATETXMODE", Set_ATE_TX_MODE_Proc}, {"ATETXGI", Set_ATE_TX_GI_Proc}, {"ATERXFER", Set_ATE_RX_FER_Proc}, {"ATERRF", Set_ATE_Read_RF_Proc}, {"ATEWRF1", Set_ATE_Write_RF1_Proc}, {"ATEWRF2", Set_ATE_Write_RF2_Proc}, {"ATEWRF3", Set_ATE_Write_RF3_Proc}, {"ATEWRF4", Set_ATE_Write_RF4_Proc}, {"ATELDE2P", Set_ATE_Load_E2P_Proc}, {"ATERE2P", Set_ATE_Read_E2P_Proc}, {"ATESHOW", Set_ATE_Show_Proc}, {"ATEHELP", Set_ATE_Help_Proc},#ifdef RALINK_28xx_QA {"TxStop", Set_TxStop_Proc}, {"RxStop", Set_RxStop_Proc}, #endif // RALINK_28xx_QA //#endif // RALINK_ATE //#ifdef WPA_SUPPLICANT_SUPPORT {"WpaSupport", Set_Wpa_Support},#endif // WPA_SUPPLICANT_SUPPORT // {"FixedTxMode", Set_FixedTxMode_Proc},#ifdef CONFIG_APSTA_MIXED_SUPPORT {"OpMode", Set_OpMode_Proc},#endif // CONFIG_APSTA_MIXED_SUPPORT //#ifdef DOT11_N_SUPPORT {"TGnWifiTest", Set_TGnWifiTest_Proc}, {"ForceGF", Set_ForceGF_Proc},#endif // DOT11_N_SUPPORT //#ifdef QOS_DLS_SUPPORT {"DlsAddEntry", Set_DlsAddEntry_Proc}, {"DlsTearDownEntry", Set_DlsTearDownEntry_Proc},#endif // QOS_DLS_SUPPORT // {"LongRetry", Set_LongRetryLimit_Proc}, {"ShortRetry", Set_ShortRetryLimit_Proc},#ifdef EXT_BUILD_CHANNEL_LIST {"11dClientMode", Set_Ieee80211dClientMode_Proc},#endif // EXT_BUILD_CHANNEL_LIST //#ifdef CARRIER_DETECTION_SUPPORT {"CarrierDetect", Set_CarrierDetect_Proc},#endif // CARRIER_DETECTION_SUPPORT ////2008/09/11:KH add to support efuse<--//2008/09/11:KH add to support efuse--> {"HtDisallowTKIP", Set_HtDisallowTKIP_Proc}, {"BeaconLostTime", Set_BeaconLostTime_Proc}, {"AutoRoaming", Set_AutoRoaming_Proc}, {"SiteSurvey", Set_SiteSurvey_Proc}, {"ForceTxBurst", Set_ForceTxBurst_Proc}, {NULL,}};VOID RTMPAddKey( IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey){ ULONG KeyIdx; MAC_TABLE_ENTRY *pEntry; DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { if (pKey->KeyIndex & 0x80000000) { if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { NdisZeroMemory(pAd->StaCfg.PMK, 32); NdisMoveMemory(pAd->StaCfg.PMK, pKey->KeyMaterial, pKey->KeyLength); goto end; } // Update PTK NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pKey->KeyMaterial, LEN_TKIP_EK);#ifdef WPA_SUPPLICANT_SUPPORT if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) { NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); } else#endif // WPA_SUPPLICANT_SUPPORT // { NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); } // Decide its ChiperAlg if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -