📄 request.c
字号:
ulGenericUlong = (ULONG)(NDIS_MAC_OPTION_TRANSFERS_NOT_PEND |
NDIS_MAC_OPTION_RECEIVE_SERIALIZED |
NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
NDIS_MAC_OPTION_NO_LOOPBACK |
NDIS_MAC_OPTION_8021P_PRIORITY);
break;
case OID_GEN_MEDIA_SUPPORTED:
case OID_GEN_MEDIA_IN_USE:
pvMoveSource = (PVOID) (&Medium);
ulMoveBytes = sizeof(NDIS_MEDIUM);
break;
case OID_GEN_MAXIMUM_LOOKAHEAD:
case OID_GEN_MAXIMUM_FRAME_SIZE:
ulGenericUlong = ETHER_MAX_FRAME_SIZE - ETHER_HDR_SIZE;
break;
case OID_GEN_MAXIMUM_TOTAL_SIZE:
case OID_GEN_TRANSMIT_BLOCK_SIZE:
case OID_GEN_RECEIVE_BLOCK_SIZE:
ulGenericUlong = (ULONG) ETHER_MAX_FRAME_SIZE;
break;
case OID_GEN_CURRENT_LOOKAHEAD:
ulGenericUlong = psAdapter->ulCurrentLookahead;
break;
case OID_GEN_CURRENT_PACKET_FILTER:
ulGenericUlong = psAdapter->ulPacketFilter;
break;
case OID_GEN_LINK_SPEED:
ulGenericUlong = 0;
for ( i=0; i<NDIS_802_11_LENGTH_RATES_EX && psWlan->ucDesiredRates[i]; i++ )
{
if ( ulGenericUlong < (ULONG)(psWlan->ucDesiredRates[i] & 0x7f) )
ulGenericUlong = psWlan->ucDesiredRates[i] & 0x7f;
}
// Link speed in 100 bps.
ulGenericUlong = ulGenericUlong * 1000 * 10 / 2 ;
break;
case OID_GEN_TRANSMIT_BUFFER_SPACE:
ulGenericUlong = ETHER_MAX_FRAME_SIZE * psHAL->ulTxBufNum;
break;
case OID_GEN_RECEIVE_BUFFER_SPACE:
ulGenericUlong = ETHER_MAX_FRAME_SIZE * psHAL->ulRxBufNum;
break;
case OID_GEN_VENDOR_ID:
*(PULONG)aucVendorId = VENDOR_ID;
pvMoveSource = (PVOID)aucVendorId;
ulMoveBytes = sizeof(aucVendorId);
break;
case OID_GEN_VENDOR_DESCRIPTION:
pvMoveSource = (PVOID)&aucVendorDescriptor[0];
ulMoveBytes = strlen(aucVendorDescriptor);
break;
case OID_GEN_VENDOR_DRIVER_VERSION:
ulGenericUlong = ((ULONG)VENDOR_MAJOR_VERSION << 16) + VENDOR_MINOR_VERSION;
break;
case OID_GEN_DRIVER_VERSION:
usGenericUShort = (USHORT) ((NDIS_MAJOR_VERSION << 8) + NDIS_MINOR_VERSION);
pvMoveSource = (PVOID)(&usGenericUShort);
ulMoveBytes = sizeof(usGenericUShort);
break;
case OID_GEN_MEDIA_CONNECT_STATUS:
ulGenericUlong = psAdapter->eMediaState;
break;
case OID_GEN_MAXIMUM_SEND_PACKETS:
ulGenericUlong = psHAL->ulTxBufNum;
break;
case OID_GEN_XMIT_OK:
ulGenericUlong = psStats->ulTotalPktsTxedOk;
break;
case OID_GEN_RCV_OK:
ulGenericUlong = psStats->ulTotalPktsRxedOk;
break;
case OID_GEN_XMIT_ERROR:
ulGenericUlong = psStats->ulTotalPktsTxedError;
break;
case OID_GEN_RCV_ERROR:
ulGenericUlong = psStats->ulTotalPktsRxedError +
psStats->ulRxAlignmentError +
psStats->ulRxResourceError;
break;
case OID_GEN_RCV_NO_BUFFER:
ulGenericUlong = psStats->ulRxResourceError;
break;
case OID_GEN_RCV_CRC_ERROR:
ulGenericUlong = psStats->ulRcvCrcErrors;
break;
case OID_GEN_TRANSMIT_QUEUE_LENGTH:
ulGenericUlong = psHAL->ulTxBufNum;
break;
case OID_GEN_PHYSICAL_MEDIUM:
ulGenericUlong = (ULONG) NdisPhysicalMediumWirelessLan;
break;
case OID_802_3_PERMANENT_ADDRESS:
pvMoveSource = psAdapter->ucPermanentAddress;
ulMoveBytes = ETH_LENGTH_OF_ADDRESS;
break;
case OID_802_3_CURRENT_ADDRESS:
pvMoveSource = psAdapter->ucCurrentAddress;
ulMoveBytes = ETH_LENGTH_OF_ADDRESS;
break;
case OID_802_3_MAXIMUM_LIST_SIZE:
ulGenericUlong = (ULONG) MAX_MULTICAST_ADDRESSES;
break;
case OID_802_3_RCV_ERROR_ALIGNMENT:
ulGenericUlong = psStats->ulRxAlignmentError;
break;
case OID_802_3_XMIT_ONE_COLLISION:
ulGenericUlong = psStats->ulTxOneCollision;
break;
case OID_802_3_XMIT_MORE_COLLISIONS:
ulGenericUlong = psStats->ulTxMoreCollision;
break;
//
// 802.11 WLAN related OIDs.
//
case OID_802_11_BSSID:
if ( ( psAdapter->eNetState == NET_CONNECTED ) ||
( psAdapter->eNetState == NET_DISCONNECTING ) )
{
pvMoveSource = (PVOID) (psWlan->ucBSSID);
ulMoveBytes = sizeof(NDIS_802_11_MAC_ADDRESS);
}
else
ulGenericUlong = 0;
break;
case OID_802_11_SSID:
if ( ( psAdapter->eNetState == NET_CONNECTED ) ||
( psAdapter->eNetState == NET_DISCONNECTING ) )
{
pvMoveSource = (PVOID) (&psWlan->sSSID);
ulMoveBytes = sizeof(NDIS_802_11_SSID);
}
else
ulGenericUlong = 0;
break;
case OID_802_11_NETWORK_TYPES_SUPPORTED:
pvMoveSource = (PVOID) (&psWlan->ulNumOfNetworkType);
ulMoveBytes = sizeof(ULONG) + sizeof(ULONG) * psWlan->ulNumOfNetworkType;
break;
case OID_802_11_NETWORK_TYPE_IN_USE:
ulGenericUlong = psWlan->ulNetworkTypeInUse;
break;
case OID_802_11_RSSI:
pvMoveSource = (PVOID) (&psWlan->lRssi);
ulMoveBytes = sizeof( NDIS_802_11_RSSI );
break;
case OID_802_11_RSSI_TRIGGER:
pvMoveSource = (PVOID) (&psWlan->lRssiTrigger);
ulMoveBytes = sizeof( NDIS_802_11_RSSI );
break;
case OID_802_11_INFRASTRUCTURE_MODE:
ulGenericUlong = psWlan->ulInfraMode;
break;
case OID_802_11_FRAGMENTATION_THRESHOLD:
ulGenericUlong = psWlan->ulFragmentThreshold;
break;
case OID_802_11_RTS_THRESHOLD:
ulGenericUlong = psWlan->ulRTSThreshold;
break;
case OID_802_11_NUMBER_OF_ANTENNAS:
ulGenericUlong = (psWlan->ulNumOfRxAntennas >= psWlan->ulNumOfTxAntennas) ?
psWlan->ulNumOfRxAntennas : psWlan->ulNumOfTxAntennas;
break;
case OID_802_11_RX_ANTENNA_SELECTED:
ulGenericUlong = psWlan->ulRxAntennaSelected;
break;
case OID_802_11_TX_ANTENNA_SELECTED:
ulGenericUlong = psWlan->ulTxAntennaSelected;
break;
case OID_802_11_SUPPORTED_RATES:
pvMoveSource = (PVOID) (psWlan->ucSupportedRates);
ulMoveBytes = sizeof( NDIS_802_11_RATES_EX );
break;
case OID_802_11_DESIRED_RATES:
pvMoveSource = (PVOID) (psWlan->ucDesiredRates);
ulMoveBytes = sizeof( NDIS_802_11_RATES_EX );
break;
case OID_802_11_CONFIGURATION:
// if not in IBSS mode and not associated, set BeaconPeriod to zero.
if ( psWlan->ulInfraMode != Ndis802_11IBSS &&
((psAdapter->eNetState != NET_CONNECTED) &&
(psAdapter->eNetState != NET_DISCONNECTING)) )
psWlan->sRadioConfig.BeaconPeriod = 0;
pvMoveSource = (PVOID) (&psWlan->sRadioConfig);
ulMoveBytes = sizeof( NDIS_802_11_CONFIGURATION );
break;
case OID_802_11_STATISTICS:
if ( sizeof(NDIS_802_11_STATISTICS) > ulInformationBufferLength )
{
*pulBytesNeeded = sizeof( NDIS_802_11_STATISTICS );
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
else
{
// Send Get 802.11 Stats request to update the statistics information.
vHALsendGetStatsReq( psHAL );
iStatus = NDIS_STATUS_PENDING;
}
break;
case OID_802_11_POWER_MODE:
ulGenericUlong = psWlan->ulPowerMode;
DBG_LEV2(("Query power mode, returning %d.\n", psWlan->ulPowerMode));
break;
case OID_802_11_BSSID_LIST:
{
ULONG ulLength = sizeof( ULONG );
PNDIS_802_11_BSSID_LIST_EX psBssidList = (PNDIS_802_11_BSSID_LIST_EX) pvInformationBuffer;
PNDIS_WLAN_BSSID_EX psBssid = psBssidList->Bssid;
psBssidList->NumberOfItems = 0;
for ( i=0; i<psWlan->ulNumOfBssidBuf; i++ )
{
if ( psWlan->sBssidList[i].llTimeStamp > 0) // Entry is valid
{
if( 32 <= psWlan->sBssidList[i].psBssid->Ssid.SsidLength )
continue;
ulLength += psWlan->sBssidList[i].psBssid->Length;
if ( ulLength > ulInformationBufferLength )
{
// can't copy any more BSSIDs into list
}
else
{
OS_MEMCPY( psBssid, psWlan->sBssidList[i].psBssid, psWlan->sBssidList[i].psBssid->Length );
psBssid = (PNDIS_WLAN_BSSID_EX) ((PUCHAR)psBssid + psWlan->sBssidList[i].psBssid->Length);
psBssidList->NumberOfItems ++;
boSkipCopy = TRUE;
}
}
}
*pulBytesWritten = ulLength;
*pulBytesNeeded = ulLength;
if ( ulLength > ulInformationBufferLength )
{
*pulBytesNeeded = ulLength;
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
DBG_LEV3(("Num of BSSIDs copied into OID_802_11_BSSID_LIST = %d .\n", psBssidList->NumberOfItems));
DBG_LEV3(("Num of BSSIDs in driver's BSSID List = %d.\n", psWlan->ulNumOfBssid));
}
break;
case OID_802_11_AUTHENTICATION_MODE:
if (psWlan->auth_params[IW_AUTH_WPA_VERSION] & IW_AUTH_WPA_VERSION_WPA2)
{
if (psWlan->auth_params[IW_AUTH_KEY_MGMT] & IW_AUTH_KEY_MGMT_PSK)
ulGenericUlong = Ndis802_11AuthModeWPA2PSK;
else
ulGenericUlong = Ndis802_11AuthModeWPA2;
}
else if (psWlan->auth_params[IW_AUTH_WPA_VERSION] & IW_AUTH_WPA_VERSION_WPA)
{
if (psWlan->auth_params[IW_AUTH_KEY_MGMT] & IW_AUTH_KEY_MGMT_PSK)
ulGenericUlong = Ndis802_11AuthModeWPAPSK;
else
ulGenericUlong = Ndis802_11AuthModeWPA;
}
else // Assume WPA disabled
{
if (psWlan->auth_params[IW_AUTH_80211_AUTH_ALG] & IW_AUTH_ALG_SHARED_KEY)
ulGenericUlong = Ndis802_11AuthModeShared;
else // No check for LEAP, not supported at present; assume open
ulGenericUlong = Ndis802_11AuthModeOpen;
}
DBG_LEV2(("Query authentication mode %d.\n", ulGenericUlong));
break;
case OID_802_11_ENCRYPTION_STATUS:
{
UINT32 u32Cipher = psWlan->auth_params[IW_AUTH_CIPHER_PAIRWISE] |
psWlan->auth_params[IW_AUTH_CIPHER_GROUP];
if (u32Cipher & IW_AUTH_CIPHER_CCMP)
{
if (psWlan->boTransmitKeyAvail)
ulGenericUlong = Ndis802_11Encryption3Enabled;
else
ulGenericUlong = Ndis802_11Encryption3KeyAbsent;
}
else if (u32Cipher & IW_AUTH_CIPHER_TKIP)
{
if (psWlan->boTransmitKeyAvail)
ulGenericUlong = Ndis802_11Encryption2Enabled;
else
ulGenericUlong = Ndis802_11Encryption2KeyAbsent;
}
else if ((u32Cipher & IW_AUTH_CIPHER_WEP104) || (u32Cipher & IW_AUTH_CIPHER_TKIP))
{
if (psWlan->boTransmitKeyAvail)
ulGenericUlong = Ndis802_11Encryption1Enabled;
else
ulGenericUlong = Ndis802_11Encryption1KeyAbsent;
}
else
ulGenericUlong = Ndis802_11EncryptionDisabled;
DBG_LEV2(("Query encryption status %d.\n", ulGenericUlong));
}
break;
case OID_802_11_ASSOCIATION_INFORMATION:
pvMoveSource = (PVOID) (&psWlan->sAssocInfo);
if ( psAdapter->eNetState != NET_CONNECTED )
ulMoveBytes = 0;
else if (psWlan->auth_params[IW_AUTH_WPA_VERSION] &
(IW_AUTH_WPA_VERSION_WPA | IW_AUTH_WPA_VERSION_WPA2))
{
ulMoveBytes = psWlan->sAssocInfo.OffsetResponseIEs + psWlan->sAssocInfo.ResponseIELength;
}
else
{
ulMoveBytes = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION);
}
DBG_LEV2(("Query association information, returning %d bytes.\n",
ulMoveBytes));
break;
// CE doesn't support WPA2
case OID_802_11_CAPABILITY:
pvMoveSource = (PVOID) (&psWlan->sDriverCapability);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -