Compartilhar via


EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE função de retorno de chamada (netreceivescaling.h)

A função de retorno de chamada EvtNetAdapterReceiveScalingEnable é implementada pelo driver cliente para habilitar o RSS (recebimento de dimensionamento lateral) para um NIC (controlador de interface de rede).

Sintaxe

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

Parâmetros

[_In_] Adapter

O objeto NETADAPTER que o driver cliente obteve em uma chamada anterior para NetAdapterCreate.

[_In_] HashType

Um valor NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE que especifica o tipo de função de hash RSS (dimensionamento lateral de recebimento) que uma NIC deve usar para calcular os valores de hash para pacotes de entrada.

[_In_] ProtocolType

Um valor NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE que especifica a parte dos dados de rede recebidos que uma NIC compatível com RSS deve usar para calcular um valor de hash RSS.

Retornar valor

Retornará STATUS_SUCCESS se o RSS tiver sido habilitado com êxito. Caso contrário, retorna um código de erro NTSTATUS apropriado.

Comentários

Registre sua implementação dessa função de retorno de chamada definindo o membro apropriado da estrutura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES e chamando NetAdapterSetReceiveScalingCapabilities. Os drivers de cliente normalmente chamam NetAdapterSetReceiveScalingCapabilities ao iniciar um adaptador de rede, antes de chamar NetAdapterStart.

Exemplo

Nesse retorno de chamada, os clientes ativam o RSS com as informações fornecidas definindo os bits de controle apropriados no hardware.

Importante

Os drivers de cliente não devem limpar ou redefinir sua tabela de indireção de seu retorno de chamada EvtNetAdapterReceiveScalingEnable . A estrutura definirá o estado da tabela de indireção inicial do 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;
}

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.27
Versão mínima do UMDF 2.33
Cabeçalho netreceivescaling.h (inclua netadaptercx.h)
IRQL PASSIVE_LEVEL

Confira também

EvtNetAdapterReceiveScalingDisable

NetAdapterCx recebe dimensionamento lateral