📄 oidproc.c
字号:
*BytesNeeded = MRVDRV_ETH_ADDR_LEN;
return NDIS_STATUS_INVALID_LENGTH;
}
else
{
MoveSource = (PVOID)Adapter->CurrentBSSID;
MoveBytes = MRVDRV_ETH_ADDR_LEN;
}
break;
case OID_802_11_SSID:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_SSID ****\n"));
/*
if (Adapter->MediaConnectStatus == NdisMediaStateDisconnected)
{
MoveBytes = 0;
}
else
*/
{
if ( InformationBufferLength < sizeof(NDIS_802_11_SSID))
{
*BytesNeeded = sizeof(NDIS_802_11_SSID);
return NDIS_STATUS_INVALID_LENGTH;
}
if ( NdisEqualMemory( &(Adapter->CurrentSSID),
&(Adapter->NullSSID),
sizeof(NDIS_802_11_SSID)))
{
MoveBytes = 0;
DBGPRINT(DBG_OID,("Current SSID is null!\n"));
}
else
{
DBGPRINT(DBG_OID,("Current SSID is %s\n", Adapter->CurrentSSID.Ssid));
MoveSource = (PVOID)&Adapter->CurrentSSID;
MoveBytes = sizeof(NDIS_802_11_SSID);
// HexDump(DBG_OID, "CurrentSSID: ", (PUCHAR)&Adapter->CurrentSSID,
// sizeof(NDIS_802_11_SSID));
}
}
break;
case OID_802_11_POWER_MODE:
DBGPRINT(DBG_OID | DBG_SP,("REQUEST - OID_802_11_POWER_MODE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_POWER_MODE) )
{
*BytesNeeded = sizeof(NDIS_802_11_POWER_MODE);
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)&Adapter->PSMode;
MoveBytes = sizeof(NDIS_802_11_POWER_MODE);
break;
case OID_802_11_RSSI:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_RSSI (%d)****\n",
Adapter->LastRSSI));
if( InformationBufferLength < sizeof(NDIS_802_11_RSSI) )
{
*BytesNeeded = sizeof(NDIS_802_11_RSSI);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericLONG = Adapter->LastRSSI;
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
break;
case OID_802_11_RSSI_TRIGGER:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_RSSI_TRIGGER ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_RSSI) )
{
*BytesNeeded = sizeof(NDIS_802_11_RSSI);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericLONG = Adapter->RSSITriggerValue;
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
break;
case OID_802_11_INFRASTRUCTURE_MODE:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_INFRASTRUCTURE_MODE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE) )
{
*BytesNeeded = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE);
return NDIS_STATUS_INVALID_LENGTH;
}
if (Adapter->ulCurrentBSSIDIndex < MRVDRV_MAX_BSSID_LIST)
{
GenericULONG = Adapter->InfrastructureMode;
}
break;
case OID_802_11_FRAGMENTATION_THRESHOLD:
if( InformationBufferLength < sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD) )
{
*BytesNeeded = sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD);
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
return NDIS_STATUS_FAILURE;
else
Status = NDIS_STATUS_PENDING;
break;
case OID_802_11_RTS_THRESHOLD:
if( InformationBufferLength < sizeof(NDIS_802_11_RTS_THRESHOLD) )
{
*BytesNeeded = sizeof(NDIS_802_11_RTS_THRESHOLD);
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
return NDIS_STATUS_FAILURE;
else
Status = NDIS_STATUS_PENDING;
break;
case OID_802_11_CONFIGURATION:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_CONFIGURATION ****\n"));
if ( InformationBufferLength < sizeof(NDIS_802_11_CONFIGURATION) )
{
*BytesNeeded = sizeof(NDIS_802_11_CONFIGURATION);
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)&(Adapter->CurrentConfiguration);
MoveBytes = sizeof(NDIS_802_11_CONFIGURATION);
break;
case OID_802_11_SUPPORTED_RATES:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_SUPPORTED_RATES ****\n"));
if( InformationBufferLength < MRVDRV_NUM_SUPPORTED_RATES )
{
*BytesNeeded = MRVDRV_NUM_SUPPORTED_RATES;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)MrvDrvSupportedRates;
MoveBytes = MRVDRV_NUM_SUPPORTED_RATES;
break;
case OID_802_11_DESIRED_RATES:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_DESIRED_RATES ****\n"));
if( InformationBufferLength < 8 )
{
*BytesNeeded = 8;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_DATA_RATE,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
return NDIS_STATUS_FAILURE;
else
Status = NDIS_STATUS_PENDING;
*BytesWritten=8;
break;
case OID_802_11_STATISTICS:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_STATISTICS ****\n"));
if ( InformationBufferLength < sizeof(NDIS_802_11_STATISTICS) )
{
*BytesNeeded = sizeof(NDIS_802_11_STATISTICS);
return NDIS_STATUS_INVALID_LENGTH;
}
// If we use timer to handle statistics update , we just report
// current statistics, otherwise, we need to send command and
// return NDIS_STATUS_PENDING
// We can also call NdisMoveMemory() to hadnle it
MoveSource = (PVOID)InformationBuffer;
pn11Stat = (PNDIS_802_11_STATISTICS)InformationBuffer;
pn11Stat->Length = sizeof(NDIS_802_11_STATISTICS);
pn11Stat->TransmittedFragmentCount.LowPart =
Adapter->TransmittedFragmentCount.LowPart;
pn11Stat->TransmittedFragmentCount.HighPart =
Adapter->TransmittedFragmentCount.HighPart;
pn11Stat->MulticastTransmittedFrameCount.LowPart =
Adapter->MulticastTransmittedFrameCount.LowPart;
pn11Stat->MulticastTransmittedFrameCount.HighPart =
Adapter->MulticastTransmittedFrameCount.HighPart;
pn11Stat->FailedCount.LowPart =
Adapter->FailedCount.LowPart;
pn11Stat->FailedCount.HighPart =
Adapter->FailedCount.HighPart;
pn11Stat->RetryCount.LowPart =
Adapter->RetryCount.LowPart;
pn11Stat->RetryCount.HighPart =
Adapter->RetryCount.HighPart;
pn11Stat->MultipleRetryCount.LowPart =
Adapter->MultipleRetryCount.LowPart;
pn11Stat->MultipleRetryCount.HighPart =
Adapter->MultipleRetryCount.HighPart;
pn11Stat->RTSSuccessCount.LowPart =
Adapter->RTSSuccessCount.LowPart;
pn11Stat->RTSSuccessCount.HighPart =
Adapter->RTSSuccessCount.HighPart;
pn11Stat->RTSFailureCount.LowPart =
Adapter->RTSFailureCount.LowPart;
pn11Stat->RTSFailureCount.HighPart =
Adapter->RTSFailureCount.HighPart;
pn11Stat->ACKFailureCount.LowPart =
Adapter->ACKFailureCount.LowPart;
pn11Stat->ACKFailureCount.HighPart =
Adapter->ACKFailureCount.HighPart;
pn11Stat->FrameDuplicateCount.LowPart =
Adapter->FrameDuplicateCount.LowPart;
pn11Stat->FrameDuplicateCount.HighPart =
Adapter->FrameDuplicateCount.HighPart;
pn11Stat->ReceivedFragmentCount.LowPart =
Adapter->ReceivedFragmentCount.LowPart;
pn11Stat->ReceivedFragmentCount.HighPart =
Adapter->ReceivedFragmentCount.HighPart;
pn11Stat->MulticastReceivedFrameCount.LowPart =
Adapter->MulticastReceivedFrameCount.LowPart;
pn11Stat->MulticastReceivedFrameCount.HighPart =
Adapter->MulticastReceivedFrameCount.HighPart;
pn11Stat->FCSErrorCount.LowPart =
Adapter->FCSErrorCount.LowPart;
pn11Stat->FCSErrorCount.HighPart =
Adapter->FCSErrorCount.HighPart;
*BytesWritten = sizeof(NDIS_802_11_STATISTICS);
break;
case OID_802_11_BSSID_LIST:
{
DBGPRINT(DBG_OID, ("OID_802_11_BSSID_LIST\n"));
/// RETAILMSG(1, (TEXT("OID_802_11_BSSID_LIST \r\n")));
// Check the buffer size
if (InformationBufferLength < Adapter->ListBufferLen)
{
*BytesWritten = 0;
*BytesNeeded = Adapter->ListBufferLen;
DBGPRINT(DBG_OID, ("OID_802_11_BSSID_LIST: Need %d bytes\n", Adapter->ListBufferLen));
/// RETAILMSG(1, (TEXT("OID_802_11_BSSID_LIST: Need %d bytes \r\n"),Adapter->ListBufferLen));
return NDIS_STATUS_INVALID_LENGTH;
}
/// RETAILMSG(1, (TEXT("ListBufferLen = %d \r\n"), Adapter->ListBufferLen));
// Copy the cached BSSID list
if ( Adapter->ListBufferLen == 0)
{
*BytesWritten = 0;
*BytesNeeded = Adapter->ListBufferLen;
}
else
{
NdisMoveMemory( InformationBuffer,
Adapter->ListBuffer,
Adapter->ListBufferLen);
*BytesWritten = Adapter->ListBufferLen;
*BytesNeeded = 0;
}
return NDIS_STATUS_SUCCESS;
}
case OID_802_11_AUTHENTICATION_MODE:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_AUTHENTICATION_MODE - %d ****\n",
Adapter->AuthenticationMode));
if (InformationBufferLength < sizeof(NDIS_802_11_AUTHENTICATION_MODE))
{
*BytesNeeded = sizeof(NDIS_802_11_AUTHENTICATION_MODE);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->AuthenticationMode;
*BytesWritten = sizeof(NDIS_802_11_AUTHENTICATION_MODE);
break;
case OID_802_11_PRIVACY_FILTER:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_PRIVACY_FILTER ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_PRIVACY_FILTER))
{
*BytesNeeded = sizeof(NDIS_802_11_PRIVACY_FILTER);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->PrivacyFilter;
*BytesWritten = sizeof(NDIS_802_11_PRIVACY_FILTER);
break;
#ifndef WPA // mutually exclusive with OID_802_11_ENCRYPTION_STATUS
case OID_802_11_WEP_STATUS:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_WEP_STATUS ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_WEP_STATUS))
{
*BytesNeeded = sizeof(NDIS_802_11_WEP_STATUS);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->WEPStatus;
*BytesWritten = sizeof(NDIS_802_11_WEP_STATUS);
break;
#endif
case OID_802_11_RX_ANTENNA_SELECTED:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_RX_ANTENNA_SELECTED ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_ANTENNA))
{
*BytesNeeded = sizeof(NDIS_802_11_ANTENNA);
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RF_ANTENNA,
HostCmd_ACT_GET_RX,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
return NDIS_STATUS_FAILURE;
else
Status = NDIS_STATUS_PENDING;
*BytesWritten=sizeof(NDIS_802_11_ANTENNA);
break;
case OID_802_11_TX_ANTENNA_SELECTED:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_TX_ANTENNA_SELECTED ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_ANTENNA))
{
*BytesNeeded = sizeof(NDIS_802_11_ANTENNA);
return NDIS_STATUS_INVALID_LENGTH;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -