确定 NIC 交换机功能
本主题介绍 NDIS 和过分驱动程序如何确定支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器的 NIC 交换机功能。 本主题包含以下信息:
在 MiniportInitializeEx 期间报告 NIC 交换机功能
注意 只有 PCI Express (PCIe) 物理功能 (PF) SR-IOV 网络适配器的微型端口驱动程序才能报告 NIC 交换机功能。 PCIe 虚拟函数的微型端口驱动程序 (VF) 不得报告 SR-IOV 适配器的 NIC 切换功能。
有关 NIC 开关的详细信息,请参阅 NIC 开关。
在 MiniportInitializeEx 期间报告 NIC 交换机功能
当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序提供以下 NIC 切换功能:
网络适配器可以支持的 NIC 交换机的完整硬件功能集。
注意 从 NDIS 6.30 开始,网络适配器上只创建一个 NIC 交换机。 此开关称为 默认 NIC 开关。
网络适配器上当前启用的 NIC 交换机功能。
微型端口驱动程序通过按以下方式初始化的 NDIS_NIC_SWITCH_CAPABILITIES 结构报告基础网络适配器的 NIC 交换机硬件功能:
微型端口驱动程序初始化 Header 成员。 驱动程序将 Header 的 Type 成员设置为NDIS_OBJECT_TYPE_DEFAULT。
从 NDIS 6.30 开始,微型端口驱动程序将 Header 的 Revision 成员设置为 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 并将 Size 成员设置为 NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2。
微型端口驱动程序将 NDIS_NIC_SWITCH_CAPABILITIES 结构的 NicSwitchCapabilities 成员中的相应标志设置为 SR-IOV 网络适配器的 NIC 交换机功能。 例如,如果 NIC 交换机支持在交换机上创建的每个虚拟端口 (VPort) 上进行中断审查,微型端口驱动程序将设置NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED标志。
微型端口驱动程序将 NDIS_NIC_SWITCH_CAPABILITIES 结构的其他成员设置为 SR-IOV 网络适配器的 NIC 交换机功能的值范围。 例如,微型端口驱动程序将 MaxNumVFs 和 MaxNumVPorts 成员设置为适配器可以支持的最大 VF 和 VPort 数。
注意根据网络适配器上的可用硬件资源,微型端口驱动程序可以将 MaxNumVFs 成员设置为小于其 *NumVF 关键字 (keyword) 的值。 有关此关键字 (keyword) 的详细信息,请参阅 SR-IOV 的标准化 INF 关键字。
当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序会按照以下步骤注册网络适配器的 NIC 切换功能:
微型端口驱动程序初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构。
微型端口驱动程序将 HardwareNicSwitchCapabilities 成员设置为指向以前初始化 的 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。
如果 *SRIOV INF 关键字 (keyword) 的注册表设置的值为 1,则当前已启用网络适配器以创建和配置 NIC 交换机。 微型端口驱动程序将 CurrentNicSwitchCapabilities 成员设置为指向同一 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。
如果 *SRIOV INF 关键字 (keyword) 的注册表设置的值为零,则表示当前未为 NIC 交换机的创建和配置启用网络适配器。 微型端口驱动程序必须将 CurrentNicSwitchCapabilities 成员设置为 NULL。
有关 *SRIOV INF 关键字 (keyword) 的详细信息,请参阅 SR-IOV 的标准化 INF 关键字。
驱动程序调用 NdisMSetMiniportAttributes 并将 MiniportAttributes 参数设置为指向 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的指针。
有关适配器初始化过程的详细信息,请参阅 初始化微型端口适配器。
创建不带 SR-IOV 的 NIC 交换机
未启用 SR-IOV 时,NDIS 6.60 及更高版本中的微型端口驱动程序必须遵守以下 NIC 交换机和 VMQ 功能共存的要求。 启用 SR-IOV 后,微型端口驱动程序应遵循上一部分中的现有要求。
- 微型端口驱动程序播发 NIC 交换机和 VMQ 功能。
- NIC 可以在 NIC 开关和 VMQ 模式之间切换,而无需重启 NIC。
- 当 NIC 最初启动时,它已准备好处于任一模式, (创建 NIC 交换机或) 创建 VMQ 队列。
- 如果创建了 NIC 交换机,则微型端口将无法执行任何后续 VMQ 队列分配回调。
- 如果首先创建 VMQ 队列,微型端口驱动程序将成功分配 VMQ 队列,并失败任何 NIC 交换机分配调用。
- 删除 NIC 开关或删除所有 VMQ 队列时,微型端口驱动程序将返回到初始状态,并准备再次进入其中任一模式。
- 当 NIC 最初启动时,它已准备好处于任一模式, (创建 NIC 交换机或) 创建 VMQ 队列。
若要播发无需使用 SR-IOV 即可创建 NIC 交换机,微型端口驱动程序在 NDIS_NIC_SWITCH_CAPABILITIES 结构的 NicSwitchCapabilities 成员中设置 NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED 标志。
通过覆盖驱动程序查询 NIC 交换机功能
NDIS 按以下方式将网络适配器当前启用的 NIC 交换机功能传递给绑定到网络适配器的过度驱动程序:
当 NDIS 调用过大筛选器驱动程序的 FilterAttach 函数时,NDIS 通过 AttachParameters 参数传递网络适配器的 NIC 交换机功能。 此参数包含指向 NDIS_FILTER_ATTACH_PARAMETERS 结构的指针。 此结构的 NicSwitchCapabilities 成员包含指向 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。
当 NDIS 调用 Overlying 协议驱动程序的 ProtocolBindAdapterEx 函数时,NDIS 通过 BindParameters 参数传递网络适配器的 NIC 交换机功能。 此参数包含指向 NDIS_FILTER_ATTACH_PARAMETERS 结构的指针。 此结构的 NicSwitchCapabilities 成员包含指向 NDIS_NIC_SWITCH_CAPABILITIES 结构的指针。
当 NDIS 处理对象标识符 (OID) 查询OID_NIC_SWITCH_HARDWARE_CAPABILITIES或筛选器驱动程序发出的OID_NIC_SWITCH_HARDWARE_CAPABILITIES和OID_NIC_SWITCH_CURRENT_CAPABILITIES的查询请求时,NDIS 也会返回NDIS_NIC_SWITCH_CAPABILITIES结构。