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 来注册此回调函数的实现。 客户端驱动程序通常在启动网络适配器时调用 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 (包括 netadaptercx.h) |
IRQL | PASSIVE_LEVEL |