处理 OID_NIC_SWITCH_CREATE_SWITCH 请求

NDIS 发出对象标识符 (OID) 方法请求OID_NIC_SWITCH_CREATE_SWITCH 执行以下操作:

  • 在微型端口驱动程序为 PCI Express (PCIe) 物理功能 (PF) 静态创建的网络适配器上启用 NIC 开关。 PF 是网络适配器的硬件组件,支持单根 I/O 虚拟化 (SR-IOV) 。

    NIC 开关由 PF 微型端口驱动程序从上下文中静态创建,以调用 MiniportInitializeEx。 驱动程序分配资源,并根据从注册表设置中读取的参数创建开关。

  • 在网络适配器上动态创建 NIC 交换机。

    如果 PF 微型端口驱动程序不支持创建静态 NIC 交换机,微型端口驱动程序会分配资源,并根据 OID 请求中指定的参数创建开关。

当 NDIS 调用驱动程序的 MiniportInitializeEx 函数时,PF 微型端口驱动程序将播发其对 SR-IOV 接口的支持。 如果 PF 微型端口驱动程序支持 SR-IOV,则 NDIS 将从注册表读取 NIC 交换机配置。 在 NDIS 向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法请求之前,NDIS 通过以下方式使用注册表信息设置 NDIS_NIC_SWITCH_PARAMETERS 结构的格式:

  • NDIS 将 SwitchType 成员设置为 NIC 开关的类型。

    从Windows Server 2012开始,Windows 仅支持 NdisNicSwitchTypeExternal 的开关类型。 外部交换机指定连接到此类交换机 (VPorts) 的虚拟端口可以通过网络适配器上的物理端口访问外部网络。

    有关 NIC 开关的详细信息,请参阅 SR-IOV 体系结构

  • NDIS 将 SwitchId 成员设置为 NIC 交换机的标识符值。 交换机标识符是介于零和网络适配器支持的交换机数之间的整数。 NDIS_DEFAULT_SWITCH_ID值指示默认 NIC 开关。

    注意从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的默认 NIC 交换机。

  • NDIS 设置 NumVF 成员,该成员指定可在 NIC 交换机上分配的 PCIe 虚拟函数 (VF) 的数目。

收到 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法请求时,PF 微型端口驱动程序必须执行以下操作:

  1. 如果 PF 微型端口驱动程序支持静态交换机创建和配置,则在 NDIS 调用 MiniportInitializeEx 时,它会创建 NIC 交换机。 当驱动程序处理此 OID 请求时,它必须验证 NDIS_NIC_SWITCH_PARAMETERS 结构中的配置参数。 参数必须与驱动程序在调用 MiniportInitializeEx 期间用于创建开关的参数相同。 如果不是这样,则驱动程序必须使 OID 请求失败。

    有关详细信息,请参阅 NIC 交换机的静态创建

  2. 如果 PF 微型端口驱动程序支持动态交换机创建和配置,则驱动程序必须验证 NDIS_NIC_SWITCH_PARAMETERS 结构的配置值,并根据这些值创建 NIC 开关。

    有关详细信息,请参阅 NIC 交换机的动态创建

  3. PF 微型端口驱动程序必须为 NIC 交换机上的默认 VPort 分配必要的硬件和软件资源。

    注意 默认 VPort 始终通过 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 请求创建,并通过 OID_NIC_SWITCH_DELETE_SWITCH 的 OID 请求删除。 OID_NIC_SWITCH_CREATE_VPORTOID_NIC_SWITCH_DELETE_VPORT的 OID 请求用于在 NIC 交换机上创建和删除非默认 VPort。

  4. 支持动态交换机创建和配置的 PF 微型端口驱动程序必须通过调用 NdisMEnableVirtualization 在交换机上启用 SR-IOV 虚拟化。 此调用在适配器的 PCI Express (PCIe) 配置空间的 SR-IOV 扩展功能结构中配置 NumVF 成员和 VF Enable 位。

    有关 SR-IOV 配置空间的详细信息,请参阅 PCI-SIG 单根 I/O 虚拟化和共享 1.1 规范。

    注意 如果 PF 微型端口驱动程序支持静态交换机创建,则在调用 MiniportInitializeEx 时,它会在创建开关后启用 SR-IOV 虚拟化。

如果 PF 微型端口驱动程序成功完成OID_NIC_SWITCH_CREATE_SWITCH的 OID 方法请求,则允许发生以下情况:

  • 可以通过 OID_NIC_SWITCH_ALLOCATE_VF的 OID 方法请求在 NIC 交换机上分配 VF。

  • 可以通过 OID_NIC_SWITCH_CREATE_VPORT的 OID 方法请求在 NIC 交换机上创建非默认 VPort。

    微型端口驱动程序负责管理其非默认 VPort 池。 驱动程序通过 NDIS_NIC_SWITCH_INFO 结构的 NumVPorts 成员指定其池中的非默认 VPort 数。 驱动程序通过 OID_NIC_SWITCH_ENUM_SWITCHES的 OID 查询请求返回此结构。

    注意 网络适配器必须始终从其池为 PF 创建默认 VPort。