管理发往物理网络适配器的硬件卸载 OID 请求

本主题讨论 Hyper-V 可扩展交换机转发扩展如何通过可扩展交换机控制路径管理对象标识符 (OID) 对基础物理适配器上的硬件卸载技术的请求。

例如,外部网络适配器可以绑定到 NDIS 多路复用器 (MUX 的虚拟微型端口边缘) 中间驱动程序。 MUX 驱动程序绑定到主机上的一个或多个物理网络团队。 此配置称为 可扩展交换机团队

在此配置中,可扩展交换机扩展将公开给团队中的每个网络适配器。 这样,扩展就可以管理团队中单个网络适配器的配置和使用。 例如,转发扩展可以通过将传出数据包转发到单个适配器, (LBFO) 解决方案来支持团队上的负载均衡故障转移。 管理可扩展交换机团队的转发扩展称为 组合提供程序。 有关组合提供程序的详细信息,请参阅 Teaming Provider Extensions

下图显示了适用于 NDIS 6.40 (Windows Server 2012 R2) 及更高版本的可扩展交换机团队的示例。

显示适用于 NDIS 6.40 的可扩展交换机团队的关系图。

下图显示了适用于 NDIS 6.30 (Windows Server 2012) 的可扩展交换机团队的示例。

说明适用于 NDIS 6.30 的可扩展交换机团队的关系图。

注意 在可扩展交换机接口中,NDIS 筛选器驱动程序称为 可扩展交换机扩展 ,驱动程序堆栈称为 可扩展交换机驱动程序堆栈

通过处理 OID_SWITCH_NIC_REQUEST 的 OID 请求,转发扩展可以参与针对硬件卸载的可扩展交换机团队的配置。 例如,如果扩展管理可扩展交换机团队的物理网络适配器,则可以将OID_SWITCH_NIC_REQUEST请求转发到支持硬件卸载的物理适配器。

NDIS 和超载协议和筛选器驱动程序可能会向底层物理网络适配器发出硬件卸载技术的 OID 请求。 当这些 OID 请求到达可扩展交换机接口时,它会将 OID 请求封装在 NDIS_SWITCH_NIC_OID_REQUEST中。 然后,可扩展交换机的协议边缘发出包含此结构的 OID_SWITCH_NIC_REQUEST 的 OID 请求。

可扩展交换机接口封装以下硬件卸载技术的 OID:

Internet 协议安全 (IPsec) 卸载 (版本 2)
封装了以下 IPsec OID 请求:

转发扩展不得失败或 否决这些 OID 请求。

有关 IPsec 硬件卸载技术版本 2 的详细信息,请参阅 IPsec 卸载版本 2

单根 I/O 虚拟化 (SR-IOV)
封装了以下 SR-IOV OID 请求:

转发扩展可以通过使用NDIS_STATUS_SUCCESS以外的状态代码完成请求来否决OID_NIC_SWITCH_ALLOCATE_VF和OID_NIC_SWITCH_CREATE_VPORT的 OID 请求。 但是,该扩展不得否决其他 SR-IOV OID 请求。

有关 SR-IOV 硬件卸载技术的详细信息,请参阅 单根 I/O 虚拟化 (SR-IOV)

虚拟机队列 (VMQ)
封装了以下 VMQ OID 请求:

转发扩展可以通过使用NDIS_STATUS_SUCCESS以外的状态代码完成请求来否决OID_RECEIVE_FILTER_ALLOCATE_QUEUE和OID_RECEIVE_FILTER_SET_FILTER的 OID 请求。 但是,扩展不得否决其他 VMQ OID 请求。

有关 VMQ 硬件卸载技术的详细信息,请参阅 虚拟机队列 (VMQ)

转发扩展必须遵循以下准则来处理硬件卸载 OID 请求:

  • Microsoft IM 平台仅播发整个团队的常见卸载功能。 但是,扩展可以生成 OID 请求来查询团队中每个适配器的功能。

    扩展确定团队中物理适配器的硬件功能后,可以将硬件卸载的 OID 设置请求转发到最适合卸载的适配器。

  • 所有硬件卸载由过度分配协议或筛选器驱动程序发起的 OID 请求都将封装在 NDIS_SWITCH_NIC_OID_REQUEST 结构中。 转发扩展发起的所有硬件卸载 OID 请求也必须封装在 NDIS_SWITCH_NIC_OID_REQUEST 结构中。

    该扩展通过 OID_SWITCH_NIC_REQUEST的 OID 集请求将封装的 OID 请求转发到基础物理网络适配器。 有关此过程的详细信息,请参阅 将 OID 请求转发到物理网络适配器

  • 扩展不得修改或失败硬件卸载 OID 请求,以清除、释放或完成卸载资源的分配。 例如,扩展不得失败 OID_RECEIVE_FILTER_CLEAR_FILTEROID_NIC_SWITCH_DELETE_VPORT的 OID 请求。 可扩展交换机接口必须处理这些 OID 请求,以清理这些资源的状态信息。

    扩展可以修改或失败硬件卸载 OID 请求,以分配、移动或设置卸载资源。 例如,扩展可能会失败或修改 OID_NIC_SWITCH_ALLOCATE_VFOID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA的 OID 请求。

  • 该扩展可以源自任何硬件卸载 OID 到基础物理网络适配器。 但是,该扩展不得源自硬件卸载 OID,该卸载会清除或释放扩展未分配的资源。

    例如,如果扩展不是针对同一队列发出OID_RECEIVE_FILTER_ALLOCATE_QUEUE请求,则它不得引发 OID_RECEIVE_FILTER_FREE_QUEUE 的硬件卸载 OID 请求。

    注意 如果扩展筛选了由过度分配的驱动程序发出的相同 OID 请求,则扩展只能产生其自己的封装硬件卸载 OID 请求。 在这种情况下,扩展不得转发原始 OID 请求。 相反,当 NDIS 调用其 FilterOidRequestComplete 以完成原始 OID 请求时,扩展必须调用 NdisFOidRequestComplete 来完成此请求。

  • 如果扩展将硬件卸载 OID 请求转发到基础物理网络适配器,则必须将 NDIS_SWITCH_NIC_OID_REQUEST 结构的 DestinationNicIndex 成员设置为适配器的非零索引值。 有关这些索引值的详细信息,请参阅 网络适配器索引值

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

  • 如果扩展发出硬件卸载 OID 请求来为 Hyper-V 子分区分配资源,则必须将 NDIS_SWITCH_NIC_OID_REQUEST 结构的 SourcePortId 成员设置为分区连接到的可扩展交换机端口的标识符。

    SourceNicIndex 成员必须设置为 NDIS_SWITCH_DEFAULT_NIC_INDEX

  • 当扩展调用 NdisFOidRequest 以转发 OID 请求时,它必须将 OidRequest 参数设置为指向OID_SWITCH_NIC_REQUEST OID 请求NDIS_OID_REQUEST结构的指针。

有关扩展如何筛选 OID 请求的详细信息,请参阅 筛选 NDIS 筛选器驱动程序中的 OID 请求

有关 MUX 驱动程序的详细信息,请参阅 NDIS MUX 中间驱动程序