Поделиться через


функция обратного вызова EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE (netreceivescaling.h)

Функция обратного вызова EvtNetAdapterReceiveScalingEnable реализована драйвером клиента, чтобы включить масштабирование на стороне получения (RSS) для сетевого контроллера (сетевого адаптера).

Синтаксис

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
)
{...}

Параметры

[_In_] Adapter

Объект NETADAPTER драйвер клиента, полученный в предыдущем вызове NetAdapterCreate.

[_In_] HashType

Значение NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE, указывающее тип хэширования на стороне получения (RSS), которую сетевой адаптер должен использовать для вычисления хэш-значений входящих пакетов.

[_In_] ProtocolType

Значение NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE, указывающее часть полученных сетевых данных, которую должен использовать сетевой адаптер, поддерживающий RSS, для вычисления хэш-значения RSS.

Возвращаемое значение

Возвращает STATUS_SUCCESS, если RSS был успешно включен. В противном случае возвращает соответствующий код ошибки NTSTATUS.

Замечания

Зарегистрируйте реализацию этой функции обратного вызова, задав соответствующий элемент структуры NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES, а затем вызовите NetAdapterSetReceiveScalingCapabilities. Клиентские драйверы обычно вызывают NetAdapterSetReceiveScalingCapabilities при запуске сетевого адаптера перед вызовом NetAdapterStart.

Пример

В этом обратном вызове клиенты включите RSS с предоставленными сведениями, задав соответствующие биты управления в оборудовании.

Важный

Клиентские драйверы должны не очистить или сбросить таблицу косвенного обращения из EvtNetAdapterReceiveScalingEnable обратного вызова. Платформа установит начальное состояние таблицы косвенного обращения драйвера.

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;
}

Требования

Требование Ценность
целевая платформа Всеобщий
минимальная версия KMDF 1.27
минимальная версия UMDF 2.33
заголовка netreceivescaling.h (include netadaptercx.h)
IRQL PASSIVE_LEVEL

См. также

EvtNetAdapterReceiveScalingDisable

Масштабирование на стороне получения NetAdapterCx