EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE funzione di callback (netreceivescaling.h)

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

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

L'oggetto NETADAPTER il driver client ottenuto in una chiamata precedente a NetAdapterCreate.

[_In_] HashType

Valore NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE che specifica il tipo di funzione hash del ridimensionamento lato ricezione 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 usata da una scheda di interfaccia di rete con supporto 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.

Commenti

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 quando si avvia 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 non devono cancellare o reimpostare la tabella indiretta dal callback EvtNetAdapterReceiveScalingEnable . Il framework imposta lo stato iniziale della tabella indiretta 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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.27
Intestazione netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

Vedi anche

EvtNetAdapterReceiveScalingDisable

Scalabilità laterale netAdapterCx