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 que le pilote client a obtenu 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 Scale) 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 compatible RSS doit utiliser pour calculer une valeur de hachage RSS.

Valeur retournée

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 de leur rappel EvtNetAdapterReceiveScalingEnable . L’infrastructure définit l’état initial de la table d’indirection 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 %
En-tête netreceivescaling.h (inclure netadaptercx.h)
IRQL PASSIVE_LEVEL

Voir aussi

EvtNetAdapterReceiveScalingDisable

Mise à l’échelle côté réception NetAdapterCx