📄 rtmp_info.c
字号:
{
Status = copy_from_user(&Ssid, wrq->u.data.pointer, wrq->u.data.length);
pSsid = &Ssid;
if (pSsid->SsidLength > MAX_LEN_OF_SSID)
Status = -EINVAL;
else
{
// reset SSID to null
if (pSsid->SsidLength == 0)
{
memcpy(pSsid->Ssid, "", 0);
}
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_BSSID:
if (wrq->u.data.length != sizeof(NDIS_802_11_MAC_ADDRESS))
Status = -EINVAL;
else
{
Status = copy_from_user(&Bssid, wrq->u.data.pointer, wrq->u.data.length);
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_BSSID, TRUE, &Bssid, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_BSSID %02x:%02x:%02x:%02x:%02x:%02x\n",
Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5]);
}
break;
case RT_OID_802_11_RADIO:
if (wrq->u.data.length != sizeof(BOOLEAN))
Status = -EINVAL;
else
{
Status = copy_from_user(&RadioState, wrq->u.data.pointer, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_RADIO (=%d)\n", RadioState);
if (pAdapter->PortCfg.bSwRadio != RadioState)
{
pAdapter->PortCfg.bSwRadio = RadioState;
if (pAdapter->PortCfg.bRadio != (pAdapter->PortCfg.bHwRadio && pAdapter->PortCfg.bSwRadio))
{
pAdapter->PortCfg.bRadio = (pAdapter->PortCfg.bHwRadio && pAdapter->PortCfg.bSwRadio);
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_SET_RADIO, TRUE, NULL, 0);
}
}
}
break;
case RT_OID_802_11_PHY_MODE:
if (wrq->u.data.length != sizeof(RT_802_11_PHY_MODE))
Status = -EINVAL;
else
{
Status = copy_from_user(&PhyMode, wrq->u.data.pointer, wrq->u.data.length);
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_PHY_MODE, TRUE, &PhyMode, sizeof(RT_802_11_PHY_MODE));
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_PHY_MODE (=%d)\n", PhyMode);
}
break;
case RT_OID_802_11_STA_CONFIG:
if (wrq->u.data.length != sizeof(RT_802_11_STA_CONFIG))
Status = -EINVAL;
else
{
Status = copy_from_user(&StaConfig, wrq->u.data.pointer, wrq->u.data.length);
pStaConfig = &StaConfig;
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_STA_CONFIG, TRUE, pStaConfig, sizeof(RT_802_11_STA_CONFIG));
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_SET_STA_CONFIG (Burst=%d,BGprot=%d,ShortSlot=%d,Adhoc=%d\n",
pStaConfig->EnableTxBurst,
pStaConfig->UseBGProtection,
pStaConfig->UseShortSlotTime,
pStaConfig->AdhocMode);
}
break;
case OID_802_11_DESIRED_RATES:
if (wrq->u.data.length != sizeof(NDIS_802_11_RATES))
Status = -EINVAL;
else
{
Status = copy_from_user(&aryRates, wrq->u.data.pointer, wrq->u.data.length);
NdisZeroMemory(pAdapter->PortCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES);
NdisMoveMemory(pAdapter->PortCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES));
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_DESIRED_RATES (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n",
pAdapter->PortCfg.DesireRate[0],pAdapter->PortCfg.DesireRate[1],
pAdapter->PortCfg.DesireRate[2],pAdapter->PortCfg.DesireRate[3],
pAdapter->PortCfg.DesireRate[4],pAdapter->PortCfg.DesireRate[5],
pAdapter->PortCfg.DesireRate[6],pAdapter->PortCfg.DesireRate[7] );
// Changing DesiredRate may affect the MAX TX rate we used to TX frames out
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_UPDATE_TX_RATE, TRUE, NULL, 0);
}
break;
case RT_OID_802_11_PREAMBLE:
if (wrq->u.data.length != sizeof(RT_802_11_PREAMBLE))
Status = -EINVAL;
else
{
Status = copy_from_user(&Preamble, wrq->u.data.pointer, wrq->u.data.length);
if ((Preamble == Rt802_11PreambleShort) || (Preamble == Rt802_11PreambleLong) || (Preamble == Rt802_11PreambleAuto))
{
RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_PREAMBLE, TRUE, &Preamble, sizeof(RT_802_11_PREAMBLE));
}
else
{
Status = -EINVAL;
break;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_SET_PREAMBLE (=%d)\n", Preamble);
}
break;
case OID_802_11_WEP_STATUS:
if (wrq->u.data.length != sizeof(NDIS_802_11_WEP_STATUS))
Status = -EINVAL;
else
{
Status = copy_from_user(&WepStatus, wrq->u.data.pointer, wrq->u.data.length);
// Since TKIP, AES, WEP are all supported. It should not have any invalid setting
if (WepStatus <= Ndis802_11Encryption3KeyAbsent)
{
if (pAdapter->PortCfg.WepStatus != WepStatus)
{
// Config has changed
pAdapter->bConfigChanged = TRUE;
}
//Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_WEP_STATUS, TRUE, &WepStatus, sizeof(NDIS_802_11_WEP_STATUS));
pAdapter->PortCfg.WepStatus = WepStatus;
pAdapter->PortCfg.OrigWepStatus = WepStatus;
pAdapter->PortCfg.PairCipher = WepStatus;
pAdapter->PortCfg.GroupCipher = WepStatus;
}
else
{
Status = -EINVAL;
break;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_WEP_STATUS (=%d)\n",WepStatus);
}
break;
case OID_802_11_AUTHENTICATION_MODE:
if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE))
Status = -EINVAL;
else
{
Status = 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_INFRASTRUCTURE_MODE:
if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE))
Status = -EINVAL;
else
{
Status = copy_from_user(&BssType, wrq->u.data.pointer, wrq->u.data.length);
if (BssType == Ndis802_11IBSS)
{
if (pAdapter->PortCfg.BssType != BSS_ADHOC)
{
// 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->bConfigChanged = TRUE;
}
pAdapter->PortCfg.BssType = BSS_ADHOC;
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 RT_OID_802_11_RESET_COUNTERS:
NdisZeroMemory(&pAdapter->WlanCounters, sizeof(COUNTER_802_11));
NdisZeroMemory(&pAdapter->Counters8023, sizeof(COUNTER_802_3));
NdisZeroMemory(&pAdapter->RalinkCounters, sizeof(COUNTER_RALINK));
pAdapter->Counters8023.RxNoBuffer = 0;
pAdapter->Counters8023.GoodReceives = 0;
pAdapter->Counters8023.RxNoBuffer = 0;
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_RESET_COUNTERS (=%d)\n", pAdapter->Counters8023.GoodReceives);
break;
case OID_802_11_RTS_THRESHOLD:
if (wrq->u.data.length != sizeof(NDIS_802_11_RTS_THRESHOLD))
Status = -EINVAL;
else
{
Status = copy_from_user(&RtsThresh, wrq->u.data.pointer, wrq->u.data.length);
if (RtsThresh > MAX_RTS_THRESHOLD)
Status = -EINVAL;
else
pAdapter->PortCfg.RtsThreshold = (USHORT)RtsThresh;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_RTS_THRESHOLD (=%d)\n",RtsThresh);
break;
case OID_802_11_FRAGMENTATION_THRESHOLD:
if (wrq->u.data.length != sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD))
Status = -EINVAL;
else
{
Status = copy_from_user(&FragThresh, wrq->u.data.pointer, wrq->u.data.length);
pAdapter->PortCfg.bFragmentZeroDisable = FALSE;
if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD)
{
if (FragThresh == 0)
{
pAdapter->PortCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;
pAdapter->PortCfg.bFragmentZeroDisable = TRUE;
}
else
Status = -EINVAL;
}
else
pAdapter->PortCfg.FragmentThreshold = (USHORT)FragThresh;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_FRAGMENTATION_THRESHOLD (=%d) \n",FragThresh);
break;
case OID_802_11_POWER_MODE:
if (wrq->u.data.length != sizeof(NDIS_802_11_POWER_MODE))
Status = -EINVAL;
else
{
Status = copy_from_user(&PowerMode, wrq->u.data.pointer, wrq->u.data.length);
// save user's policy here, but not change PortCfg.Psm immediately
if (PowerMode == Ndis802_11PowerModeCAM)
{
// clear PSM bit immediately
MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM);
if (pAdapter->PortCfg.bWindowsACCAMEnable == FALSE)
pAdapter->PortCfg.WindowsPowerMode = PowerMode;
pAdapter->PortCfg.WindowsBatteryPowerMode = PowerMode;
}
else if (PowerMode == Ndis802_11PowerModeMAX_PSP)
{
// do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
// to exclude certain situations.
// MlmeSetPsmBit(pAdapter, PWR_SAVE);
if (pAdapter->PortCfg.bWindowsACCAMEnable == FALSE)
pAdapter->PortCfg.WindowsPowerMode = PowerMode;
pAdapter->PortCfg.WindowsBatteryPowerMode = PowerMode;
OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM);
pAdapter->PortCfg.DefaultListenCount = 5;
}
else if (PowerMode == Ndis802_11PowerModeFast_PSP)
{
// do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange()
// to exclude certain situations.
// MlmeSetPsmBit(pAdapter, PWR_SAVE);
OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM);
if (pAdapter->PortCfg.bWindowsACCAMEnable == FALSE)
pAdapter->PortCfg.WindowsPowerMode = PowerMode;
pAdapter->PortCfg.WindowsBatteryPowerMode = PowerMode;
pAdapter->PortCfg.DefaultListenCount = 3;
}
else
Status = -EINVAL;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_POWER_MODE (=%d)\n",PowerMode);
break;
case OID_802_11_TX_POWER_LEVEL:
if (wrq->u.data.length != sizeof(NDIS_802_11_TX_POWER_LEVEL))
Status = -EINVAL;
else
{
Status = copy_from_user(&TxPowerLevel, wrq->u.data.pointer, wrq->u.data.length);
if (TxPowerLevel > MAX_TX_POWER_LEVEL)
Status = -EINVAL;
else
pAdapter->PortCfg.TxPower = (UCHAR)TxPowerLevel;
}
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_TX_POWER_LEVEL (=%d) \n",TxPowerLevel);
break;
case RT_OID_802_11_TX_POWER_LEVEL_1:
if (wrq->u.data.length < sizeof(ULONG))
Status = -EINVAL;
else
{
ULONG PowerTemp;
Status = copy_from_user(&PowerTemp, wrq->u.data.pointer, wrq->u.data.length);
if (PowerTemp > 100)
PowerTemp = 0xffffffff; // AUTO
pAdapter->PortCfg.TxPowerDefault = PowerTemp; //keep current setting.
// Only update TxPowerPercentage if the value is smaller than current AP setting
// TODO: 2005-03-08 john removed the following line.
// if (pAdapter->PortCfg.TxPowerDefault < pAdapter->PortCfg.TxPowerPercentage)
pAdapter->PortCfg.TxPowerPercentage = pAdapter->PortCfg.TxPowerDefault;
DBGPRINT(RT_DEBUG_TRACE, "Set::RT_OID_802_11_TX_POWER_LEVEL_1 (=%d)\n", pAdapter->PortCfg.TxPowerPercentage);
}
break;
case OID_802_11_PRIVACY_FILTER:
if (wrq->u.data.length != sizeof(NDIS_802_11_PRIVACY_FILTER))
Status = -EINVAL;
else
{
NDIS_802_11_PRIVACY_FILTER Filter;
Status = 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_NETWORK_TYPE_IN_USE:
if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_TYPE))
Status = -EINVAL;
else
{
Status = copy_from_user(&NetType, wrq->u.data.pointer, wrq->u.data.length);
RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_NETWORK_TYPE_IN_USE, TRUE, &NetType, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_NETWORK_TYPE_IN_USE (=%d)\n",NetType);
}
break;
case OID_802_11_RX_ANTENNA_SELECTED:
if (wrq->u.data.length != sizeof(NDIS_802_11_ANTENNA))
Status = -EINVAL;
else
{
Status = copy_from_user(&AntDiv, wrq->u.data.pointer, wrq->u.data.length);
RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_RX_ANTENNA_SELECTED, FALSE, &AntDiv, wrq->u.data.length);
}
break;
case OID_802_11_TX_ANTENNA_SELECTED:
if (wrq->u.data.length != sizeof(NDIS_802_11_ANTENNA))
Status = -EINVAL;
else
{
Status = copy_from_user(&AntDiv, wrq->u.data.pointer, wrq->u.data.length);
RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_TX_ANTENNA_SELECTED, FALSE, &AntDiv, wrq->u.data.length);
}
break;
// For WPA PSK PMK key
case RT_OID_802_11_ADD_WPA:
DBGPRINT(RT_DEBUG_ERROR, "!!!!!!!!!!!!!!!!!!!!!Set::RT_OID_802_11_ADD_WPA !!\n");
pKey = kmalloc(wrq->u.data.length, GFP_KERNEL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -