判斷 NIC 交換器功能
本主題描述 NDIS 和過度載入驅動程式如何決定網路介面卡的 NIC 交換器功能,以支援單一根目錄 I/O 虛擬化 (SR-IOV) 。 本主題包含下列資訊:
在 MiniportInitializeEx期間報告 NIC 交換器功能
注意 只有 PCI Express (PCIe 的迷你埠驅動程式) 實體函式 (SR-IOV 網路介面卡的 PF) 可以報告 NIC 交換器功能。 PCIe 虛擬函式的迷你埠驅動程式 (VFs) 不得報告 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 成員設定為介面卡可支援的 VFs 和 VPorts 數目上限。
注意 根據網路介面卡上的可用硬體資源,迷你埠驅動程式可以將 MaxNumVFs 成員設定為其小於 其 *NumVFs 關鍵字的值。 如需此關鍵字的詳細資訊,請參閱 SR-IOV 的標準化 INF 關鍵字。
當 NDIS 呼叫迷你埠驅動程式的 MiniportInitializeEx 函式時,驅動程式會遵循下列步驟來註冊網路介面卡的 NIC 交換器功能:
迷你埠驅動程式會初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構。
迷你埠驅動程式會將 HardwareNicSwitchCapabilities 成員設定為先前初始化 NDIS_NIC_SWITCH_CAPABILITIES 結構的指標。
如果 *SRIOV INF 關鍵字的登錄設定有一個值,則網路介面卡目前已啟用 NIC 交換器建立和設定。 迷你埠驅動程式會將 CurrentNicSwitchCapabilities 成員設定為相同 NDIS_NIC_SWITCH_CAPABILITIES 結構的指標。
如果 *SRIOV INF 關鍵字的登錄設定值為零,則網路介面卡目前不會啟用 NIC 交換器建立和設定。 迷你埠驅動程式必須將 CurrentNicSwitchCapabilities 成員設定為 Null。
如需 *SRIOV INF 關鍵字的詳細資訊,請參閱 SR-IOV 的標準化 INF 關鍵字。
驅動程式會呼叫 NdisMSetMiniportAttributes ,並將 MiniportAttributes 參數設定為 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構的指標。
如需配接器初始化程式的詳細資訊,請參閱 初始化 Miniport 配接器。
建立不含 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 呼叫超載通訊協定驅動程式的 ProtocolBindAdapterEx 函式時,NDIS 會透過 BindParameters 參數傳遞網路介面卡的 NIC 交換器功能。 此參數包含 NDIS_FILTER_ATTACH_PARAMETERS 結構的指標。 這個結構的 NicSwitchCapabilities 成員包含 NDIS_NIC_SWITCH_CAPABILITIES 結構的指標。
當 NDIS 處理物件識別碼 (OID) 過度通訊協定或篩選驅動程式所發出的OID_NIC_SWITCH_HARDWARE_CAPABILITIES和OID_NIC_SWITCH_CURRENT_CAPABILITIES查詢要求時,NDIS 也會傳回NDIS_NIC_SWITCH_CAPABILITIES結構。