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 |