NDIS_RECEIVE_SCALE_PARAMETERS 结构 (ntddndis.h)

NDIS_RECEIVE_SCALE_PARAMETERS结构指定微型端口适配器的接收方缩放 (RSS) 参数。

版本信息

语法

typedef struct _NDIS_RECEIVE_SCALE_PARAMETERS {
  NDIS_OBJECT_HEADER Header;
  USHORT             Flags;
  USHORT             BaseCpuNumber;
  ULONG              HashInformation;
  USHORT             IndirectionTableSize;
  ULONG              IndirectionTableOffset;
  USHORT             HashSecretKeySize;
  ULONG              HashSecretKeyOffset;
  ULONG              ProcessorMasksOffset;
  ULONG              NumberOfProcessorMasks;
  ULONG              ProcessorMasksEntrySize;
  PROCESSOR_NUMBER   DefaultProcessorNumber;
} NDIS_RECEIVE_SCALE_PARAMETERS, *PNDIS_RECEIVE_SCALE_PARAMETERS;

成员

Header

NDIS_RECEIVE_SCALE_PARAMETERS 结构的NDIS_OBJECT_HEADER结构。 将 Header 指定的结构的 Type 成员设置为NDIS_OBJECT_TYPE_RSS_PARAMETERS

  • 对于 NDIS 6.60 及更高版本的驱动程序,请将 Revision 成员设置为 NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3 并将 Size 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_PARAMETERS_REVISION_3

  • 对于 NDIS 6.20 和 NDIS 6.60 之前的驱动程序,请将 Revision 成员设置为 NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 ,将 Size 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_PARAMETERS_REVISION_2

  • 对于 NDIS 6.0 驱动程序,请将 Revision 成员设置为 NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_1 ,将 Size 成员设置为 NDIS_SIZEOF_RECEIVE_SCALE_PARAMETERS_REVISION_1

Flags

一个 USHORT 值,该值指示微型端口驱动程序应对接收缩放参数执行的操作。 驱动程序可以使用这些标志快速确定哪些参数已更改并相应地更新 RSS 设置。

注意

引用未更改 RSS 参数信息的标志用于优化目的。 如果设置了标志,则不会对相应的参数进行更改。 如果标志明确,则相应的参数可能已更改,也可能未更改,微型端口驱动程序必须将参数的新值与当前值进行比较,以确定参数中的潜在更改。

  • 在查询请求中,将此成员设置为零。

  • 在设置的请求中,标志定义如下:

含义
NDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED BaseCpuNumber 成员未更改。
NDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED HashInformation 成员未更改。 哈希信息包括哈希类型和哈希函数。
NDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED 间接表和关联的数据成员未更改。
NDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED 密钥和关联的数据成员未更改。
NDIS_RSS_PARAM_FLAG_DISABLE_RSS 如果设置了此标志,微型端口驱动程序应忽略所有其他标志和设置,并在 NIC 上禁用 RSS。
NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED 如果设置了此标志, 则 DefaultProcessorNumber 未更改。

BaseCpuNumber

用于 RSS 的最小 CPU 数。 由于此值已合并到间接表,因此请将 BaseCpuNumber 设置为零。

HashInformation

在设置的请求中,此成员是 NIC 应用于计算传入数据包的哈希值的哈希类型和哈希函数。 如果在 HashInformation 成员中指定的哈希函数为零,则禁用 RSS。

在查询请求中,此成员是 NIC 使用的哈希类型和哈希函数。

覆盖驱动程序和 NDIS 可以使用 NDIS_RSS_HASH_INFO_FROM_TYPE_AND_FUNC 宏将哈希类型和哈希函数合并到哈希信息中,并设置 HashInformation 成员。

微型端口驱动程序可以使用 NDIS_RSS_HASH_TYPE_FROM_HASH_INFO 宏从 HashInformation 获取哈希类型, 并使用NDIS_RSS_HASH_FUNC_FROM_HASH_INFO 宏获取哈希函数。

IndirectionTableSize

间接寻址表的大小(以字节为单位)。 设置 RSS 参数的上层驱动程序必须确保间接表的项数为 2 的幂。

IndirectionTableOffset

间接寻址表与 NDIS_RECEIVE_SCALE_PARAMETERS 结构开头的偏移量。 使用此偏移量获取间接寻址表。

HashSecretKeySize

哈希函数的密钥数组的大小(以字节为单位)。 NdisHashFunctionToeplitz 的数组大小为 40 个字节。

HashSecretKeyOffset

哈希函数的密钥数组从 NDIS_RECEIVE_SCALE_PARAMETERS 结构开头的偏移量。 使用此偏移量获取 320 位 (40 字节) 密钥。

  • 在设置的请求中,密钥可以包含过度分配的驱动程序选择的任何数据。

  • 在查询请求中,密钥包含 NIC 正在使用的数据。

ProcessorMasksOffset

处理器掩码数组从 NDIS_RECEIVE_SCALE_PARAMETERS 结构开头的偏移量。

NumberOfProcessorMasks

类型数组中的元素数 GROUP_AFFINITY 表示间接寻址表中使用的处理器

ProcessorMasksEntrySize

处理器掩码数组项的大小(以字节为单位)。

DefaultProcessorNumber

启用 RSS 时,指定将接收无法计算哈希的数据包的处理器。

注解

NDIS_RECEIVE_SCALE_PARAMETERS 结构定义OID_GEN_RECEIVE_SCALE_PARAMETERS OID 的接收方缩放 (RSS) 参数。

注意

间接表和密钥追加到 NDIS_RECEIVE_SCALE_PARAMETERS 结构成员之后。

间接寻址表采用以下特定于版本的格式:

NDIS 版本 格式
NDIS 6.20 及更高版本 PROCESSOR_NUMBER IndirectionTable[IndirectionTableSize/sizeof(PROCESSOR_NUMBER)];
Pre-NDIS 6.20 CCHAR IndirectionTable[IndirectionTableSize]

如果驱动程序堆栈中存在较旧的和较新的驱动程序,NDIS 会自动转换间接寻址表。

微型端口驱动程序必须检查间接寻址表,以确定要与硬件队列关联的 CPU 数。 如果间接寻址表中显示的不同 CPU 编号的总数超过 NIC 支持的硬件队列数,则微型端口驱动程序必须从间接表选取 CPU 编号的子集。 子集的数量等于硬件队列的数量。

微型端口驱动程序指定接收队列数值以响应 OID_GEN_RECEIVE_SCALE_CAPABILITIES

若要清除 RSS 参数并禁用 RSS,NDIS 会将 HashInformation 成员中指定的哈希函数设置为零。 NDIS 还可以通过在 NDIS_RECEIVE_SCALE_PARAMETERS 结构中设置 NDIS_RSS_PARAM_FLAG_DISABLE_RSS 标志来禁用 RSS

如果禁用 RSS,微型端口驱动程序应在不执行 RSS 操作的情况下处理接收操作。

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
标头 ntddndis.h (包括 Ndis.h)

另请参阅

接收方伸缩 (RSS)

NDIS_OBJECT_HEADER

NDIS_RSS_HASH_FUNC_FROM_HASH_INFO

NDIS_RSS_HASH_INFO_FROM_TYPE_AND_FUNC

NDIS_RSS_HASH_TYPE_FROM_HASH_INFO

OID_GEN_RECEIVE_SCALE_CAPABILITIES

OID_GEN_RECEIVE_SCALE_PARAMETERS