EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE funzione di callback (netreceivescaling.h)
La funzione di callback EvtNetAdapterReceiveScalingEnable viene implementata dal driver client per abilitare il ridimensionamento lato ricezione per un controller di interfaccia di rete (NIC).
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
L'oggetto NETADAPTER il driver client ottenuto in una chiamata precedente a NetAdapterCreate.
[_In_] HashType
Valore NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE che specifica il tipo di funzione hash del ridimensionamento lato ricezione 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 usata da una scheda di interfaccia di rete con supporto 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.
Commenti
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 quando si avvia 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 non devono cancellare o reimpostare la tabella indiretta dal callback EvtNetAdapterReceiveScalingEnable . Il framework imposta lo stato iniziale della tabella indiretta 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;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.27 |
Intestazione | netreceivescaling.h (include netadaptercx.h) |
IRQL | PASSIVE_LEVEL |
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per