Partilhar 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 (dimensionamento lateral de recebimento) 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 o driver cliente obtido 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.

Valor de retorno

Retorna STATUS_SUCCESS se o RSS foi habilitado com êxito. Caso contrário, retornará um código de erro NTSTATUS apropriado.

Observações

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

Exemplo

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

Importante

Os drivers cliente não devem limpar ou redefinir sua tabela de indireção de seus EvtNetAdapterReceiveScalingEnable retorno de chamada. A estrutura definirá o estado inicial da tabela de indireção 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
da Plataforma de Destino Universal
versão mínima do KMDF 1.27
versão mínima do UMDF 2.33
cabeçalho netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

Consulte também

EvtNetAdapterReceiveScalingDisable

netAdapterCx receive side scaling