Hyper-V 可扩展交换机网络适配器概述

Hyper-V 可扩展交换机支持来自各种类型的虚拟或物理网络适配器的连接。 通过可扩展的交换机端口连接到这些类型的网络适配器。 端口是在建立虚拟网络适配器连接之前创建的,在断开网络适配器连接后将其删除。

例如,启动 Hyper-V 子分区时,可扩展交换机接口会在虚拟机 (VM) 网络适配器在来宾操作系统中公开之前创建一个端口。 公开并枚举 VM 网络适配器后,可扩展交换机接口会在 VM 网络适配器和可扩展交换机端口之间创建网络连接。 如果停止子分区,可扩展交换机接口首先删除网络连接,然后删除可扩展交换机端口。

Hyper-V 可扩展交换机支持来自以下类型的虚拟网络适配器的连接:

外部网络适配器
这是一个可扩展的交换机网络适配器,在 Hyper-V 父分区中运行的管理操作系统中公开。 每个可扩展交换机仅支持一个外部网络适配器连接。

外部网络适配器提供与主机上可用的物理网络接口的连接。 外部网络适配器可由 Hyper-V 父分区和所有子分区访问。

有关此类型的网络适配器的详细信息,请参阅 外部网络适配器

内部网络适配器
这是一个可扩展的交换机网络适配器,在 Hyper-V 父分区中运行的管理操作系统中公开。 每个可扩展交换机仅支持一个内部网络适配器连接。

内部网络适配器为在管理操作系统中运行的进程提供对可扩展交换机的访问。 这允许这些进程通过可扩展交换机发送或接收数据包。

有关此类型的网络适配器的详细信息,请参阅 内部网络适配器

虚拟机 (VM) 网络适配器
这是一个可扩展的交换机网络适配器,在 Hyper-V 子分区中运行的来宾操作系统中公开。

注意 在 Hyper-V 中,子分区也称为 VM。

VM 网络适配器支持以下虚拟化类型:

  • VM 网络适配器可以是网络适配器的合成虚拟化, (综合网络适配器) 。 在这种情况下,在 VM 中运行的网络虚拟网络服务客户端 (NetVSC) 公开此虚拟网络适配器。 NetVSC 通过 VM 总线 (VMBus) 向/从可扩展交换机端口转发数据包。

  • VM 网络适配器可以是物理网络适配器的模拟虚拟化, (模拟网络适配器) 。 在这种情况下,VM 网络适配器模拟 Intel 网络适配器,并使用硬件仿真将数据包转发到可扩展交换机端口和从可扩展交换机端口转发数据包。

有关此类型的网络适配器的详细信息,请参阅 虚拟机网络适配器

可扩展交换机网络适配器连接通过以下可扩展交换机 OID 请求创建、更新和删除:

OID_SWITCH_NIC_CREATE
可扩展交换机的协议边缘发出 OID_SWITCH_NIC_CREATE 的 OID 集请求,以通知可扩展交换机扩展创建到可扩展交换机端口的网络适配器连接。 该端口必须以前是通过 OID_SWITCH_PORT_CREATE 的 OID 集请求创建的。

OID_SWITCH_NIC_CREATE请求仅通知扩展正在启动新的可扩展交换机网络适配器连接,并且数据包流量可能很快开始通过指定的端口发生。

扩展可以通过返回 OID 请求的STATUS_DATA_NOT_ACCEPTED来否决创建通知。 例如,如果扩展无法满足用于网络适配器连接的端口上的配置策略,则扩展应否决创建通知。

如果扩展接受创建通知,则必须将 OID 请求转发到可扩展交换机驱动程序堆栈。 扩展监视此 OID 请求的完成状态,以确定基础扩展是否已否决创建通知。

创建网络适配器连接时,会为其分配NDIS_SWITCH_NIC_INDEX值。 此索引值标识可扩展交换机端口上的网络适配器连接。 为外部、内部和 VM 网络适配器的连接分配NDIS_SWITCH_NIC_INDEX值 NDIS_SWITCH_DEFAULT_NIC_INDEX。 绑定到外部网络适配器的每个物理或虚拟网络适配器都按以下方式分配NDIS_SWITCH_NIC_INDEX值:

  • 如果物理或虚拟网络适配器直接绑定到外部网络适配器,则会为其分配NDIS_SWITCH_NIC_INDEX值 1。

  • 如果物理网络适配器是可扩展交换机团队的一部分,则会为其分配一个大于或等于 1 的NDIS_SWITCH_NIC_INDEX值。 可扩展交换机团队是一种配置,其中一个或多个物理网络适配器的团队绑定到可扩展交换机外部网络适配器。

