Hyper-V 可扩展交换机接口管理以下组件的生存期:
Hyper-V 可扩展交换机端口
与可扩展交换机的每个网络适配器连接都由端口表示。 当 Hyper-V 子分区配置为连接到可扩展交换机的实例时,将创建端口。 根据交换机类型,还会为外部和内部网络适配器连接创建端口。 有关交换机类型的详细信息,请参阅 Hyper-V 可扩展交换机 的概述。
每个端口用于保存网络接口连接的配置。 如果删除网络接口连接的配置或停止了子分区,则端口将被拆解并删除。
有关此组件的详细信息,请参阅 Hyper-V 可扩展交换机端口。
Hyper-V 可扩展交换机网络适配器
这些是连接到可扩展交换机端口的虚拟网络适配器。 这些虚拟网络适配器在 Hyper-V 子分区和父分区中公开。 这包括在子分区中公开的虚拟机(VM)网络适配器,以及与基础物理网络适配器组合的外部网络适配器。
每个网络适配器连接都需要相应的可扩展交换机端口。 必须在启用网络适配器连接之前创建端口。 同样,必须先删除网络适配器连接,然后才能拆毁和删除该端口。
注意 在某些情况下,可以创建和删除可扩展交换机端口,而无需连接网络适配器。
例如,当启动 Hyper-V 子分区时,可扩展交换机接口会在 VM 网络适配器在来宾作系统中公开之前创建端口。 在公开和枚举 VM 网络适配器后,可扩展交换机接口会在 VM 网络适配器和可扩展交换机端口之间创建网络连接。 如果子分区停止,可扩展交换机接口首先删除网络连接,然后删除可扩展交换机端口。
有关此组件的详细信息,请参阅 Hyper-V 可扩展交换机网络适配器。
当可扩展交换机接口创建、删除或更改这些组件的配置时,它会向可扩展交换机驱动程序堆栈发出用于设置的对象标识符(OID)请求。 执行此操作是为了让底层的可扩展交换机扩展可以被通知到相关组件的状态及其配置。 每个 OID 集请求都会导致这些组件的状态转换。
在可扩展交换机实例上绑定和启用扩展时,它可以发出 OID 来发现交换机的现有端口和网络适配器连接配置。
下图显示了可扩展交换机端口和网络适配器连接组件的各种状态。 该图还显示了导致组件状态转换的 OID 集请求。
以下列表描述了可扩展交换机端口和网络适配器连接组件的各种状态:
端口未创建
在此状态下,可扩展交换机端口不存在于可扩展交换机上。 在端口进入此状态后,无法发出面向以前创建的端口的 OID 请求。
创建的端口
当可扩展交换机接口发出 OID_SWITCH_PORT_CREATE的 OID 集请求时,该端口在可扩展交换机上创建。 在此状态下,可扩展交换机接口和扩展可以发出面向端口的 OID 请求。
有关通过可扩展交换机驱动程序堆栈的 OID 流量的详细信息,请参阅 Hyper-V 可扩展交换机控制路径。
注意 底层扩展可能无法满足 OID 集请求,并否决端口创建。 该扩展通过使用 STATUS_DATA_NOT_ACCEPTED 完成 OID 请求来实现这一功能。 如果执行此作,则不会在可扩展交换机上创建端口。 有关此过程的详细信息,请参阅 Hyper-V 可扩展交换机端口。
网络适配器连接创建
当可扩展交换机接口发送 OID_SWITCH_NIC_CREATE的 OID 设置请求时,将在可扩展交换机上为端口创建网络适配器连接。 在此状态下,可扩展交换机接口可以执行以下作:
发出面向网络适配器连接的 OID 请求。
从网络适配器连接端转发数据包流量或将其转发到网络适配器连接端。
新适配器也可以连接到现有端口,而无需通过端口拆解和创建序列。
在此状态下,扩展必须通过可扩展的交换机扩展堆栈转发这些数据包和 OID 请求。 但是,扩展无法从可扩展交换机上发起或重定向数据包或 OID 请求到其他网络适配器连接。
注意 在此状态下,扩展不得向网络适配器连接发出 OID 请求或发起数据包流量。
有关通过可扩展交换机驱动程序堆栈的 OID 流量的详细信息,请参阅 Hyper-V 可扩展交换机控制路径。
有关通过可扩展交换机驱动程序堆栈的数据包流量的详细信息,请参阅 Hyper-V 可扩展交换机数据路径。
注意 底层扩展可能会导致 OID 设置请求失败,并否决创建网络适配器连接。 如果是这样,则不会在可扩展交换机端口上创建连接。 有关此过程的详细信息,请参阅 Hyper-V 可扩展交换机网络适配器。
网络适配器已连接
当可扩展交换机接口发出 OID_SWITCH_NIC_CONNECT的 OID 集请求时,网络适配器将完全连接到可扩展交换机端口。 在此状态下,扩展现在可以执行以下作:
发出面向网络适配器连接的 OID 请求。
将数据包流量发送到网络适配器连接端。
将数据包流量重定向到网络适配器连接。 例如,扩展可以将数据包从一个网络适配器连接重定向到可扩展交换机上的另一个连接。
注意 只有转发扩展程序才能执行此操作。 有关详细信息,请参阅 转发扩展。
网络适配器断开连接
当可扩展交换机接口发出 OID_SWITCH_NIC_DISCONNECT的 OID 集请求时,网络适配器将与可扩展交换机端口断开连接。 例如,当公开 VM 网络适配器的子分区已停止或外部网络适配器已禁用时,将发出此 OID 请求。
在此状态下,可扩展交换机扩展不能再发起面向连接的数据包或 OID 请求。 此外,转发扩展不能再将数据包重定向到连接。
请注意,在连接断开之前,由可扩展交换机接口发出的待处理数据包和 OID 请求可能仍会传送到扩展程序。 但是,扩展必须转发数据包和 OID 请求,而无需进行任何修改。
网络适配器连接已删除
完成面向网络适配器连接的所有数据包流量和 OID 请求后,可扩展交换机接口发出 OID_SWITCH_NIC_DELETE 的 OID 设置请求,以从可扩展交换机中删除连接。
在此状态下,可扩展交换机接口将不再发出面向连接的数据包或 OID 请求。
端口拆除
当可扩展交换机接口发出 OID_SWITCH_PORT_TEARDOWN的 OID 集请求时,可扩展交换机端口正在被拆毁,以准备删除。
在此状态下,可扩展交换机扩展无法再发起面向端口的 OID 请求。
请注意,在端口开始拆除过程之前,由可扩展交换机接口发出的待处理 OID 请求可能仍会传送到扩展程序。 但是,该扩展必须转发 OID 请求,而无需进行任何修改。
完成面向端口的所有待处理 OID 请求后,可扩展交换机接口会发出 OID 设置请求 OID_SWITCH_PORT_DELETE。 这会导致端口转换为端口未创建状态。
该扩展可以调用可扩展交换机处理程序函数,以递增或递减端口或网络适配器连接组件上的引用计数器。 虽然组件的引用计数器为非零,但可扩展交换机接口无法删除该组件。
该扩展可以调用 referenceSwitchPort 或 DereferenceSwitchPort 来递增或递减可扩展交换机端口的引用计数器。 可以在端口进入端口已创建状态后进行这些调用。 端口进入端口拆除或端口未创建状态之后,不得进行这些调用。
该扩展可以调用 referenceSwitchNic 或 DereferenceSwitchNic 来递增或递减可扩展交换机网络适配器连接的引用计数器。 可以在连接进入网络适配器已连接状态后进行这些调用。 不得在连接进入网络适配器断开连接或网络适配器已删除状态之后进行这些调用。
下表介绍了根据可扩展交换机端口或网络适配器连接组件的状态允许进行的操作。
组件状态 | 是否允许调用 ReferenceSwitchPort 或 DereferenceSwitchPort? | 是否允许调用 ReferenceSwitchNic 或 DereferenceSwitchNic? |
---|---|---|
未创建的端口 |
不 |
不 |
已创建的端口 |
是的 |
不 |
创建的网络适配器连接 |
是的 |
不 |
网络适配器已连接 |
是的 |
是的 |
网络适配器断开连接 |
是的 |
不 |
已删除网络适配器连接 |
是的 |
不 |
端口拆除 |
不 |
不 |
组件状态 | 可扩展交换机是否允许对端口提出 OID 请求? | 扩展程序是否允许对端口提出 OID 请求? | 可扩展交换机是否允许对网络适配器连接提出 OID 请求? | 扩展程序是否允许对网络适配器连接提出 OID 请求? | 可扩展交换机是否允许通过网络适配器连接传输数据包流量? | 扩展程序是否允许通过网络适配器连接传输数据包流量? |
---|---|---|---|---|---|---|
未创建的端口 |
不 |
不 |
不 |
不 |
不 |
不 |
已创建的端口 |
是的 |
是的 |
不 |
不 |
不 |
不 |
创建的网络适配器连接 |
是的 |
是的 |
是的 |
不 |
是的 |
不 |
网络适配器已连接 |
是的 |
是的 |
是的 |
是的 |
是的 |
是的 |
网络适配器断开连接 |
是的 |
是的 |
是的 |
不 |
是的 |
不 |
已删除网络适配器连接 |
是的 |
是的 |
不 |
不 |
不 |
不 |
端口拆除 |
是的 |
不 |
不 |
不 |
不 |
不 |