EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE Rückruffunktion (netreceivescaling.h)
Die Rückruffunktion EvtNetAdapterReceiveScalingEnable wird vom Clienttreiber implementiert, um die empfangsseitige Skalierung (RSS) für einen Netzwerkschnittstellencontroller (Network Interface Controller, NIC) zu aktivieren.
Syntax
EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE EvtNetAdapterReceiveScalingEnable;
NTSTATUS EvtNetAdapterReceiveScalingEnable(
[_In_] NETADAPTER Adapter,
[_In_] NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE HashType,
[_In_] NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE ProtocolType
)
{...}
Parameter
[_In_] Adapter
Das NETADAPTER-Objekt , das der Clienttreiber bei einem vorherigen Aufruf von NetAdapterCreate abgerufen hat.
[_In_] HashType
Ein NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE Wert, der den Typ der RSS-Hashfunktion (Receive Side Scaling) angibt, die eine NIC zum Berechnen der Hashwerte für eingehende Pakete verwenden soll.
[_In_] ProtocolType
Ein NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE Wert, der den Teil der empfangenen Netzwerkdaten angibt, den eine RSS-fähige NIC zum Berechnen eines RSS-Hashwerts verwenden muss.
Rückgabewert
Gibt STATUS_SUCCESS zurück, wenn RSS erfolgreich aktiviert wurde. Andernfalls wird ein entsprechender NTSTATUS-Fehlercode zurückgegeben.
Hinweise
Registrieren Sie Ihre Implementierung dieser Rückruffunktion, indem Sie den entsprechenden Member der NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES-Struktur festlegen und dann NetAdapterSetReceiveScalingCapabilities aufrufen. Clienttreiber rufen in der Regel NetAdapterSetReceiveScalingCapabilities beim Starten eines Netzadapters auf, bevor NetAdapterStart aufgerufen wird.
Beispiel
In diesem Rückruf aktivieren Clients RSS mit den bereitgestellten Informationen, indem sie die entsprechenden Steuerbits in der Hardware festlegen.
Wichtig
Clienttreiber sollten ihre Dereferenzierungstabelle nicht aus ihrem EvtNetAdapterReceiveScalingEnable-Rückruf löschen oder zurücksetzen. Das Framework legt den anfänglichen Dereferenzierungstabellenstatus des Treibers fest.
NTSTATUS
MyEvtNetAdapterReceiveScalingEnable(
_In_ NETADAPTER Adapter,
_In_ NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE HashType,
_In_ NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE ProtocolType
)
{
NTSTATUS status = STATUS_SUCCESS;
// Not using the hash type in this example
UNREFERENCED_PARAMETER(HashType);
UINT32 controlBitsEnable = MY_RSS_MULTI_CPU_ENABLE | MY_RSS_HASH_BITS_ENABLE;
// Set the appropriate control bits for IPv4
if(ProtocolType & NetAdapterReceiveScalingProtocolTypeIPv4)
{
controlBitsEnable |= MY_RSS_IPV4_ENABLE;
if (ProtocolType & NetAdapterReceiveScalingProtocolTypeTcp)
{
controlBitsEnable |= MY_RSS_IPV4_TCP_ENABLE;
}
}
// Repeat for IPv6
...
// Set the bits in hardware
if(!MyHardwareRssSetControl(controlBitsEnable))
{
WdfDeviceSetFailed(Adapter->WdfDevice, WdfDeviceFailedAttemptRestart);
return STATUS_UNSUCCESSFUL;
}
// Perform other tasks like restarting the Rx queue
return STATUS_SUCCESS;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1,27 |
UMDF-Mindestversion | 2.33 |
Kopfzeile | netreceivescaling.h (include netadaptercx.h) |
IRQL | PASSIVE_LEVEL |