静态创建 NIC 交换机

支持单根 I/O 虚拟化(SR-IOV)的网络适配器必须能够创建 NIC 交换机。 对于某些适配器,可以在调用 MiniportInitializeEx 的上下文中静态创建 NIC 开关。

只有 SR-IOV 适配器的 PCI Express (PCIe) 物理功能(PF)的微型端口驱动程序才能在适配器上创建 NIC 开关。

注意 从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的一个 NIC 交换机。 此开关称为 默认 NIC 交换机,由NDIS_DEFAULT_SWITCH_ID标识符引用。

默认 NIC 开关的参数是通过注册表中的标准化关键字设置定义的。 有关这些关键字的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

当 NDIS 调用驱动程序的 MiniportInitializeEx 函数时,PF 微型端口驱动程序静态创建 NIC 开关。 通常,驱动程序在网络适配器上启用 SR-IOV 之前,创建 NIC 交换机并将其配置为初始化序列的一部分。

当 PF 微型端口驱动程序静态创建 NIC 交换机并在调用 MiniportInitializeEx 的上下文中对网络适配器启用 SR-IOV 时,将遵循以下步骤:

  1. PF 微型端口驱动程序必须读取 SR-IOV 标准化关键字,以确定是否已启用 SR-IOV 并获取 NIC 交换机配置参数。

    注意 如果 PF 微型端口驱动程序向 MiniportSetOptions 函数注册了入口点,则在 NDIS 调用 MiniportSetOptions 时,驱动程序可能以前从注册表获取这些参数。

  2. 如果启用了 SR-IOV,则 PF 微型端口驱动程序使用注册表中的 NIC 开关参数配置网络适配器。 驱动程序必须验证参数在配置网络适配器之前是否有效。 例如,微型端口驱动程序必须验证分配给 NIC 交换机的 PCIe 虚拟函数(VF)的最大数目不超过网络适配器支持的 VF 数。

  3. 微型端口驱动程序调用 NdisMEnableVirtualization 以启用 SR-IOV 并设置网络适配器上的 VF 数。 此函数在适配器的 PCI 配置空间中配置 SR-IOV 扩展功能。 如果此函数返回NDIS_STATUS_SUCCESS,则启用 SR-IOV,并且 VF 通过 PCIe 接口公开。

注意 如果 PF 微型端口驱动程序静态创建 NIC 开关,则在 NDIS 发出 OID_NIC_SWITCH_CREATE_SWITCH的对象标识符 (OID) 方法请求之前,无法使用该开关。 如果 PF 微型端口驱动程序以静态方式创建了 NIC 开关,则必须验证在 OID 请求中是否指定了开关参数。 这些参数(包含在与 OID 请求关联的 NDIS_NIC_SWITCH_PARAMETERS 结构中)必须与驱动程序用于创建交换机的参数相同。

有关如何处理 OID_NIC_SWITCH_CREATE_SWITCH 请求的详细信息,请参阅 处理OID_NIC_SWITCH_CREATE_SWITCH请求

有关 PF 微型端口驱动程序的初始化顺序和要求的详细信息,请参阅 初始化 PF 微型端口驱动程序