📄 rtusb_info.c
字号:
wrq->u.data.length = BssLen; DBGPRINT(RT_DEBUG_INFO,"copy to user in OID_802_11_BSSID_LIST = %d\n",wrq->u.data.length); if(copy_to_user(wrq->u.data.pointer, pBssidList, wrq->u.data.length)) Status = -EFAULT; kfree(pBssidList); break; case OID_802_11_TX_POWER_LEVEL: wrq->u.data.length = sizeof(ULONG); if(copy_to_user(wrq->u.data.pointer, &pAdapter->PortCfg.TxPower, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_TX_POWER_LEVEL %x\n",pAdapter->PortCfg.TxPower); break; case OID_802_3_CURRENT_ADDRESS: wrq->u.data.length = ETH_LENGTH_OF_ADDRESS; if(copy_to_user(wrq->u.data.pointer, &pAdapter->CurrentAddress, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_3_CURRENT_ADDRESS \n"); break; case OID_GEN_MEDIA_CONNECT_STATUS: DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_MEDIA_CONNECT_STATUS \n"); wrq->u.data.length = sizeof(NDIS_MEDIA_STATE); if(copy_to_user(wrq->u.data.pointer, &pAdapter->MediaState, wrq->u.data.length)) Status = -EFAULT; break; case OID_802_11_BSSID: if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) { if(copy_to_user(wrq->u.data.pointer, &pAdapter->PortCfg.Bssid, sizeof(MACADDR))) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "IOCTL::SIOCGIWAP(=%02x:%02x:%02x:%02x:%02x:%02x)\n", pAdapter->PortCfg.Bssid.Octet[0],pAdapter->PortCfg.Bssid.Octet[1],pAdapter->PortCfg.Bssid.Octet[2], pAdapter->PortCfg.Bssid.Octet[3],pAdapter->PortCfg.Bssid.Octet[4],pAdapter->PortCfg.Bssid.Octet[5]); } else { DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_BSSID(=EMPTY)\n"); Status = -ENOTCONN; } break; case OID_802_11_SSID: Ssid.SsidLength = pAdapter->PortCfg.SsidLen; memset(Ssid.Ssid, 0, MAX_LEN_OF_SSID); memcpy(Ssid.Ssid, pAdapter->PortCfg.Ssid, Ssid.SsidLength); wrq->u.data.length = sizeof(NDIS_802_11_SSID); if(copy_to_user(wrq->u.data.pointer, &Ssid, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_SSID (Len=%d, ssid=%s)\n", Ssid.SsidLength,Ssid.Ssid); break; case RT_OID_802_11_QUERY_LINK_STATUS: LinkStatus.CurrTxRate = RateIdTo500Kbps[pAdapter->PortCfg.TxRate]; // unit : 500 kbps LinkStatus.ChannelQuality = pAdapter->Mlme.ChannelQuality; LinkStatus.RxByteCount = pAdapter->RalinkCounters.ReceivedByteCount; LinkStatus.TxByteCount = pAdapter->RalinkCounters.TransmittedByteCount; wrq->u.data.length = sizeof(RT_802_11_LINK_STATUS); if(copy_to_user(wrq->u.data.pointer, &LinkStatus, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_LINK_STATUS\n"); break; case OID_802_11_CONFIGURATION: Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION); Configuration.BeaconPeriod = pAdapter->PortCfg.BeaconPeriod; Configuration.ATIMWindow = pAdapter->PortCfg.AtimWin; if (ADHOC_ON(pAdapter)) {MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.IbssConfig.Channel, Configuration.DSConfig);} else {MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.Channel, Configuration.DSConfig);} wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION); if(copy_to_user(wrq->u.data.pointer, &Configuration, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_ERROR, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,bssidChannel=%d) \n", Configuration.BeaconPeriod, Configuration.ATIMWindow, pAdapter->PortCfg.IbssConfig.Channel); break; case OID_802_11_RSSI: ulInfo = pAdapter->PortCfg.LastRssi; wrq->u.data.length = sizeof(UCHAR); if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RSSI(=%d)\n", ulInfo); break; case OID_802_11_RSSI_TRIGGER: ulInfo = pAdapter->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET; wrq->u.data.length = sizeof(ulInfo); if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RSSI_TRIGGER(=%d)\n", ulInfo); break; case OID_802_11_STATISTICS: DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_STATISTICS \n"); // Update FCS counters // Sanity check for calculation of sucessful count if (pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart < pAdapter->WlanCounters.RetryCount.QuadPart) pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart = pAdapter->WlanCounters.RetryCount.QuadPart; Statistics.TransmittedFragmentCount.QuadPart = pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart; Statistics.MulticastTransmittedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastTransmittedFrameCount.QuadPart; Statistics.FailedCount.QuadPart = pAdapter->WlanCounters.FailedCount.QuadPart; Statistics.RetryCount.QuadPart = pAdapter->WlanCounters.RetryCount.QuadPart; Statistics.MultipleRetryCount.QuadPart = pAdapter->WlanCounters.MultipleRetryCount.QuadPart; Statistics.RTSSuccessCount.QuadPart = pAdapter->WlanCounters.RTSSuccessCount.QuadPart; Statistics.RTSFailureCount.QuadPart = pAdapter->WlanCounters.RTSFailureCount.QuadPart; Statistics.ACKFailureCount.QuadPart = pAdapter->WlanCounters.ACKFailureCount.QuadPart; Statistics.FrameDuplicateCount.QuadPart = pAdapter->WlanCounters.FrameDuplicateCount.QuadPart; Statistics.ReceivedFragmentCount.QuadPart = pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart; Statistics.MulticastReceivedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastReceivedFrameCount.QuadPart; Statistics.FCSErrorCount.QuadPart = pAdapter->WlanCounters.FCSErrorCount.QuadPart; wrq->u.data.length = sizeof(NDIS_802_11_STATISTICS); if(copy_to_user(wrq->u.data.pointer, &Statistics, wrq->u.data.length)) Status = -EFAULT; break; case OID_GEN_RCV_OK: DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_RCV_OK \n"); ulInfo = pAdapter->Counters.GoodReceives; wrq->u.data.length = sizeof(ulInfo); if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) Status = -EFAULT; break; case OID_GEN_RCV_NO_BUFFER: DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_RCV_NO_BUFFER \n"); ulInfo = pAdapter->Counters.RxNoBuffer; wrq->u.data.length = sizeof(ulInfo); if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) Status = -EFAULT; break; case RT_OID_802_11_PHY_MODE: ulInfo = (ULONG)pAdapter->PortCfg.PhyMode; wrq->u.data.length = sizeof(ulInfo); if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_PHY_MODE (=%d)\n", ulInfo); break; case OID_802_11_RTS_THRESHOLD: RtsThresh = pAdapter->PortCfg.RtsThreshold; wrq->u.data.length = sizeof(RtsThresh); if(copy_to_user(wrq->u.data.pointer, &RtsThresh, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RTS_THRESHOLD(=%d)\n", RtsThresh); break; case OID_802_11_FRAGMENTATION_THRESHOLD: FragThresh = pAdapter->PortCfg.FragmentThreshold; if (pAdapter->PortCfg.bFragmentZeroDisable == TRUE) FragThresh = 0; wrq->u.data.length = sizeof(FragThresh); if(copy_to_user(wrq->u.data.pointer, &FragThresh, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_FRAGMENTATION_THRESHOLD(=%d)\n", FragThresh); break; case OID_802_11_POWER_MODE: PowerMode = pAdapter->PortCfg.WindowsPowerMode; wrq->u.data.length = sizeof(PowerMode); if(copy_to_user(wrq->u.data.pointer, &PowerMode, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_POWER_MODE(=%d)\n", PowerMode); break; case RT_OID_802_11_RADIO: RadioState = (BOOLEAN) pAdapter->PortCfg.bSwRadio; wrq->u.data.length = sizeof(RadioState); if(copy_to_user(wrq->u.data.pointer, &RadioState, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_QUERY_RADIO (=%d)\n", RadioState); break; case OID_802_11_INFRASTRUCTURE_MODE: if (ADHOC_ON(pAdapter)) BssType = Ndis802_11IBSS; else if (INFRA_ON(pAdapter)) BssType = Ndis802_11Infrastructure; else BssType = Ndis802_11AutoUnknown; wrq->u.data.length = sizeof(BssType); if(copy_to_user(wrq->u.data.pointer, &BssType, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_INFRASTRUCTURE_MODE(=%d)\n", BssType); break; case RT_OID_802_11_PREAMBLE: PreamType = pAdapter->PortCfg.WindowsTxPreamble; wrq->u.data.length = sizeof(PreamType); if(copy_to_user(wrq->u.data.pointer, &PreamType, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_PREAMBLE(=%d)\n", PreamType); break; case OID_802_11_AUTHENTICATION_MODE: AuthMode = pAdapter->PortCfg.AuthMode; wrq->u.data.length = sizeof(AuthMode); if(copy_to_user(wrq->u.data.pointer, &AuthMode, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_AUTHENTICATION_MODE(=%d)\n", AuthMode); break; case OID_802_11_WEP_STATUS: WepStatus = pAdapter->PortCfg.WepStatus; wrq->u.data.length = sizeof(WepStatus); if(copy_to_user(wrq->u.data.pointer, &WepStatus, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_WEP_STATUS(=%d)\n", WepStatus); break; case RT_OID_802_11_QUERY_NOISE_LEVEL: LastR17Value = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value); wrq->u.data.length = sizeof(UCHAR); if(copy_to_user(wrq->u.data.pointer, &LastR17Value, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_QUERY_NOISE_LEVEL (=%d)\n", LastR17Value); break; case RT_OID_802_11_EXTRA_INFO: wrq->u.data.length = sizeof(ULONG); if(copy_to_user(wrq->u.data.pointer, &pAdapter->ExtraInfo, wrq->u.data.length)) Status = -EFAULT; DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_EXTRA_INFO (=%d)\n", pAdapter->ExtraInfo); break; default: DBGPRINT(RT_DEBUG_TRACE, "Query::unknown IOCTL's subcmd = 0x%08x\n", cmd); Status = -EOPNOTSUPP; break; } return Status;}INT RTMPSetInformation( IN PRT2570ADAPTER pAdapter, IN OUT struct ifreq *rq, IN INT cmd){ struct iwreq *wrq = (struct iwreq *) rq; NDIS_802_11_SSID Ssid, *pSsid=NULL; NDIS_802_11_MAC_ADDRESS Bssid; RT_802_11_PHY_MODE PhyMode; NDIS_802_11_RATES aryRates; RT_802_11_PREAMBLE Preamble; NDIS_802_11_WEP_STATUS WepStatus; NDIS_802_11_AUTHENTICATION_MODE AuthMode; NDIS_802_11_NETWORK_INFRASTRUCTURE BssType; NDIS_802_11_RTS_THRESHOLD RtsThresh; NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; NDIS_802_11_POWER_MODE PowerMode; NDIS_802_11_TX_POWER_LEVEL TxPowerLevel; NDIS_802_11_KEY Key; PNDIS_802_11_REMOVE_KEY pRemoveKey = NULL; NDIS_802_11_CONFIGURATION Config, *pConfig = NULL; ULONG Now; ULONG KeyIdx; INT Status = NDIS_STATUS_SUCCESS; UCHAR CountryRegion; BOOLEAN RadioState; NDIS_802_11_PRIVACY_FILTER Filter; NDIS_802_11_RSSI RssiTrigger; DBGPRINT(RT_DEBUG_INFO, "Set::RTMPSetInformation \n"); switch(cmd & 0x7FFF) { case OID_802_11_BSSID: DBGPRINT(RT_DEBUG_ERROR,"enter OID_802_11_BSSID in RTMPSetInformation\n"); if (wrq->u.data.length != sizeof(NDIS_802_11_MAC_ADDRESS)) Status = -EINVAL; else { if(copy_from_user(&Bssid, wrq->u.data.pointer, wrq->u.data.length)) Status = -EINVAL; pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE; Status = RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_BSSID, TRUE, &Bssid, wrq->u.data.length); } break; case OID_802_11_SSID: DBGPRINT(RT_DEBUG_ERROR,"enter OID_802_11_SSID in RTMPSetInformation\n"); if (wrq->u.data.length != sizeof(NDIS_802_11_SSID)) Status = -EINVAL; else { if(copy_from_user(&Ssid, wrq->u.data.pointer, wrq->u.data.length)) Status = -EINVAL; pSsid = &Ssid; if (pSsid->SsidLength > MAX_LEN_OF_SSID) Status = -EINVAL; else { Status =RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_SSID, TRUE, pSsid, sizeof(NDIS_802_11_SSID)); DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_SSID (Len=%d,Ssid=%s)\n", pSsid->SsidLength, pSsid->Ssid); } } break; case OID_802_11_INFRASTRUCTURE_MODE: if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE)) Status = -EINVAL; else { if(copy_from_user(&BssType, wrq->u.data.pointer, wrq->u.data.length)) Status = -EINVAL; if (BssType == Ndis802_11IBSS) { if (pAdapter->PortCfg.BssType != BSS_INDEP) { // Config has changed if INFRA_ON(pAdapter) { RTUSBEnqueueInternalCmd(pAdapter, RT_OID_LINK_DOWN); // First cancel linkdown timer DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event BB!\n"); } } pAdapter->PortCfg.BssType = BSS_INDEP; DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (AD-HOC)\n"); } else if (BssType == Ndis802_11Infrastructure) { if (pAdapter->PortCfg.BssType != BSS_INFRA) { // Config has changed // pAdapter->bConfigChanged = TRUE; if ADHOC_ON(pAdapter) RTUSBEnqueueInternalCmd(pAdapter, RT_OID_LINK_DOWN); } pAdapter->PortCfg.BssType = BSS_INFRA; DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (INFRA)\n"); } else { Status = -EINVAL; DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (unknown)\n"); } } // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key pAdapter->PortCfg.WpaState = SS_NOTUSE; break; case OID_802_11_ADD_KEY: DBGPRINT(RT_DEBUG_ERROR, "!!!!!!!!!!!!!!!!!!!!!Set::OID_802_11_ADD_KEY !!\n"); if(copy_from_user(&Key, wrq->u.data.pointer, wrq->u.data.length)) Status = -EINVAL; if (Key.Length != wrq->u.data.length) { Status = -EINVAL; DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_ADD_KEY, Failed!!\n"); } else { if (pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA) { Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_KEY, TRUE, &Key, wrq->u.data.length); } else // Old WEP stuff { KeyIdx = Key.KeyIndex & 0x0fffffff; Status = RTMPWPAWepKeySanity(pAdapter, &Key); if (Status == NDIS_STATUS_SUCCESS) Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_KEY_WEP, TRUE, &Key, wrq->u.data.length); } DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_ADD_KEY (id=0x%x, Len=%d-byte)\n", Key
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -