处理 OID_NIC_SWITCH_CREATE_SWITCH 请求
NDIS 发出 OID_NIC_SWITCH_CREATE_SWITCH 的对象标识符 (OID) 方法请求,以执行以下操作:
在网络适配器上启用 NIC 交换机,该网络适配器是由 PCI Express (PCIe) 物理功能 (PF) 的微型端口驱动程序静态创建的。 PF 是网络适配器的一个硬件组件,支持单根 I/O 虚拟化 (SR-IOV)。
PF 微型端口驱动程序会在调用 MiniportInitializeEx 的上下文中静态创建 NIC 交换机。 驱动程序根据从注册表设置中读取的参数分配资源并创建交换机。
在网络适配器上动态创建 NIC 交换机。
如果 PF 微型端口驱动程序不支持静态 NIC 交换机创建,则微型端口驱动程序将根据 OID 请求中指定的参数分配资源并创建交换机。
当 NDIS 调用 PF 微型端口驱动程序的 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 交换机的标识符值。 交换机标识符是一个介于 0 和网络适配器支持的交换机数量之间的整数。 NDIS_DEFAULT_SWITCH_ID 值表示默认 NIC 交换机。
注意从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的默认 NIC 交换机。
NDIS 设置 NumVFs 成员,指定 NIC 交换机上可分配的 PCIe 虚拟功能 (VF) 的数量。
当收到 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法请求时,PF 微型端口驱动程序必须执行以下操作:
如果 PF 微信端口驱动程序支持静态交换机创建和配置,则会在 NDIS 调用 MiniportInitializeEx 时创建 NIC 交换机。 当驱动程序处理该 OID 请求时,必须验证 NDIS_NIC_SWITCH_PARAMETERS 结构中的配置参数。 这些参数必须与驱动程序在调用 MiniportInitializeEx 时创建交换机时使用的参数相同。 如果这不是 true,则驱动程序必须拒绝 OID 请求。
有关详细信息,请参阅 NIC 交换机的静态创建。
如果 PF 微型端口驱动程序支持动态交换机创建和配置,则驱动程序必须验证 NDIS_NIC_SWITCH_PARAMETERS 结构的配置值,并根据这些值创建 NIC 交换机。
有关详细信息,请参阅 NIC 交换机的动态创建。
PF 微型端口驱动程序必须为 NIC 交换机上的默认 VPort 分配必要的硬件和软件资源。
注意 默认 VPort 始终通过 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 请求创建,并通过 OID_NIC_SWITCH_DELETE_SWITCH 的 OID 请求删除。 OID_NIC_SWITCH_CREATE_VPORT 和 OID_NIC_SWITCH_DELETE_VPORT 的 OID 请求用于在 NIC 交换机上创建和删除非默认 VPort。
支持动态交换机创建和配置的 PF 微型端口驱动程序必须通过调用 NdisMEnableVirtualization 在交换机上启用 SR-IOV 虚拟化。 此调用将配置适配器 PCI Express (PCIe) 配置空间 SR-IOV 扩展能力结构中的 NumVFs 成员和 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。
微型端口驱动程序负责管理其非默认 VPorts 池。 驱动程序通过 NDIS_NIC_SWITCH_INFO 结构的 NumVPorts 成员指定其池中的非默认 VPort 数量。 驱动程序通过 OID_NIC_SWITCH_ENUM_SWITCHES 的 OID 查询请求返回此结构。
注意 网络适配器必须始终从其池中为 PF 创建一个默认 VPort。