NDIS_RECEIVE_FILTER_PARAMETERS 结构 (ntddndis.h)
NDIS_RECEIVE_FILTER_PARAMETERS 结构指定 NDIS 接收筛选器的参数。
NDIS 接收筛选器用于以下 NDIS 接口:
-
NDIS 数据包合并。 有关如何在此技术中使用接收筛选器的详细信息,请参阅 管理数据包合并接收筛选器。
-
单根 I/O 虚拟化 (SR-IOV) 。 有关如何在此技术中使用接收筛选器的详细信息,请参阅 在虚拟端口上设置接收筛选器。
-
虚拟机队列 (VMQ)。 有关如何在此接口中使用接收筛选器的详细信息,请参阅 设置和清除 VMQ 筛选器。
语法
typedef struct _NDIS_RECEIVE_FILTER_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_RECEIVE_FILTER_TYPE FilterType;
NDIS_RECEIVE_QUEUE_ID QueueId;
NDIS_RECEIVE_FILTER_ID FilterId;
ULONG FieldParametersArrayOffset;
ULONG FieldParametersArrayNumElements;
ULONG FieldParametersArrayElementSize;
ULONG RequestedFilterIdBitCount;
ULONG MaxCoalescingDelay;
NDIS_NIC_SWITCH_VPORT_ID VPortId;
} NDIS_RECEIVE_FILTER_PARAMETERS, *PNDIS_RECEIVE_FILTER_PARAMETERS;
成员
Header
NDIS_RECEIVE_FILTER_PARAMETERS 结构的NDIS_OBJECT_HEADER结构。 驱动程序将 Header 指定的结构的 Type 成员设置为 NDIS_OBJECT_TYPE_DEFAULT。
为了指示 NDIS_RECEIVE_FILTER_PARAMETERS 结构的版本,驱动程序将 Revision 成员设置为以下值之一:
NDIS_RECEIVE_FILTER_PARAMETERS_REVISION_2
为 NDIS 6.30 添加了 VPortId 和 MaxCoalescingDelay 成员。
驱动程序将 Size 成员设置为 NDIS_SIZEOF_RECEIVE_FILTER_PARAMETERS_REVISION_2。
NDIS_RECEIVE_FILTER_PARAMETERS_REVISION_1
NDIS 6.20 的原始版本。
驱动程序将 Size 成员设置为 NDIS_SIZEOF_RECEIVE_FILTER_PARAMETERS_REVISION_1。
Flags
以下标志的按位 OR。
版本 | 值 | 含义 |
---|---|---|
NDIS 6.50 及更高版本 | NDIS_RECEIVE_FILTER_PACKET_ENCAPSULATION 0x00000002 | 如果在接收筛选器上设置了此标志,则网络适配器必须与封装数据包中内部以太网帧中的此 MAC 地址匹配。 |
NDIS 6.20 到 NDIS 6.40 | NDIS_RECEIVE_FILTER_PACKET_ENCAPSULATION_GRE 0x00000002 | 如果在接收筛选器上设置了此标志,则网络适配器必须与 GRE 封装数据包中内部以太网帧中的此 MAC 地址匹配。 |
FilterType
接收筛选器的类型。
QueueId
接收队列标识符。 此标识符是介于零和网络适配器支持的队列数之间的整数。 值 NDIS_DEFAULT_RECEIVE_QUEUE_ID 指定默认接收队列。
FilterId
接收筛选器标识符。 筛选器标识符是一个整数,从 1 到网络适配器支持的接收筛选器数。 值为零无效。
FieldParametersArrayOffset
此结构后面的元素数组中第一个元素的偏移量(以字节为单位)。 偏移量从 NDIS_RECEIVE_FILTER_PARAMETERS 结构的开头到第一个元素的开头。 数组中的每个元素都是 一个NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 结构。
FieldParametersArrayNumElements
数组中的元素数。
FieldParametersArrayElementSize
数组中每个元素的大小(以字节为单位)。
RequestedFilterIdBitCount
筛选器标识符中的位数。 微型端口驱动程序将此位数用于 NetBufferListFilteringInfo 带外 (OOB) NET_BUFFER_LIST 结构中的数据的筛选器标识符。 如果此成员为零,微型端口驱动程序不得在 OOB NetBufferListFilteringInfo 数据中指定筛选器标识符。
从 NDIS 6.20 开始,此成员必须设置为零。
MaxCoalescingDelay
与此接收筛选器匹配的第一个数据包保存在网络适配器上的硬件合并缓冲区内的最长时间(以毫秒为单位)。
一旦收到与筛选器匹配的第一个数据包,网络适配器就会合并该数据包。 适配器还会启动硬件计时器,其过期时间设置为 MaxCoalescingDelay 成员的值。 与同一筛选器匹配的其他数据包必须由适配器合并,而无需重置和重启硬件计时器。
当硬件计时器过期时,适配器必须生成接收中断,以向主机发出与接收筛选器匹配的合并数据包的信号。
VPortId
要配置接收筛选器的 VPort 标识符。 值 NDIS_DEFAULT_VPORT_ID 指定连接到 PCI Express (PCIe) 物理功能的默认 VPort (网络适配器的 PF) 。
注解
NDIS_RECEIVE_FILTER_PARAMETERS 结构与 的 OID 请求一起使用
OID_RECEIVE_FILTER_PARAMETERS 和
OID_RECEIVE_FILTER_SET_FILTER。 这些 OID 请求指定筛选器的配置参数。 筛选器规范可以包括对网络数据包中多个字段的测试。
NDIS_RECEIVE_FILTER_PARAMETERS 结构的 FieldParametersArrayOffset、FieldParametersArrayNumElements 和 FieldParametersArrayElementSize 成员定义 数组 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 结构。 数组中的每个 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 结构为网络标头中的一个字段设置筛选器测试条件。
网络适配器将所有现场测试的结果与逻辑 AND 操作相结合。 也就是说,如果 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 结构数组中包含的任何现场测试失败,则网络数据包不符合指定的筛选条件。
当网络适配器根据这些筛选条件测试收到的数据包时,它必须忽略数据包中未指定测试条件的所有字段。
如果数据包满足筛选条件,则网络适配器必须执行下列操作之一:
-
如果网络适配器支持 NDIS 接收数据包合并,则适配器必须合并与筛选器匹配的数据包。 适配器还必须合并与相同或不同的接收筛选器匹配的已接收数据包。 适配器必须保留生成接收中断,直到发生另一个硬件事件,如下所示:
- 硬件计时器的过期时间设置为 MaxCoalescingDelay 成员的值。
- 硬件合并缓冲区中的可用空间达到适配器特定的低水位线。
有关详细信息,请参阅 处理数据包合并接收筛选器。
-
如果网络适配器支持 SR-IOV 接口,则适配器应将数据包转发到默认或非默认 VPort 的接收队列。 接收队列由 QueueId 成员指定,VPort 由 VPortId 成员指定。
注意从 Windows Server 2012 开始,SR-IOV 接口仅支持默认和非默认 VPort 上的默认接收队列。 通过将 QueueId 成员设置为 NDIS_DEFAULT_RECEIVE_QUEUE_ID 来指定默认接收队列。
- 如果网络适配器支持 VMQ 接口,则适配器应将数据包转发到 QueueId 成员指定的接收队列。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.20 及更高版本中受支持。 |
标头 | ntddndis.h (包括 Ndis.h) |
另请参阅
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