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

El controlador de cliente implementa la función de devolución de llamada EvtNetAdapterReceiveScalingEnable 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

Objeto NETADAPTER que obtuvo el controlador de 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.

Comentarios

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, a continuación, llamando a NetAdapterSetReceiveScalingCapabilities. Los controladores de cliente suelen llamar 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 el hardware.

Importante

Los controladores de cliente no deben 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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.27
Encabezado netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

Consulte también

EvtNetAdapterReceiveScalingDisable

Escalado lateral de recepción de NetAdapterCx