Freigeben über


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

Siehe auch

EvtNetAdapterReceiveScalingDisable

NetAdapterCx Receive Side Scaling