Partager via


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

Voir aussi

EvtNetAdapterReceiveScalingDisable

la mise à l’échelle côté réception NetAdapterCx