确定 NIC 交换机功能

本主题介绍 NDIS 和过分驱动程序如何确定支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器的 NIC 交换机功能。 本主题包含以下信息:

MiniportInitializeEx 期间报告 NIC 交换机功能

通过覆盖驱动程序查询 NIC 交换机功能

注意 只有 PCI Express (PCIe) 物理功能 (PF) SR-IOV 网络适配器的微型端口驱动程序才能报告 NIC 交换机功能。 PCIe 虚拟函数的微型端口驱动程序 (VF) 不得报告 SR-IOV 适配器的 NIC 切换功能。

有关 NIC 开关的详细信息,请参阅 NIC 开关

MiniportInitializeEx 期间报告 NIC 交换机功能

当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序提供以下 NIC 切换功能:

  • 网络适配器可以支持的 NIC 交换机的完整硬件功能集。

    注意 从 NDIS 6.30 开始,网络适配器上只创建一个 NIC 交换机。 此开关称为 默认 NIC 开关

  • 网络适配器上当前启用的 NIC 交换机功能。

微型端口驱动程序通过按以下方式初始化的 NDIS_NIC_SWITCH_CAPABILITIES 结构报告基础网络适配器的 NIC 交换机硬件功能:

  1. 微型端口驱动程序初始化 Header 成员。 驱动程序将 HeaderType 成员设置为NDIS_OBJECT_TYPE_DEFAULT。

    从 NDIS 6.30 开始,微型端口驱动程序将 HeaderRevision 成员设置为 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 并将 Size 成员设置为 NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2。

  2. 微型端口驱动程序将 NDIS_NIC_SWITCH_CAPABILITIES 结构的 NicSwitchCapabilities 成员中的相应标志设置为 SR-IOV 网络适配器的 NIC 交换机功能。 例如,如果 NIC 交换机支持在交换机上创建的每个虚拟端口 (VPort) 上进行中断审查,微型端口驱动程序将设置NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED标志。

  3. 微型端口驱动程序将 NDIS_NIC_SWITCH_CAPABILITIES 结构的其他成员设置为 SR-IOV 网络适配器的 NIC 交换机功能的值范围。 例如,微型端口驱动程序将 MaxNumVFsMaxNumVPorts 成员设置为适配器可以支持的最大 VF 和 VPort 数。

    注意根据网络适配器上的可用硬件资源,微型端口驱动程序可以将 MaxNumVFs 成员设置为小于其 *NumVF 关键字 (keyword) 的值。 有关此关键字 (keyword) 的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序会按照以下步骤注册网络适配器的 NIC 切换功能:

  1. 微型端口驱动程序初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构。

    微型端口驱动程序将 HardwareNicSwitchCapabilities 成员设置为指向以前初始化 的 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。

    如果 *SRIOV INF 关键字 (keyword) 的注册表设置的值为 1,则当前已启用网络适配器以创建和配置 NIC 交换机。 微型端口驱动程序将 CurrentNicSwitchCapabilities 成员设置为指向同一 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。

    如果 *SRIOV INF 关键字 (keyword) 的注册表设置的值为零,则表示当前未为 NIC 交换机的创建和配置启用网络适配器。 微型端口驱动程序必须将 CurrentNicSwitchCapabilities 成员设置为 NULL。

    有关 *SRIOV INF 关键字 (keyword) 的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

  2. 驱动程序调用 NdisMSetMiniportAttributes 并将 MiniportAttributes 参数设置为指向 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的指针。

有关适配器初始化过程的详细信息,请参阅 初始化微型端口适配器

创建不带 SR-IOV 的 NIC 交换机

未启用 SR-IOV 时,NDIS 6.60 及更高版本中的微型端口驱动程序必须遵守以下 NIC 交换机和 VMQ 功能共存的要求。 启用 SR-IOV 后,微型端口驱动程序应遵循上一部分中的现有要求。

  • 微型端口驱动程序播发 NIC 交换机和 VMQ 功能。
  • NIC 可以在 NIC 开关和 VMQ 模式之间切换,而无需重启 NIC。
    • 当 NIC 最初启动时,它已准备好处于任一模式, (创建 NIC 交换机或) 创建 VMQ 队列。
      • 如果创建了 NIC 交换机,则微型端口将无法执行任何后续 VMQ 队列分配回调。
      • 如果首先创建 VMQ 队列,微型端口驱动程序将成功分配 VMQ 队列,并失败任何 NIC 交换机分配调用。
    • 删除 NIC 开关或删除所有 VMQ 队列时,微型端口驱动程序将返回到初始状态,并准备再次进入其中任一模式。

若要播发无需使用 SR-IOV 即可创建 NIC 交换机,微型端口驱动程序在 NDIS_NIC_SWITCH_CAPABILITIES 结构的 NicSwitchCapabilities 成员中设置 NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED 标志。

通过覆盖驱动程序查询 NIC 交换机功能

NDIS 按以下方式将网络适配器当前启用的 NIC 交换机功能传递给绑定到网络适配器的过度驱动程序:

当 NDIS 处理对象标识符 (OID) 查询OID_NIC_SWITCH_HARDWARE_CAPABILITIES或筛选器驱动程序发出的OID_NIC_SWITCH_HARDWARE_CAPABILITIES和OID_NIC_SWITCH_CURRENT_CAPABILITIES的查询请求时,NDIS 也会返回NDIS_NIC_SWITCH_CAPABILITIES结构。