NDIS_STATUS_SWITCH_PORT_REMOVE_VF

NDIS_STATUS_SWITCH_PORT_REMOVE_VF状态指示由 Hyper-V 可扩展交换机转发扩展发出,用于删除虚拟机 (VM) 网络适配器与 PCI Express (PCIe) 虚拟功能 (VF) 之间的绑定。 VF 由支持单根 I/O 虚拟化 (SR-IOV) 接口的基础物理网络适配器公开和支持。

为了发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示,转发扩展必须将指示封装在 NDIS_SWITCH_NIC_STATUS_INDICATION 结构中,并发出 NDIS_STATUS_SWITCH_NIC_STATUS 状态指示。

有关此过程的详细信息,请参阅 颁发 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示指南

注解

PCIe VF 由支持 SR-IOV 接口的基础物理适配器创建和分配。 创建后,虚拟化堆栈会将 VF 附加或 分配给 Hyper-V 子分区。 在此分区中运行的来宾操作系统公开绑定到基础 SR-IOV 物理适配器的 VF 的虚拟机 (VM) 网络适配器。

分配虚拟和物理网络适配器后,数据包直接在 VF 和 VM 网络适配器之间路由。 但是,由于可扩展交换机不涉及数据包传递,因此可扩展交换机端口策略不会应用于这些数据包。 这包括访问控制列表的端口策略 (ACL) 和服务质量 (QoS) 。

可扩展的交换机转发扩展可以通过发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示来删除 VF 对子分区的分配。 此指示会导致数据包通过可扩展的交换机端口传递,而不是直接在 VM 网络适配器和基础 SR-IOV 物理适配器的 VF 之间传递。 这允许将可扩展交换机端口策略应用于通过可扩展交换机端口接收或发送的数据包。

当转发扩展发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示时,它会指定 VM 网络适配器连接到的可扩展交换机端口。

有关可扩展交换机转发扩展的详细信息,请参阅 转发扩展

发出NDIS_STATUS_SWITCH_PORT_REMOVE_VF状态指示的指南

若要发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示,转发扩展必须遵循以下步骤:

  1. 转发扩展初始化 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 指示的 NDIS_STATUS_INDICATION 结构。 对于此指示,转发扩展设置 NDIS_STATUS_INDICATION 结构的以下成员:

    • StatusCode 成员必须设置为 NDIS_STATUS_SWITCH_PORT_REMOVE_VF

    • StatusBuffer 成员必须设置为 NULL

    • StatusBufferSize 必须设置为零。

  2. 转发扩展初始化 NDIS_SWITCH_NIC_STATUS_INDICATION 结构。 若要删除 VF 分配,转发扩展必须按以下方式设置成员:

    • 必须将 DestinationPortId 成员设置为 VM 网络适配器连接到的可扩展交换机端口的标识符。

    • DestinationNicIndex 成员必须设置为连接到指定端口的 VM 网络适配器的索引值。

    • SourcePortId 成员必须设置为 NDIS_SWITCH_DEFAULT_PORT_ID

    • SourceNicIndex 成员必须设置为 NDIS_SWITCH_DEFAULT_NIC_INDEX

    • 必须将 StatusIndication 成员设置为NDIS_STATUS_SWITCH_PORT_REMOVE_VF指示NDIS_STATUS_INDICATION结构的地址。

  3. 转发扩展为 NDIS_SWITCH_NIC_STATUS_INDICATION 指示初始化 NDIS_STATUS_INDICATION 结构。 对于此指示,转发扩展设置 NDIS_STATUS_INDICATION 结构的以下成员:

  4. 转发扩展必须调用 ReferenceSwitchNic 来递增 VM 网络适配器的引用计数器。 如果 ReferenceSwitchNic 未完成NDIS_STATUS_SUCCESS,则转发扩展不得转发状态指示。

    注意 如果转发扩展已收到 VM 适配器的OID_SWITCH_NIC_DISCONNECT 设置请求,则它不得调用 ReferenceSwitchNic 或转发状态指示。

  5. 转发扩展调用 NdisFIndicateStatusNDIS_STATUS_INDICATION 转发到可扩展交换机驱动程序堆栈中的过度扩展。 当转发扩展调用此函数时,它会将 StatusIndication 参数设置为指向NDIS_STATUS_SWITCH_NIC_STATUS指示NDIS_STATUS_INDICATION结构的指针。

  6. 在 NdisFIndicateStatus 返回后,转发扩展必须调用 DereferenceSwitchNic 来递减 VM 网络适配器的引用计数器。

注意 对于转发扩展要删除的每个 VF 分配,转发扩展必须遵循前面的步骤。

有关转发扩展如何转发状态指示的详细信息,请参阅 筛选模块状态指示

确定 VF 分配的准则

转发扩展可以通过发出 OID_SWITCH_NIC_ARRAY 的 OID 查询请求来枚举虚拟网络适配器的当前 VF 分配。 此请求返回一个 包含NDIS_SWITCH_NIC_PARAMETERS 结构数组的 NDIS_SWITCH_NIC_ARRAY 结构。 每个 NDIS_SWITCH_NIC_PARAMETERS 结构都指定在以下环境之一中公开的网络适配器的参数:

  • 在 Hyper-V 父分区中运行的管理操作系统。

    在此操作系统中公开的网络适配器指定为 NdisSwitchNicTypeExternalNdisSwitchNicTypeInternal的NDIS_SWITCH_NIC_TYPE枚举值。

  • 在 Hyper-V 子分区中运行的来宾操作系统。

    在此操作系统中公开的网络适配器是使用 NdisSwitchNicTypeSyntheticNdisSwitchNicTypeEmulated的NDIS_SWITCH_NIC_TYPE枚举值指定的。

如果 OID_SWITCH_NIC_ARRAY 的 OID 查询请求完成,状态为 NDIS_STATUS_SUCCESS,则转发扩展可以通过检查返回数组中的每个 NDIS_SWITCH_NIC_PARAMETERS 结构来确定 VF 分配。 如果NDIS_SWITCH_NIC_PARAMETERS结构的 VFAssigned 成员设置为 TRUE,则会将对应于 NDIS_SWITCH_NIC_PARAMETERS 结构的网络适配器分配给 VF。

转发扩展可以通过发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示来删除分配。 在这种情况下,转发扩展必须将NDIS_SWITCH_NIC_STATUS_INDICATIONDestinationPortId 成员设置为 NDIS_SWITCH_NIC_PARAMETERS 结构的 PortId 成员的值。

有关如何发出 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示的详细信息,请参阅 颁发 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 状态指示的指南

要求

版本

在 NDIS 6.30 及更高版本中受支持。

标头

Ndis.h (包括 Ndis.h)

另请参阅


NdisFIndicateStatus

NDIS_STATUS_INDICATION

NDIS_STATUS_SWITCH_NIC_STATUS

NDIS_SWITCH_NIC_ARRAY

NDIS_SWITCH_NIC_PARAMETERS

NDIS_SWITCH_NIC_TYPE

OID_SWITCH_NIC_ARRAY