确定网络适配器的 VMQ 功能

NDIS 提供接口来确定网络适配器的 VMQ 功能,例如:

  • 网络适配器的通用筛选功能。

  • 支持的 VM 队列功能。

  • 支持将网络数据内存拆分为两个单独的缓冲区。

    注意 从 NDIS 6.30 开始,不再支持将数据包拆分为单独的观察缓冲区。

微型端口驱动程序在网络适配器初始化期间向 NDIS 提供以下信息:

  • 网络适配器可以支持的 VMQ 硬件功能。

  • 当前已启用的 VMQ 功能。

  • 在网络适配器上启用或禁用的全局接收筛选功能。

过分的驱动程序和应用程序可以使用以下 OID 查询请求来获取网络适配器功能。

OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES

OID_RECEIVE_FILTER_CURRENT_CAPABILITIES

OID_RECEIVE_FILTER_GLOBAL_PARAMETERS

NDIS 处理微型端口驱动程序的这些 OID 查询请求。 因此,不会为微型端口驱动程序请求查询。 NDIS 报告初始化期间网络适配器当前启用的接收 VMQ 功能。 因此,过度覆盖的驱动程序不必查询这些 OID。

NDIS_RECEIVE_FILTER_CAPABILITIES结构指定网络适配器的筛选功能。 此结构按以下方式使用:

NDIS_RECEIVE_FILTER_CAPABILITIES 结构包括以下信息:

EnabledFilterTypes
支持的接收筛选器的类型。 NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED标志指定启用虚拟机队列 (VMQ) 筛选器。

EnabledQueueTypes
支持的接收队列的类型。 NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED标志指定启用虚拟机 (VM) 队列。

NumQueues
网络适配器支持的接收队列数。 若要支持 VMQ,此数字必须等于或小于 NIC 支持的单播 MAC 地址数。 此数字不得包含默认队列。

注意 网络适配器支持的单播 MAC 地址或 VM 队列数不包括关联 NIC 的 MAC 地址。

SupportedQueueProperties
网络适配器支持的队列属性。 NDIS_RECEIVE_FILTER_VM_QUEUE_SUPPORTED标志指定网络适配器提供支持 VMQ 筛选的最低要求。 支持 VMQ 的 NIC 必须为每个接收队列提供 MSI-X 表条目。 因此,VMQ 微型端口驱动程序必须设置NDIS_RECEIVE_FILTER_MSI_X_SUPPORTED标志。

SupportedFilterTests
微型端口驱动程序支持的筛选器测试操作。 例如,网络适配器支持测试所选标头字段以确定它是否等于给定值。 VMQ 微型端口驱动程序必须设置NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED标志。

SupportedHeaders
微型端口驱动程序可以检查的网络数据包标头的类型。 例如,网络适配器可以检查网络数据包的 MAC 标头。 MAC 标头包括数据包类型、目标和源 MAC 地址、VLAN 标识符以及优先级标记字段。 VMQ 微型端口驱动程序必须设置NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED标志。

SupportedMacHeaderFields
微型端口驱动程序可以检查的 MAC 标头字段的类型。 VMQ 微型端口驱动程序必须设置NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED标志。

MaxMacHeaderFilters
微型端口驱动程序支持的 MAC 标头筛选器的最大数目。 标头筛选器数量至少应与 VM 队列数量一样多。

MaxQueueGroups
此成员是为 NDIS 保留的。

MaxQueuesPerQueueGroup
此成员是为 NDIS 保留的。

MinLookaheadSplitSize
网络适配器支持查找数据包段的最小大小(以字节为单位)。

注意 从 NDIS 6.30 开始,不再支持将数据包拆分为单独的观察缓冲区。 支持 NDIS 6.30 或更高版本的微型端口驱动程序必须将此成员设置为零。

MaxLookaheadSplitSize
网络适配器支持用于查找数据包段的最大大小(以字节为单位)。

注意 从 NDIS 6.30 开始,不再支持将数据包拆分为单独的观察缓冲区。 支持 NDIS 6.30 或更高版本的微型端口驱动程序必须将此成员设置为零。

OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES OID 查询成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向 NDIS_RECEIVE_FILTER_CAPABILITIES 结构的指针。 这些功能可能包括当前由 INF 文件设置或通过 “高级 属性”页禁用的 VMQ 硬件功能。 有关 VMQ INF 文件设置的详细信息,请参阅 VMQ 标准 INF 条目

NDIS 微型端口驱动程序在 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的 HardwareReceiveFilterCapabilities 成员中提供初始化期间接收筛选硬件功能。

OID_RECEIVE_FILTER_CURRENT_CAPABILITIES OID 查询成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向 NDIS_RECEIVE_FILTER_CAPABILITIES 结构的指针。 这些功能包括当前启用的 VMQ 功能。

NDIS 微型端口驱动程序在 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的 CurrentReceiveFilterCapabilities 成员中提供初始化期间当前启用的接收筛选功能。

在绑定操作期间,NDIS 将基础网络适配器当前启用的接收筛选功能报告给 NDIS_BIND_PARAMETERS 结构的 ReceiveFilterCapabilities 成员中的过度协议驱动程序。

NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS 结构用于OID_RECEIVE_FILTER_GLOBAL_PARAMETERS查询 OID 以获取当前的全局接收筛选器设置。

NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS包括以下信息:

EnabledFilterTypes
已启用的接收筛选器的类型。 NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED标志指定启用虚拟机队列 (VMQ) 筛选器。

EnabledQueueTypes
已启用的接收队列的类型。 NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED标志指定启用虚拟机 (VM) 队列。

OID_RECEIVE_FILTER_GLOBAL_PARAMETERS OID 查询成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向 NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS 结构的指针。 NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS结构指定在网络适配器上启用或禁用的接收筛选功能。

NDIS 协议驱动程序使用 OID_RECEIVE_FILTER_GLOBAL_PARAMETERS 查询当前全局配置参数,以便在网络适配器上接收筛选。 例如,协议驱动程序可以使用此 OID 来确定是启用或禁用接收筛选器或接收队列的类型。