NDIS_RECEIVE_FILTER_PARAMETERS 结构 (ntddndis.h)

NDIS_RECEIVE_FILTER_PARAMETERS 结构指定 NDIS 接收筛选器的参数。

NDIS 接收筛选器用于以下 NDIS 接口:

语法

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 添加了 VPortIdMaxCoalescingDelay 成员。

驱动程序将 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 指定默认接收队列。

注意 支持 NDIS 数据包合并 或 SR-IOV 接口的微型端口驱动程序必须将 QueueId 成员设置为 NDIS_DEFAULT_RECEIVE_QUEUE_ID。
 

FilterId

接收筛选器标识符。 筛选器标识符是一个整数,从 1 到网络适配器支持的接收筛选器数。 值为零无效。

FieldParametersArrayOffset

此结构后面的元素数组中第一个元素的偏移量(以字节为单位)。 偏移量从 NDIS_RECEIVE_FILTER_PARAMETERS 结构的开头到第一个元素的开头。 数组中的每个元素都是 一个NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 结构。

注意 如果 FieldParametersArrayNumElements 设置为零,则忽略此成员。
 

FieldParametersArrayNumElements

数组中的元素数。

FieldParametersArrayElementSize

数组中每个元素的大小(以字节为单位)。

RequestedFilterIdBitCount

筛选器标识符中的位数。 微型端口驱动程序将此位数用于 NetBufferListFilteringInfo 带外 (OOB) NET_BUFFER_LIST 结构中的数据的筛选器标识符。 如果此成员为零,微型端口驱动程序不得在 OOB NetBufferListFilteringInfo 数据中指定筛选器标识符。

从 NDIS 6.20 开始,此成员必须设置为零。

MaxCoalescingDelay

与此接收筛选器匹配的第一个数据包保存在网络适配器上的硬件合并缓冲区内的最长时间(以毫秒为单位)。

一旦收到与筛选器匹配的第一个数据包,网络适配器就会合并该数据包。 适配器还会启动硬件计时器,其过期时间设置为 MaxCoalescingDelay 成员的值。 与同一筛选器匹配的其他数据包必须由适配器合并,而无需重置和重启硬件计时器。

当硬件计时器过期时,适配器必须生成接收中断,以向主机发出与接收筛选器匹配的合并数据包的信号。

注意 不支持 NDIS 数据包合并的 微型端口驱动程序必须忽略此成员。
 

VPortId

要配置接收筛选器的 VPort 标识符。 值 NDIS_DEFAULT_VPORT_ID 指定连接到 PCI Express (PCIe) 物理功能的默认 VPort (网络适配器的 PF) 。

注意 此成员仅对 SR-IOV 接口有效。
 

注解

NDIS_RECEIVE_FILTER_PARAMETERS 结构与 的 OID 请求一起使用
OID_RECEIVE_FILTER_PARAMETERS
OID_RECEIVE_FILTER_SET_FILTER。 这些 OID 请求指定筛选器的配置参数。 筛选器规范可以包括对网络数据包中多个字段的测试。

NDIS_RECEIVE_FILTER_PARAMETERS 结构的 FieldParametersArrayOffsetFieldParametersArrayNumElementsFieldParametersArrayElementSize 成员定义 数组 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_OBJECT_HEADER

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS

NET_BUFFER_LIST

OID_RECEIVE_FILTER_PARAMETERS

OID_RECEIVE_FILTER_SET_FILTER