NIC 交换机的静态创建

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

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

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

默认 NIC 开关的参数是通过注册表中的标准化关键字 (keyword) 设置定义的。 有关这些关键字的详细信息,请参阅 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 并通过 PCIe 接口公开 VF。

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

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

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