指示对远程 NDIS QoS 参数的更改

支持 NDIS 服务质量 (QoS) 的微型端口驱动程序在首次从对等方接收 远程 NDIS QoS 参数或稍后更改时,会发出NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE状态指示。 微型端口驱动程序通过 IEEE 802.1Qaz 数据中心桥接 Exchange (DCBX) 协议从远程对等方接收这些 QoS 参数。

微型端口驱动程序必须遵循以下准则来发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示:

  • 如果微型端口驱动程序尚未从远程对等机收到 DCBX 帧,则它不得发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示。

  • 微型端口驱动程序在首次从远程对等机接收 QoS 设置后,必须发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示。

    注意 如果网络适配器在设置驱动程序的本地 QoS 参数之前从对等方接收远程 QoS 参数设置,则微型端口驱动程序必须发出此状态指示。 有关详细信息,请参阅 设置本地 NDIS QoS 参数

  • 在此初始状态指示之后,微型端口驱动程序应仅在确定远程对等上的 QoS 设置更改时发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示。

    注意 如果远程 NDIS QoS 参数没有更改,微型端口驱动程序不应发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示。 如果驱动程序确实发出此类型的状态指示,则 NDIS 可能不会将指示传递给过度表示的驱动程序。

注意 如果微型端口驱动程序当前已启用其 NDIS QoS 功能,则必须发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示。 从 Windows Server 2012 开始,无论是否安装了 Microsoft DCB 服务器功能,系统管理员都可以查看 NDIS QoS 和数据中心桥接 (DCB) 设置。

发出NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE状态指示的指南

微型端口驱动程序在发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示时遵循以下步骤:

  1. 微型端口驱动程序分配的缓冲区足够大,可以包含以下内容:

    • 包含 NDIS QoS 配置设置以及 NDIS QoS 流量类的全局操作参数的 NDIS_QOS_PARAMETERS 结构。

    • NDIS_QOS_CLASSIFICATION_ELEMENT结构的数组。 其中每个结构都指定数据包数据模式定义的流量分类 (条件) 和关联的 IEEE 802.1p 优先级 (操作) 。 如果网络适配器在传输或 出口中发现与条件匹配的数据包模式,则会将关联的优先级级别分配给数据包。 适配器还会根据优先级将其他 NDIS QoS 策略应用于数据包。

  2. 微型端口使用远程 NDIS QoS 参数初始化 NDIS_QOS_PARAMETERS 结构。 驱动程序必须提供从远程对等方发送的 DCBX 帧接收的完整远程参数集。

    当微型端口驱动程序初始化 Header 成员时,它会将 HeaderType 成员设置为 NDIS_OBJECT_TYPE_QOS_PARAMETERS。 微型端口驱动程序将 HeaderRevision 成员设置为 NDIS_QOS_PARAMETERS_REVISION_1 并将 Size 成员设置为 NDIS_SIZEOF_QOS_PARAMETERS_REVISION_1。

    如果相应的成员包含自微型端口驱动程序先前发出NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE状态指示以来已更改的数据,微型端口驱动程序将设置相应的 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志。

    注意 设置这些 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志是可选的。 NDIS 始终假定 指定了NDIS_QOS_PARAMETERS 的成员,即使这些成员没有与以前的 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示发生更改。

    微型端口驱动程序设置 Flags 成员,以指定 包含在 NDIS_QOS_PARAMETERS 结构成员中的数据的状态信息。

    例如,微型端口驱动程序在 Flags 成员中为包含自微型端口驱动程序先前发出NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE状态指示后已更改的数据的成员设置相应的 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志。

    有关如何设置 Flags 成员的详细信息,请参阅 设置 标志 成员的准则

  3. 微型端口驱动程序从远程 NDIS QoS 参数为每个流量分类初始化 NDIS_QOS_CLASSIFICATION_ELEMENT 结构。 驱动程序将这些元素添加到缓冲区中 NDIS_QOS_PARAMETERS 结构的末尾。

    注意 微型端口驱动程序不得在任何NDIS_QOS_CLASSIFICATION_ELEMENT结构的 Flags 成员中设置 NDIS_QOS_CLASSIFICATION_ENFORCED_BY_MINIPORT标志

    驱动程序将 NDIS_QOS_PARAMETERS 结构的 NumClassificationElements 成员设置为数组中的分类元素数。 驱动程序将 FirstClassificationElementOffset 成员设置为缓冲区开头的第一个元素的字节偏移量。 驱动程序还会将 ClassificationElementSize 成员设置为数组中每个元素的长度(以字节为单位)。

    注意 从 NDIS 6.30 开始,微型端口驱动程序必须将 ClassificationElementSize 成员设置为 sizeof(NDIS_QOS_CLASSIFICATION_ELEMENT) 。

  4. 微型端口驱动程序通过以下方式初始化状态指示的 NDIS_STATUS_INDICATION 结构:

    • StatusCode 成员必须设置为 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE。

    • StatusBuffer 成员必须设置为指向包含远程 NDIS QoS 参数的缓冲区的指针。

    • StatusBufferSize 成员必须设置为缓冲区的长度(以字节为单位)。

  5. 微型端口驱动程序通过调用 NdisMIndicateStatusEx 发出状态指示。 驱动程序必须将指向 NDIS_STATUS_INDICATION 结构的指针传递给 StatusIndication 参数。

