EVT_NET_ADAPTER_RECEIVE_SCALING_ENABLE回调函数 (netreceivescaling.h)

EvtNetAdapterReceiveScalingEnable 回调函数由客户端驱动程序实现,以便为网络接口控制器 (NIC) 启用接收端缩放 (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

客户端驱动程序在上一次调用 NetAdapterCreate 中获取的 NETADAPTER 对象。

[_In_] HashType

一个 NET_ADAPTER_RECEIVE_SCALING_HASH_TYPE 值,该值指定接收方缩放的类型, (RSS) 哈希函数,NIC 应使用该函数来计算传入数据包的哈希值。

[_In_] ProtocolType

一个 NET_ADAPTER_RECEIVE_SCALING_PROTOCOL_TYPE 值,该值指定支持 RSS 的 NIC 必须用来计算 RSS 哈希值的接收网络数据部分。

返回值

如果成功启用 RSS,则返回STATUS_SUCCESS。 否则,返回相应的 NTSTATUS 错误代码。

注解

通过设置 NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES 结构的相应成员,然后调用 NetAdapterSetReceiveScalingCapabilities 来注册此回调函数的实现。 客户端驱动程序通常在启动 Net 适配器时调用 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
标头 netreceivescaling.h (包括 netadaptercx.h)
IRQL PASSIVE_LEVEL

另请参阅

EvtNetAdapterReceiveScalingDisable

NetAdapterCx 接收端缩放