指示对 NDIS QoS 操作参数的更改

支持 NDIS 服务质量 (QoS) 的微型端口驱动程序在驱动程序的操作 NDIS QoS 参数首次解决或以后更改时发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。 微型端口驱动程序使用这些操作参数配置网络适配器以执行 QoS 数据包传输。

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

  • 微型端口驱动程序在解决其操作 NDIS QoS 参数并为其配置网络适配器后,必须发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。

    请注意如果在注册表中使用专有的本地 NDIS QoS 参数预配微型端口驱动程序,驱动程序必须在调用 MiniportInitializeEx 期间或立即发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。 在这种情况下,驱动程序使用其专有的本地 NDIS QoS 参数设置初始化 NDIS_QOS_PARAMETERS 结构。

    有关驱动程序如何解析其操作 NDIS QoS 参数设置的详细信息,请参阅 解析操作 NDIS QoS 参数

  • 在此初始状态指示之后,微型端口驱动程序应在更改其操作 NDIS QoS 参数时发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。 例如,在以下情况下,操作 NDIS QoS 参数可能会更改:

    • 由于本地 NDIS QoS 参数的变化,操作 NDIS QoS 参数也会发生变化。 这些参数可以通过 OID_QOS_PARAMETERS 的 OID 方法请求或由独立硬件供应商 (IHV) 开发的管理应用程序进行更改。

    • 由于与远程对等方的 QoS 设置冲突,操作 NDIS QoS 参数发生变化。

      微型端口驱动程序使用 IEEE 802.1Qaz 数据中心桥接交换 (DCBX) 协议来发现远程对等方的 QoS 参数。 如果启用了 DCBX 意愿状态,驱动程序必须遵循为 DCBX 状态引擎定义的过程来解决其 QoS 参数与远程对等方的 QoS 参数之间的差异。 有关此状态引擎的详细信息,请参阅 IEEE 802.1Qaz 草案标准。

      有关本地 DCBX 意愿状态的详细信息,请参阅 管理本地 DCBX 意愿状态

    请注意当微型端口驱动程序收到本地或远程 NDIS QoS 参数时,如果操作 NDIS QoS 参数没有更改,则它不应发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。 如果驱动程序发出此不必要的状态指示,NDIS 可能不会将指示传递给上层驱动程序。

  • 微型端口驱动程序在需要重写用于解决操作 NDIS QoS 参数的本地 NDIS QoS 参数时,应发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示。

    微型端口驱动程序通过发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示,通知 NDIS 和超载驱动程序已覆盖本地 NDIS QoS 参数。 对于这种类型的指示,驱动程序必须在 NDIS_QOS_PARAMETERS 结构的 Flags 成员中设置适当的 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志,以指定替代本地 NDIS QoS 参数的原因。

    有关微型端口驱动程序如何管理本地 QoS 参数的详细信息,请参阅 设置本地 NDIS QoS 参数

    有关微型端口驱动程序如何解析其操作 QoS 参数的详细信息,请参阅 解析操作 NDIS QoS 参数

请注意微型端口驱动程序必须发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示,如果当前通过 *QOS 关键字 (keyword) 标准化 INF 关键字 (keyword) 启用其 NDIS QoS 功能。 有关详细信息,请参阅 NDIS QoS 的标准化 INF 关键字

发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示指南

微型端口驱动程序在发出 NDIS_STATUS_QOS_OPERATIONAL_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 结构。 驱动程序必须提供完整的操作参数集,包括可能未在网络适配器上配置的参数。

    当微型端口驱动程序初始化 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 标志(如果相应成员包含自微型端口驱动程序发出 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示以来已更改的数据)。

    请注意设置 NDIS_QOS_PARAMETERS_Xxx_CHANGED 标志是可选的。 NDIS 始终假定 NDIS_QOS_PARAMETERS 的成员是最新的,即使它们没有从以前的 NDIS_STATUS_QOS_OPERATIONAL_PARAMETERS_CHANGE 状态指示更改。

    有关如何设置 标志 成员的详细信息,请参阅设置标志成员指南。

  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_OPERATIONAL_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 标志。