EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE fonction de rappel (netreceivescaling.h)
La fonction de rappel EvtNetAdapterReceiveScalingEnable est implémentée par le pilote client pour activer la mise à l’échelle côté réception (RSS) pour un contrôleur d’interface réseau (NIC).
Syntaxe
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
)
{...}
Paramètres
[_In_] Adapter
Objet NETADAPTER obtenu par le pilote client lors d’un appel précédent à NetAdapterCreate.
[_In_] HashType
Valeur NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE qui spécifie le type de fonction de hachage RSS (Receive Side Scaling) qu’une carte réseau doit utiliser pour calculer les valeurs de hachage des paquets entrants.
[_In_] ProtocolType
Valeur NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE qui spécifie la partie des données réseau reçues qu’une carte réseau prenant en charge RSS doit utiliser pour calculer une valeur de hachage RSS.
Valeur retournée
Retourne STATUS_SUCCESS si RSS a été correctement activé. Sinon, retourne un code d’erreur NTSTATUS approprié.
Remarques
Inscrivez votre implémentation de cette fonction de rappel en définissant le membre approprié de la structure NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES , puis en appelant NetAdapterSetReceiveScalingCapabilities. Les pilotes clients appellent généralement NetAdapterSetReceiveScalingCapabilities lors du démarrage d’une carte réseau, avant d’appeler NetAdapterStart.
Exemple
Dans ce rappel, les clients activent RSS avec les informations fournies en définissant les bits de contrôle appropriés dans le matériel.
Important
Les pilotes clients ne doivent pas effacer ou réinitialiser leur table d’indirection de leur rappel EvtNetAdapterReceiveScalingEnable . L’infrastructure définit l’état de la table d’indirection initiale du pilote.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1,27 % |
Version UMDF minimale | 2,33 |
En-tête | netreceivescaling.h (inclure netadaptercx.h) |
IRQL | PASSIVE_LEVEL |