EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE Rückruffunktion (netreceivescaling.h)
Die EvtNetAdapterReceiveScalingEnable Callback-Funktion wird vom Clienttreiber implementiert, um die empfangsseitige Skalierung (RSS) für einen Netzwerkschnittstellencontroller (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 in einem vorherigen Aufruf von NetAdapterCreateabgerufen hat.
[_In_] HashType
Ein NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE Wert, der den Typ der RSS-Hashfunktion (Receive Side Scaling) angibt, mit der eine NIC die Hashwerte für eingehende Pakete berechnen 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.
Bemerkungen
Registrieren Sie die Implementierung dieser Rückruffunktion, indem Sie das entsprechende Element der NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES Struktur festlegen und dann NetAdapterSetReceiveScalingCapabilitiesaufrufen. 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 Steuerelementbits in der Hardware festlegen.
Wichtig
Clienttreiber sollten ihre Dereferenzierungstabelle nicht löschen oder aus ihrer EvtNetAdapterReceiveScalingEnable Rückruf 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- | Universal |
Minimale KMDF-Version | 1.27 |
Mindest-UMDF-Version | 2.33 |
Header- | netreceivescaling.h (include netadaptercx.h) |
IRQL- | PASSIVE_LEVEL |