有关物理网络适配器可以绑定到外部网络适配器的不同配置的详细信息,请参阅 物理网络适配器配置类型

有关NDIS_SWITCH_NIC_INDEX值的详细信息,请参阅 网络适配器索引值

注意 扩展无法通过网络适配器连接生成或转发数据包,直到可扩展交换机的协议边缘发出 OID_SWITCH_NIC_CONNECT的 OID 集请求。

OID_SWITCH_NIC_CONNECT
可扩展交换机的协议边缘发出 OID_SWITCH_NIC_CONNECT 的 OID 集请求,以通知可扩展交换机扩展可扩展交换机网络适配器连接已完全正常运行。

扩展必须始终将此 OID 集请求转发到可扩展交换机驱动程序堆栈。 扩展不得使请求失败。

完成 OID 请求并NDIS_STATUS_SUCCESS后,网络适配器连接和可扩展交换机端口将完全正常运行。 当网络适配器连接处于此状态时,扩展可以执行以下操作:

  • 生成数据包流量或将数据包流量转发到端口的网络适配器连接。

  • 发出使用端口作为源端口的可扩展交换机 OID 或状态指示。

  • 调用 ReferenceSwitchNic 以递增网络适配器连接的引用计数器。 当引用计数器具有非零值时,可扩展交换机接口不会断开网络适配器连接。

OID_SWITCH_NIC_UPDATED
可扩展交换机的协议边缘发出OID_SWITCH_NIC_UPDATED的 OID 集请求,以通知可扩展交换机扩展可扩展交换机网络适配器的参数已更新。 OID 将仅针对已连接且尚未开始断开连接过程的 NIC 发出。 这些运行时配置更改可能包括 NicFriendlyNameMTUNetCfgInstanceIdPermanentMacAddressVMMacAddressCurrentMacAddressVFAssigned。

扩展必须始终将此 OID 集请求转发到可扩展交换机驱动程序堆栈。 扩展不得使请求失败。

OID_SWITCH_NIC_DISCONNECT
可扩展交换机的协议边缘发出 OID_SWITCH_NIC_DISCONNECT 的 OID 集请求,以通知可扩展交换机扩展可扩展交换机网络适配器连接正在断开。 连接完全中断后,可扩展交换机的协议边缘会发出 OID_SWITCH_NIC_DELETE的 OID 集请求。

扩展必须始终将此 OID 集请求转发到可扩展交换机驱动程序堆栈。 扩展不得使请求失败。

扩展转发此 OID 请求后,无法再生成数据包或将数据包转发到要断开网络适配器连接的端口。 此外,该扩展无法再为网络适配器连接调用 ReferenceSwitchNic

OID_SWITCH_NIC_DELETE
可扩展交换机的协议边缘发出 OID_SWITCH_NIC_DELETE 的 OID 集请求,以通知可扩展交换机扩展可扩展交换机网络适配器连接已断开和删除。 此 OID 请求仅针对以前为其发出了 OID 集 请求OID_SWITCH_NIC_DISCONNECT 的网络连接发出。

注意 扩展必须始终将此 OID 集请求转发到可扩展交换机驱动程序堆栈。 扩展不得使请求失败。

完成此 OID 请求后,可扩展交换机的协议边缘会发出 OID_SWITCH_PORT_TEARDOWN 的 OID 集请求,以启动用于网络适配器连接的端口的删除过程。

扩展必须始终将此 OID 集请求转发到可扩展交换机驱动程序堆栈。 扩展不得使请求失败。

可扩展交换机接口为已创建的每个网络适配器连接维护一个引用计数器。 如果网络适配器的引用计数器具有非零值,则不会删除该连接。 接口提供以下处理程序函数,用于递增或递减可扩展交换机网络适配器连接的引用计数器:

ReferenceSwitchNic
可扩展交换机扩展调用此函数来递增网络适配器连接的引用计数器。 尽管引用计数器具有非零值,但可扩展交换机接口不会删除网络适配器连接。

扩展应在执行以下操作之前调用 ReferenceSwitchNic

注意扩展在收到针对该连接的 OID 集OID_SWITCH_NIC_DISCONNECT请求后,不得为网络适配器连接调用 ReferenceSwitchNic

DereferenceSwitchNic
可扩展交换机扩展调用此函数来递减端口的引用计数器。

如果扩展调用 ReferenceSwitchNic,则必须在完成OID_SWITCH_NIC_REQUESTNDIS_STATUS_SWITCH_NIC_STATUS指示后调用 DereferenceSwitchNic