📄 rtusb_info.c
字号:
{MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.Channel, Configuration.DSConfig);}
wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION);
copy_to_user(wrq->u.data.pointer, &Configuration, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &Statistics, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
break;
case RT_OID_802_11_PHY_MODE:
ulInfo = (ULONG)pAdapter->PortCfg.PhyMode;
wrq->u.data.length = sizeof(ulInfo);
copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &RtsThresh, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &FragThresh, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &PowerMode, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &RadioState, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &BssType, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &PreamType, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &AuthMode, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &WepStatus, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &LastR17Value, wrq->u.data.length);
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);
copy_to_user(wrq->u.data.pointer, &pAdapter->ExtraInfo, wrq->u.data.length);
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
{
copy_from_user(&Bssid, wrq->u.data.pointer, wrq->u.data.length);
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
{
copy_from_user(&Ssid, wrq->u.data.pointer, wrq->u.data.length);
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
{
copy_from_user(&BssType, wrq->u.data.pointer, wrq->u.data.length);
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");
copy_from_user(&Key, wrq->u.data.pointer, wrq->u.data.length);
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.KeyIndex, Key.KeyLength);
}
break;
case OID_802_11_REMOVE_KEY:
DBGPRINT(RT_DEBUG_ERROR, "Set::OID_802_11_REMOVE_KEY!!\n");
pRemoveKey = kmalloc(wrq->u.data.length, GFP_KERNEL);
copy_from_user(pRemoveKey, wrq->u.data.pointer, wrq->u.data.length);
if (pRemoveKey->Length != wrq->u.data.length)
{
Status = -EINVAL;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_REMOVE_KEY, Failed!!\n");
}
else
{
if (pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA)
{
Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_REMOVE_KEY, TRUE, pRemoveKey, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_REMOVE_KEY, Remove WPA Key!!\n");
}
else
{
KeyIdx = pRemoveKey->KeyIndex;
if (KeyIdx & 0x80000000)
{
// Should never set default bit when remove key
Status = -EINVAL;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_REMOVE_KEY, Failed!!(Should never set default bit when remove key)\n");
}
else
{
KeyIdx = KeyIdx & 0x0fffffff;
if (KeyIdx > 3)
{
Status = -EINVAL;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_REMOVE_KEY, Failed!!(KeyId[%d] out of range)\n", KeyIdx);
}
else
{
pAdapter->PortCfg.SharedKey[KeyIdx].KeyLen = 0;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_REMOVE_KEY (id=0x%x, Len=%d-byte)\n", pRemoveKey->KeyIndex, pRemoveKey->Length);
}
}
}
}
kfree(pRemoveKey);
break;
case OID_802_11_AUTHENTICATION_MODE:
if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
Status = -EINVAL;
else
{
copy_from_user(&AuthMode, wrq->u.data.pointer, wrq->u.data.length);
if (AuthMode > Ndis802_11AuthModeMax)
{
Status = -EINVAL;
break;
}
else
{
if (pAdapter->PortCfg.AuthMode != AuthMode)
{
// Config has changed
pAdapter->bConfigChanged = TRUE;
}
pAdapter->PortCfg.AuthMode = AuthMode;
}
pAdapter->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_AUTHENTICATION_MODE (=%d) \n",pAdapter->PortCfg.AuthMode);
}
break;
case OID_802_11_PRIVACY_FILTER:
if (wrq->u.data.length != sizeof(NDIS_802_11_PRIVACY_FILTER))
Status = -EINVAL;
else
{
copy_from_user(&Filter, wrq->u.data.pointer, wrq->u.data.length);
if ((Filter == Ndis802_11PrivFilterAcceptAll) || (Filter == Ndis802_11PrivFilter8021xWEP))
pAdapter->PortCfg.PrivacyFilter = Filter;
else
Status = -EINVAL;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_PRIVACY_FILTER (=%d) \n",pAdapter->PortCfg.PrivacyFilter);
break;
case OID_802_11_BSSID_LIST_SCAN:
Now = jiffies;
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_BSSID_LIST_SCAN \n");
if (pAdapter->ScanAllowed == FALSE)
{
DBGPRINT(RT_DEBUG_TRACE, "!!! Link UP, ignore this set::OID_802_11_BSSID_LIST_SCAN\n");
pAdapter->PortCfg.IgnoredScanNumber = 99;
return NDIS_STATUS_SUCCESS;
}
i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -