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 une carte réseau.
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
L’objet NETADAPTER obtenu dans un appel précédent à NetAdapterCreate.
[_In_] HashType
Valeur NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE qui spécifie le type de fonction de hachage côté réception (RSS) utilisée par une carte réseau 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 compatible RSS doit utiliser pour calculer une valeur de hachage RSS.
Valeur de retour
Retourne STATUS_SUCCESS si RSS a été activé avec succès. 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’un adaptateur net, 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 à partir 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;
}
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.27 |
version minimale de UMDF | 2.33 |
d’en-tête | netreceivescaling.h (include netadaptercx.h) |
IRQL | PASSIVE_LEVEL |