发出 OID_NIC_SWITCH_ALLOCATE_VF 请求

在向 PCI Express (PCIe) 物理 (函数) 的微型端口驱动程序发出 对象 标识符 (OID) 方法请求OID_NIC_SWITCH_ALLOCATE_VF之前,覆盖驱动程序会格式化 NDIS_NIC_SWITCH_VF_PARAMETERS 结构。 此结构包含要为网络适配器上的 PCIe 虚拟函数 (VF) 分配的资源的配置参数。 过度分配的驱动程序必须按以下方式设置此结构的成员:

  • SwitchId 成员必须设置为之前在网络适配器上创建的 NIC 交换机的标识符。 NIC 交换机是通过 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法请求创建的。

    处理 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求时,PCIe 物理函数 (PF 的微型端口驱动程序) 为 VF 分配资源。 如果资源分配成功,PF 微型端口驱动程序会将 VF 分配给指定的 NIC 交换机。

    注意从 Windows Server 2012 中的 NDIS 6.30 开始,SR-IOV 接口仅支持网络适配器上的默认 NIC 交换机。 SwitchId 成员的值必须设置为 NDIS_DEFAULT_SWITCH_ID。

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

  • VFId 成员必须设置为 NDIS_INVALID_VF_FUNCTION_ID。

  • RequestorId 成员必须设置为 NDIS_INVALID_RID。

  • VMFriendlyNameVMName 成员必须设置为 Hyper-V 子分区的参数。 PF 微型端口驱动程序使用这些成员仅用于提供信息。

    注意 Hyper-V 子分区也称为 虚拟机 (VM)

    在过度分配的驱动程序发出 OID_NIC_SWITCH_CREATE_SWITCH 请求之前,VF 与指定的 VM 相关联。

  • 必须将 NicName 成员设置为虚拟机的标识符 (VM) 网络适配器。 此虚拟适配器在 VM 中运行的来宾操作系统中公开。 PF 微型端口驱动程序仅将此成员用于提供信息。

    为 VF 分配资源并将其附加到子分区时,来宾操作系统中会公开 VF 网络适配器。 VM 网络适配器与 VF 网络适配器协作,通过基于硬件的 VF 数据路径进行数据包传输。

    但是,VF 可以从子分区分离,例如在实时迁移期间。 发生这种情况时,数据包传输通过基于软件的合成数据路径进行。 有关这些数据路径的详细信息,请参阅 SR-IOV 数据路径

  • 必须将 PermanentMacAddressCurrentMacAddress 成员设置为 VF 虚拟网络适配器的媒体访问控制 (MAC) 地址。 这些地址公开给 Hyper-V 子分区的来宾操作系统中运行的网络堆栈。

通过执行以下步骤,过度的驱动程序发出 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求:

  1. 覆盖驱动程序初始化 OID 方法请求 的NDIS_OID_REQUEST 结构。 驱动程序将 InformationBuffer 成员设置为指向已初始化 NDIS_NIC_SWITCH_VF_PARAMETERS 结构的指针。

  2. 过度分配的驱动程序调用 NdisOidRequest 以向基础 PF 微型端口驱动程序发出 OID 请求。

    注意 当超载驱动程序调用 NdisOidRequest 时,NDIS 会截获 OID 请求并验证 NDIS_NIC_SWITCH_VF_PARAMETERS 结构中指定的 VF 参数。 如果成功验证参数,NDIS 会将 OID 转发到 PF 微型端口驱动程序。 否则,NDIS 会因NDIS_STATUS_INVALID_PARAMETER而失败 OID 请求。

在过度分配的驱动程序请求 VF 的资源分配后,该驱动程序是唯一可以请求释放同一 VF 的资源的组件。 过度分配的驱动程序必须发出 OID_NIC_SWITCH_FREE_VF 的 OID 集请求,以释放 VF 资源。 在停止过度分配的驱动程序之前,它必须释放由驱动程序 OID_NIC_SWITCH_ALLOCATE_VF 请求分配的每个 VF 的资源。