发出 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。
VMFriendlyName 和 VMName 成员必须设置为 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 数据路径。
必须将 PermanentMacAddress 和 CurrentMacAddress 成员设置为 VF 虚拟网络适配器的媒体访问控制 (MAC) 地址。 这些地址公开给 Hyper-V 子分区的来宾操作系统中运行的网络堆栈。
通过执行以下步骤,过度的驱动程序发出 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求:
覆盖驱动程序初始化 OID 方法请求 的NDIS_OID_REQUEST 结构。 驱动程序将 InformationBuffer 成员设置为指向已初始化 NDIS_NIC_SWITCH_VF_PARAMETERS 结构的指针。
过度分配的驱动程序调用 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 的资源。