设置标志成员指南

微型端口驱动程序在 NDIS_QOS_PARAMETERS 结构的 Flags 成员中设置以下标志,以指定在网络适配器上配置或更改了哪些操作 NDIS QoS 参数:

NDIS_QOS_PARAMETERS_ETS_CONFIGURED
如果设置了此标志,则微型端口驱动程序已使用包含在以下成员中的 ETS 参数配置网络适配器:

  • NumTrafficClasses

  • PriorityAssignmentTable

  • TcBandwidthAssignmentTable

  • TsaAssignmentTable

注意 微型端口驱动程序必须支持 ETS,才能支持 DCB 的 NDIS QoS。 但是,此标志的设置不指定网络适配器是否支持 ETS。 相反,此标志的设置仅指定是否在网络适配器上配置 ETS 参数。

NDIS_QOS_PARAMETERS_ETS_CHANGED
如果设置了此标志,则以下成员中的一个或多个 ETS 参数已更改:

  • NumTrafficClasses

  • PriorityAssignmentTable

  • TcBandwidthAssignmentTable

  • TsaAssignmentTable

NDIS_QOS_PARAMETERS_PFC_CONFIGURED
如果设置了此标志,则微型端口驱动程序已使用 PfcEnable 成员中包含的 PFC 设置配置网络适配器。

注意 微型端口驱动程序必须支持 PFC,才能支持 DCB 的 NDIS QoS。 此标志的设置未指定网络适配器是否支持 PFC。 相反,此标志的设置仅指定是否在网络适配器上启用 PFC 参数。

NDIS_QOS_PARAMETERS_PFC_CHANGED
如果设置了此标志,则 PfcEnable 成员中的一个或多个 PFC 设置已更改。

NDIS_QOS_PARAMETERS_CLASSIFICATION_CONFIGURED
如果设置了此标志,则微型端口驱动程序已使用在以下成员中指定的 QoS 流量分类参数配置网络适配器:

  • NumClassificationElements

  • ClassificationElementSize

  • FirstClassificationElementOffset

NDIS_QOS_PARAMETERS_CLASSIFICATION_CHANGED
如果设置了此标志,则以下成员中的一个或多个 QoS 流量分类参数已更改:

  • NumClassificationElements

  • ClassificationElementSize

  • FirstClassificationElementOffset

注意如果 NDIS_QOS_PARAMETERS 结构包含 NDIS QoS 参数设置,则必须设置 NDIS_QOS_PARAMETERS_Xxx_CONFIGURED 标志。 无论设置是否已更改,微型端口驱动程序都必须设置这些标志。 但是,驱动程序必须仅为已更改的设置设置 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志。

指示无效远程 NDIS QoS 参数的准则

如果满足以下条件,微型端口驱动程序必须使其远程 QoS 参数失效:

  • 远程 QoS 参数的生存时间 (TTL) 值过期。

    注意 DCBX 通过 IEEE 802.1AB-2005 标准中指定的链路层发现协议 (LLDP) 协议进行传输。 LLDP 帧始终包含 TTL 字段。

  • 另一个数据链接对等方在 TTL 值过期之前发送 DCBX 帧。 此方案称为 多对等 条件。 DCBX 要求微型端口驱动程序仅维护从单个数据链接对等方接收的一组远程 QoS 参数。

    发生多对等条件时,微型端口驱动程序必须使所有远程 QoS 参数失效,直到接收的所有 DCBX 帧的 TTL 值过期。

当微型端口驱动程序使其远程 NDIS QoS 参数失效时,它必须在发出 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE 状态指示时执行以下步骤:

  1. 由于微型端口驱动程序未报告任何有效的远程 NDIS QoS 参数,因此它必须先使用零填充 NDIS_QOS_PARAMETERS 结构。

    当微型端口驱动程序初始化此结构的 Header 成员时,它会将 HeaderType 成员设置为NDIS_OBJECT_TYPE_QOS_PARAMETERS。 微型端口驱动程序将 HeaderRevision 成员设置为 NDIS_QOS_PARAMETERS_REVISION_1 并将 Size 成员设置为 NDIS_SIZEOF_QOS_PARAMETERS_REVISION_1。

    微型端口驱动程序在 Flags 成员中设置相应的 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志。

  2. 微型端口驱动程序通过以下方式初始化状态指示的 NDIS_STATUS_INDICATION 结构:

    • StatusCode 成员必须设置为 NDIS_STATUS_QOS_REMOTE_PARAMETERS_CHANGE。

    • StatusBuffer 成员必须设置为NDIS_QOS_PARAMETERS结构的地址。

    • StatusBufferSize 成员必须设置为 sizeof(NDIS_QOS_PARAMETERS)

  3. 微型端口驱动程序通过调用 NdisMIndicateStatusEx 发出状态指示。 驱动程序必须将指向 NDIS_STATUS_INDICATION 结构的指针传递给 StatusIndication 参数。