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 (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 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 das entsprechende Element der NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES-Struktur festlegen und dann NetAdapterSetReceiveScalingCapabilities aufrufen. Clienttreiber rufen in der Regel NetAdapterSetReceiveScalingCapabilities auf, wenn sie einen Netzadapter starten, bevor NetAdapterStart aufgerufen wird.

Beispiel

In diesem Rückruf aktivieren Clients RSS mit den angegebenen Informationen, indem sie die entsprechenden Steuerungsbits in der Hardware festlegen.

Wichtig

Clienttreiber sollten ihre Indirektionstabelle nicht aus ihrem EvtNetAdapterReceiveScalingEnable-Rückruf löschen oder zurücksetzen. Das Framework legt den Zustand der anfänglichen Indirektisierungstabelle 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
Kopfzeile netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

Weitere Informationen

EvtNetAdapterReceiveScalingDisable

NetAdapterCx-Empfangsskalierung