EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE funzione di callback (netreceivescaling.h)
La EvtNetAdapterReceiveScalingEnable funzione di callback viene implementata dal driver client per abilitare il ridimensionamento lato ricezione (RSS) per un controller di interfaccia di rete .
Sintassi
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
)
{...}
Parametri
[_In_] Adapter
Oggetto NETADAPTER ottenuto in una chiamata precedente a NetAdapterCreate.
[_In_] HashType
Valore NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE che specifica il tipo di funzione hash rss (Receive Side Scaling) che deve essere usata da una scheda di interfaccia di rete per calcolare i valori hash per i pacchetti in ingresso.
[_In_] ProtocolType
Valore NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE che specifica la parte dei dati di rete ricevuti che deve essere utilizzata da una scheda di interfaccia di rete che supporta RSS per calcolare un valore hash RSS.
Valore restituito
Restituisce STATUS_SUCCESS se RSS è stato abilitato correttamente. In caso contrario, restituisce un codice di errore NTSTATUS appropriato.
Osservazioni
Registrare l'implementazione di questa funzione di callback impostando il membro appropriato della struttura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES e quindi chiamando NetAdapterSetReceiveScalingCapabilities. I driver client chiamano in genere NetAdapterSetReceiveScalingCapabilities all'avvio di una scheda net, prima di chiamare NetAdapterStart.
Esempio
In questo callback, i client attivano RSS con le informazioni fornite impostando i bit di controllo appropriati nell'hardware.
Importante
I driver client devono non cancellare o reimpostare la tabella di riferimento indiretto dal proprio EvtNetAdapterReceiveScalingEnable callback. Il framework imposterà lo stato iniziale della tabella di riferimento indiretto del 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;
}
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
versione minima di KMDF | 1.27 |
versione minima di UMDF | 2.33 |
intestazione | netreceivescaling.h (include netadaptercx.h) |
IRQL | PASSIVE_LEVEL |