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 de 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 |
Versión mínima de UMDF | 2,33 |
Encabezado | netreceivescaling.h (include netadaptercx.h) |
IRQL | PASSIVE_LEVEL |