设置虚拟端口的参数
覆盖驱动程序可以更改虚拟端口的参数, (支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器上的 NIC 交换机上的 VPort) 。 驱动程序 (OID 发出对象标识符,) 设置OID_NIC_SWITCH_VPORT_PARAMETERS 请求来更改这些参数。
在过分驱动程序发出此 OID 集请求之前,它必须使用要在 VPort 上更改的参数初始化 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构。 然后,驱动程序为 OID 请求初始化 NDIS_OID_REQUEST 结构,并将 InformationBuffer 成员设置为指向 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构的指针。
只能更改 VPort 的有限配置参数子集。 overlying 驱动程序通过设置 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构的以下成员来指定要更改的参数:
SwitchId 成员必须设置为要为其返回参数的 NIC 开关的标识符。
注意从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的一个 NIC 交换机。 此开关称为 默认 NIC 开关。 SwitchId 成员必须设置为 NDIS_DEFAULT_SWITCH_ID。
必须将 VPortId 成员设置为与 VPort 关联的标识符。 覆盖驱动程序通过以下方法之一获取 VPort 标识符:
从以前的 OID 方法请求 OID_NIC_SWITCH_CREATE_VPORT。
从以前的 OID 方法请求 OID_NIC_SWITCH_ENUM_VPORTS。
必须在 Flags 成员中设置相应的 NDIS_NIC_SWITCH_VPORT_PARAMS_Xxx_CHANGED 标志。 只有在 Ntddndis.h 中定义了相应的 NDIS_NIC_SWITCH_VPORT_PARAMS_Xxx_CHANGED 标志时,才能更改 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构的成员。
NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构的成员(对应于 Flags 成员中设置的 NDIS_NIC_SWITCH_VPORT_PARAMS_Xxx_CHANGED 标志)使用要更改的 VPort 配置参数进行设置。
从 Windows Server 2012 开始,只有NDIS_NIC_SWITCH_VPORT_PARAMETERS结构的以下成员可以通过OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 集请求进行更改:
InterruptModeration
此成员指定 VPort 的中断审查设置。
ProcessorAffinity
此成员指定此 VPort 可以与之关联的 CPU 的组号和位图。
Overlying 驱动程序必须遵循以下准则来更改 VPort 的 ProcessorAffinity 成员:
此成员仅对附加到 PF 的 VPort 有效。 此字段对于附加到 VF 的非默认 VPort 无效。
对于附加到 PF 的非默认 VPort,创建 VPort 时必须至少指定一个处理器。 创建 VPort 后,可以更改与非默认 VPort 关联的处理器相关性。
注意 非默认 VPort 是通过 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求创建的。
覆盖驱动程序必须遵循以下准则来更改 VPort 的 VPortState 成员:
对于附加到 VF 的非默认 VPort, VPortState 成员必须始终设置为 NdisNicSwitchVPortStateActivated。
对于附加到 PF 的非默认 VPort,必须在创建 VPort 时将 VPortState 成员设置为 NdisNicSwitchVPortStateDeactivated 。 仅当 overlying 驱动程序发出 OID_NIC_SWITCH_VPORT_PARAMETERS 的 OID 集请求以将 VPortState 更改为激活状态后,才会激活 PF VPort。
激活非默认 VPort 时,PF 微型端口驱动程序可以为 VPort 分配资源,例如通过 NdisAllocateSharedMemory 分配的共享内存。 PF 微型端口驱动程序可以在激活后随时为 VPort 分配资源,直到驱动程序通过 OID_NIC_SWITCH_DELETE_VPORT的 OID 集请求删除 VPort。
默认 VPort 始终处于激活状态。 对于默认 VPort,VPortState 成员的值必须始终设置为 NdisNicSwitchVPortStateActivated 。
当 VPort 处于激活状态时,无法将其停用。 仅当 PF 微型端口驱动程序处于激活状态并在 VPort 上设置了相应的 MAC 筛选器时,才能从 VPort 接收和传输数据包。 但是,通过OID_NIC_SWITCH_DELETE_VPORT的 OID 集请求删除 VPort 后,驱动程序必须释放为 VPort 分配的资源。 驱动程序还必须取消 VPort 上数据包的所有挂起的传输或接收操作。
在 PF 微型端口驱动程序收到 OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 集请求后,驱动程序会使用配置参数配置硬件。 驱动程序只能更改由 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构的Flags 成员中的 NDIS_NIC_SWITCH_VPORT_PARAMETERS_Xxx_CHANGED 标志标识的配置参数。