报告数据包合并功能
微型端口驱动程序在网络适配器初始化期间向 NDIS 注册以下功能:
网络适配器支持的数据包合并功能。
当前在网络适配器上启用的数据包合并功能。
数据包合并接收当前在网络适配器上启用的筛选功能。
注意可以通过 *PacketCoalescing INF 关键字 (keyword) 设置启用或禁用微型端口驱动程序对数据包合并的支持。 此设置显示在网络适配器的 “高级 ”属性页中。 有关数据包合并 INF 文件设置的详细信息,请参阅 用于数据包合并的标准化 INF 关键字。
微型端口驱动程序通过 NDIS_RECEIVE_FILTER_CAPABILITIES 结构报告基础网络适配器的数据包合并和筛选功能。 如果注册表中的 *PacketCoalescing 关键字 (keyword) 设置的值为 1,则启用数据包合并,微型端口驱动程序按以下方式初始化 NDIS_RECEIVE_FILTER_CAPABILITIES 结构:
微型端口驱动程序初始化 标头 成员。 驱动程序将 Header 的 Type 成员设置为 NDIS_OBJECT_TYPE_DEFAULT。
如果驱动程序支持数据包合并,则会将 Header 的 Revision 成员设置为 NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 并将 Size 成员设置为NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2。
微型端口驱动程序在 SupportedQueueProperties 成员中设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE标志。
如果设置了此标志,则网络适配器必须支持筛选硬件中收到的多播数据包。 此筛选基于 NDIS 通过将 NDIS OID_802_3_MULTICAST_LIST OID 集请求卸载到网络适配器的多播地址。
注意 协议驱动程序还可以通过发送 OID_802_3_ADD_MULTICAST_ADDRESS 和 OID_802_3_DELETE_MULTICAST_ADDRESS 请求来更改多播地址列表的内容。 NDIS 将这些请求合并为 OID_802_3_MULTICAST_LIST OID 集请求。
注意 适配器需要拒绝其目标媒体访问控制 (MAC) 地址与这些 OID 集请求指定的任何多播地址不匹配的任何传入多播数据包。
微型端口驱动程序在 EnabledFilterTypes 成员中设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志。
注意 如果驱动程序设置此标志,则还必须在 SupportedQueueProperties 成员中设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE标志。 否则,NDIS 将通过返回NDIS_STATUS_BAD_CHARACTERISTICS,使对 NdisMSetMiniportAttributes 的 调用失败。
如果微型端口驱动程序设置了 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,则驱动程序必须支持所有接收筛选器测试条件。 驱动程序通过在 SupportedFilterTests 成员中设置以下标志来播发此支持:
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,则驱动程序必须将 SupportedFilterTests 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持在媒体访问控制 (MAC) 、IP 版本 4 (IPv4) 和 IP 版本 6 (IPv6) 标头的各个字段中筛选数据。 驱动程序通过在 SupportedHeaders 成员中设置以下标志来播发此支持:
NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,驱动程序必须将 SupportedHeaders 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持在媒体访问控制 (MAC) 接收的数据包标头内筛选数据。 驱动程序通过在 SupportedMacHeaderFields 成员中设置以下标志来播发此支持:
NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,则驱动程序必须将 SupportedMacHeaderFields 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持在收到的地址解析协议的标头中筛选数据, (ARP) 数据包。 驱动程序通过在 SupportedARPHeaderFields 成员中设置以下标志来播发此支持:
NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,则驱动程序必须将 SupportedARPHeaderFields 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持在开放系统互连 (OSI) 第 3 层 (L3) 标头中筛选数据 (IPv4) 数据包。 驱动程序通过在 SupportedIPv4HeaderFields 成员中设置以下标志来播发此支持:
- NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED
注意 如果微型端口驱动程序未设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,则驱动程序必须将 SupportedIPv4HeaderFields 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持在接收的 IP 版本 6 的 L3 标头中筛选数据, (IPv6) 数据包。 驱动程序通过在 SupportedIPv6HeaderFields 成员中设置以下标志来播发此支持:
- NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,则驱动程序必须将 SupportedIPv6HeaderFields 成员设置为零。
如果微型端口驱动程序设置NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED标志,微型端口驱动程序必须支持对接收的用户数据报协议 (UDP) 数据包的 OSI 第 4 层 (L4) 标头中的数据进行筛选。 驱动程序通过在 SupportedIUdpHeaderFields 成员中设置以下标志来播发此支持:
- NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED
注意 如果收到的 UDP 数据包包含 IPv4 选项或 IPv6 扩展标头,则网络适配器可以像处理未通过 UDP 筛选器测试一样处理数据包。 这样,适配器可以自动删除收到的数据包。
注意 如果微型端口驱动程序未设置 NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 标志,驱动程序必须将 SupportedIUdpHeaderFields 成员设置为零。
微型端口驱动程序必须报告可为单个数据包合并筛选器指定的数据包标头字段的最大测试数。 驱动程序在 MaxFieldTestsPerPacketCoalescingFilter 成员中指定此值。
注意 支持数据包合并的网络适配器必须支持五个或五个以上的数据包标头字段,这些字段可为单个数据包合并筛选器指定。 如果适配器不支持数据包合并,微型端口驱动程序必须将此值设置为零。
微型端口驱动程序必须报告网络适配器支持的最大数据包合并筛选器数。 驱动程序在 MaxPacketCoalescingFilters 成员中指定此值。
注意 支持数据包合并的网络适配器必须支持十个或多个数据包合并筛选器。 如果适配器不支持数据包合并,微型端口驱动程序必须将此值设置为零。
当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序会按照以下步骤报告基础网络适配器的数据包合并和筛选功能:
微型端口驱动程序初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构。
如果注册表中的 *PacketCoalescing 关键字 (keyword) 设置的值为 1,则微型端口驱动程序会将 HardwareReceiveFilterCapabilities 成员设置为指向先前初始化NDIS_RECEIVE_FILTER_CAPABILITIES结构的指针。
如果注册表中的 *PacketCoalescing 关键字 (keyword) 设置的值为零,则微型端口驱动程序不会播发对数据包合并的支持。 它必须将 HardwareReceiveFilterCapabilities 成员设置为 NULL。
驱动程序调用 NdisMSetMiniportAttributes 并将 MiniportAttributes 参数设置为指向 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的指针。
微型端口驱动程序用于报告基础网络适配器的数据包合并和筛选功能的方法基于用于报告电源管理功能的 NDIS 6.20 方法。 有关此方法的详细信息,请参阅 Reporting Power Management Capabilities。
有关适配器初始化过程的详细信息,请参阅 初始化微型端口适配器。