NDIS_RECEIVE_SCALE_CAPABILITIES 结构指定微型端口适配器的 接收端缩放(RSS) 功能。
语法
typedef struct _NDIS_RECEIVE_SCALE_CAPABILITIES {
NDIS_OBJECT_HEADER Header;
NDIS_RSS_CAPS_FLAGS CapabilitiesFlags;
ULONG NumberOfInterruptMessages;
ULONG NumberOfReceiveQueues;
USHORT NumberOfIndirectionTableEntries;
} NDIS_RECEIVE_SCALE_CAPABILITIES, *PNDIS_RECEIVE_SCALE_CAPABILITIES;
成员
Header
NDIS_RECEIVE_SCALE_CAPABILITIES 结构的 NDIS_OBJECT_HEADER 结构。 设置 标头 指定为 NDIS_OBJECT_TYPE_RSS_CAPABILITIES的结构 类型 成员。
对于 NDIS 6.60 及更高版本,请将 修订 成员设置为 NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_3,并将 大小 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_CAPABILITIES_REVISION_3。
对于 NDIS 6.30 及更高版本,请将 修订 成员设置为 NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2,并将 大小 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_CAPABILITIES_REVISION_2。
对于 NDIS 6.0、6.1 和 6.20,请将 修订 成员设置为 NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_1,并将 大小 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_CAPABILITIES_REVISION_1。
CapabilitiesFlags
指定 NIC 的 RSS 功能的标志的位掩码。 微型端口驱动程序可以指定以下标志:
价值 | 意义 |
---|---|
|
如果 NIC 支持消息信号中断(MSIs),请设置此标志。 此标志指示 NIC 可以在将分配给该 CPU 的数据包排入队列后为每个 CPU 生成单独的中断。 |
|
如果 NIC 可以向 MiniportInterrupt 函数指示目标 CPU 已排队接收的数据包,请设置此标志。 |
|
如果 NIC 正在使用消息信号中断(MSIs),则设置此标志。 NDIS 6.20 及更高版本中支持此标志。 |
|
如果 NIC 支持端口的独立 RSS 配置,请设置此标志。 NDIS 6.30 及更高版本中支持此标志。 |
|
如果 NIC 支持 MSIs,请设置此标志。 NDIS 6.30 及更高版本中支持此标志。 |
|
如果微型端口驱动程序可以检测哪些目标 CPU 已从其 MiniportInterruptDPC 函数排队接收数据包,请设置此标志。 |
|
如果 NIC 可以标识 IPv4 数据包(带或不带选项),则设置此标志。 此外,NIC 还支持通过 IPv4 标头字段和 TCP 标头字段计算哈希值。 |
|
如果 NIC 可以标识 IPv6 数据包,并在 IPv6 数据包中的字段上计算哈希值,则设置此标志。 NIC 必须能够基于基本 IPv6 标头中的字段和 TCP 标头中的字段计算哈希值。 如果 NIC 无法基于 IPv6 扩展标头中的字段计算哈希值,请使用此标志。 |
|
如果 NIC 可以标识 IPv6 数据包,并基于包含 IPv6 扩展标头的 IPv6 数据包中的字段计算哈希值,则设置此标志。 NIC 可以基于基本 IPv6 标头、IPv6 扩展标头和 TCP 标头中的字段计算哈希值。 NIC 必须能够在主地址选项中的字段和 IPv6 扩展标头中的类型 2 路由标头上计算哈希值。 |
|
如果 NIC 可以识别 IPv4 数据包(带或不带选项)以及 NIC 是否支持通过 IPv4 标头字段和 UDP 标头字段计算哈希值,则设置此标志。 |
|
如果 NIC 可以标识 IPv6 数据包,并在 IPv6 数据包中的字段上计算哈希值,则设置此标志。 NIC 必须能够基于基本 IPv6 标头中的字段和 UDP 标头中的字段计算哈希值。 如果 NIC 无法基于 IPv6 扩展标头中的字段计算哈希值,请使用此标志。 |
|
如果 NIC 可以标识 IPv6 数据包,并基于包含 IPv6 扩展标头的 IPv6 数据包中的字段计算哈希值,则设置此标志。 NIC 可以基于基本 IPv6 标头、IPv6 扩展标头和 UDP 标头中的字段计算哈希值。 NIC 必须能够在主地址选项中的字段和 IPv6 扩展标头中的类型 2 路由标头上计算哈希值。 |
|
如果 NIC 支持 toeplitz 哈希函数,则设置此标志。 如果 NIC 支持 RSS,则对哈希函数的支持是必需的。 有关哈希函数的详细信息,请参阅 NDIS_RSS_HASH_FUNC_FROM_HASH_INFO。 |
|
此标志保留供将来使用。 |
|
此标志保留供将来使用。 |
|
此标志保留供将来使用。 |
NumberOfInterruptMessages
如果 NIC 支持 MSIs,则 NIC 支持的中断消息数。 如果 NIC 不支持 MSIs,但支持基于行的中断,请将此数字设置为 1。
NumberOfReceiveQueues
NIC 支持的硬件接收队列数。
NumberOfIndirectionTableEntries
微型端口驱动程序在间接表中支持的最大条目数。 此值必须是 2 的幂。 所有 NDIS 6.30 及更高版本的微型端口适配器都必须支持此成员,这是虚拟函数所必需的。
言论
过度应用驱动程序可以使用 OID_GEN_RECEIVE_SCALE_CAPABILITIES OID 来查询 NIC 及其微型端口驱动程序的接收端缩放(RSS)功能。
微型端口驱动程序在 NDIS_RECEIVE_SCALE_CAPABILITIES 结构中返回 RSS 功能。
对于某些工作负荷,由于路由更改或发送方未遵守 MTU 限制,UDP 数据包的子集可能会分段。 在这种情况下,基于 4 元组或 2 元组哈希的不同处理器可以指示同一流的数据包。 因此,播发 NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV4、NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6和 NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX 的微型端口驱动程序应提供通过高级属性禁用 UDP RSS 功能的方法。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
标头 | ntddndis.h (include Ndis.h) |