Compartir a través de


EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE función de devolución de llamada (netreceivescaling.h)

El controlador de cliente implementa EvtNetAdapterReceiveScalingEnable función de devolución de llamada para habilitar el escalado lateral de recepción (RSS) para un controlador de interfaz de red (NIC).

Sintaxis

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

El NETADAPTER objeto que obtuvo el controlador cliente en una llamada anterior a NetAdapterCreate.

[_In_] HashType

Valor de NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE que especifica el tipo de función hash de escalado lateral de recepción (RSS) que una NIC debe usar para calcular los valores hash de los paquetes entrantes.

[_In_] ProtocolType

Valor de NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE que especifica la parte de los datos de red recibidos que una NIC compatible con RSS debe usar para calcular un valor hash RSS.

Valor devuelto

Devuelve STATUS_SUCCESS si RSS se ha habilitado correctamente. De lo contrario, devuelve un código de error NTSTATUS adecuado.

Observaciones

Registre la implementación de esta función de devolución de llamada estableciendo el miembro adecuado de la estructura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES y llamando a NetAdapterSetReceiveScalingCapabilities. Normalmente, los controladores de cliente llaman a netAdapterSetReceiveScalingCapabilities al iniciar un adaptador net, antes de llamar a NetAdapterStart.

Ejemplo

En esta devolución de llamada, los clientes activan RSS con la información proporcionada estableciendo los bits de control adecuados en hardware.

Importante

Los controladores de cliente deben no borrar ni restablecer su tabla de direccionamiento indirecto desde su devolución de llamada EvtNetAdapterReceiveScalingEnable. El marco establecerá el estado inicial de la tabla de direccionamiento indirecto del controlador.

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
de la plataforma de destino de Universal
versión mínima de KMDF 1.27
versión mínima de UMDF 2.33
encabezado de netreceivescaling.h (include netadaptercx.h)
irQL PASSIVE_LEVEL

Consulte también

EvtNetAdapterReceiveScalingDisable

de escalado lateral de recepción de NetAdapterCx