Condividi tramite


EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE funzione di callback (netreceivescaling.h)

La EvtNetAdapterReceiveScalingEnable funzione di callback viene implementata dal driver client per abilitare il ridimensionamento lato ricezione (RSS) per un controller di interfaccia di rete .

Sintassi

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
)
{...}

Parametri

[_In_] Adapter

Oggetto NETADAPTER ottenuto in una chiamata precedente a NetAdapterCreate.

[_In_] HashType

Valore NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE che specifica il tipo di funzione hash rss (Receive Side Scaling) che deve essere usata da una scheda di interfaccia di rete per calcolare i valori hash per i pacchetti in ingresso.

[_In_] ProtocolType

Valore NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE che specifica la parte dei dati di rete ricevuti che deve essere utilizzata da una scheda di interfaccia di rete che supporta RSS per calcolare un valore hash RSS.

Valore restituito

Restituisce STATUS_SUCCESS se RSS è stato abilitato correttamente. In caso contrario, restituisce un codice di errore NTSTATUS appropriato.

Osservazioni

Registrare l'implementazione di questa funzione di callback impostando il membro appropriato della struttura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES e quindi chiamando NetAdapterSetReceiveScalingCapabilities. I driver client chiamano in genere NetAdapterSetReceiveScalingCapabilities all'avvio di una scheda net, prima di chiamare NetAdapterStart.

Esempio

In questo callback, i client attivano RSS con le informazioni fornite impostando i bit di controllo appropriati nell'hardware.

Importante

I driver client devono non cancellare o reimpostare la tabella di riferimento indiretto dal proprio EvtNetAdapterReceiveScalingEnable callback. Il framework imposterà lo stato iniziale della tabella di riferimento indiretto del driver.

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;
}

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
versione minima di KMDF 1.27
versione minima di UMDF 2.33
intestazione netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

Vedere anche

EvtNetAdapterReceiveScalingDisable

NetAdapterCx Receive Side Scaling