网络接口卡支持
本主题介绍 NDIS 微型端口驱动程序可以管理的网络接口卡 (NIC) 类型,以及不同类型的 NIC 如何影响驱动程序传输网络数据的方式。
向 NDIS 报告 NIC 的中类型
若要报告 NIC 的中等类型,微型端口驱动程序会将指针传递到 NdisMSetMiniportAttributes 函数的 MiniportAttributes 参数中的 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 结构。 微型端口驱动程序在初始化期间从其 MiniportInitializeEx 函数调用 NdisMSetMiniportAttributes。 微型端口驱动程序应在NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES结构中设置注册属性之后和设置任何其他属性之前设置 MiniportAttributes 属性。 必须设置 MiniportAttributes 属性。 驱动程序在设置 MiniportAttributes 属性时,将 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 结构的 MediaType 成员设置为适当的媒体类型。
当过度的 NDIS 协议驱动程序调用 NdisOpenAdapterEx 以绑定到指定的微型端口适配器时,它会提供一个可以操作的介质类型的列表。 NDIS 使用微型端口驱动程序和协议驱动程序中的信息来设置绑定。 此绑定提供用于在驱动程序堆栈中上下传输网络数据的路径。
物理 NIC
微型端口驱动程序完成初始化微型端口适配器以及发送和接收网络数据的步骤取决于物理设备的功能,如下所示。
NDIS-WDM NIC
对于 NDIS-WDM NIC(例如基于 USB 的 NIC),微型端口驱动程序使用 DMA 管理内存的方式对 NDIS 并不重要,也不可见。
总线主 DMA NIC
这些 NIC 可以通过板载 DMA 控制器直接访问主机内存,该控制器无需使用主机 CPU 即可管理网络与主机内存之间的数据传输。
若要发送,微型端口驱动程序会设置 NIC 来映射传出缓冲区。 然后,微型端口驱动程序会导致设备从此内存开始传输。 NIC DMA 控制器将数据从共享系统内存传输到网络,并在发送完成后中断 CPU。 为了接收,DMA 控制器在通知主机中断之前将传入数据传输到主机内存。
总线主 DMA NIC 通常具有一个板载环形缓冲区,微型端口驱动程序将该缓冲区映射到系统内存中的一组缓冲区。 通常,可以对 NIC 进行编程,以有效地处理多个数据包。 管理此类 NIC 的微型端口驱动程序通常支持多包发送和接收,因为 NIC 可以有效地处理多个数据包,从而提高其 I/O 吞吐量。
非总线主机 DMA NIC
目前,非总线主机 DMA NIC 包括以下内容:
系统 DMA NIC
管理此类 NIC 的微型端口驱动程序使用系统 DMA 控制器来管理数据包数据与网络之间的传输。 数据传输需要主机 CPU 的配合。
虚拟 NIC 和微型端口
在虚拟机中,NDIS 微型端口驱动程序可以将仅软件资源作为虚拟微型端口进行管理,也可以管理表示硬件资源的虚拟 NIC。 下表说明了虚拟微型端口和虚拟 NIC 之间的差异。
Attribute | 虚拟微型端口 | 虚拟 NIC |
---|---|---|
定义 | 映射到软件枚举的 PnP 设备的 NDIS 微型端口驱动程序。 | 由主机 OS 虚拟机监控程序管理的 NIC。 虚拟机监控程序使虚拟机认为它具有一些硬件,但物理世界中实际上不存在此类硬件。 |
具有中断 | 否 | 是 |
可以使用 DMA | 否 | 是 |
由 创建或销毁... | 来宾 OS | 主机 OS |
可以访问来宾 VM 外部 | 否 | 是 |