判斷 NIC 交換器功能
本主題描述 NDIS 和上層驅動程式如何決定支援單一根 I/O 虛擬化的網路介面卡的 NIC 切換功能(SR-IOV)。 本主題包含下列資訊:
在 MiniportInitializeEx期間, 報告 NIC 交換器功能
透過過度套用驅動程式 , 查詢 NIC 交換器功能
附註 只有 SR-IOV 網路適配器的 PCI Express (PCIe) 實體功能 (PF) 迷你埠驅動程式可以報告 NIC 切換功能。 PCIe 虛擬函式的迷你埠驅動程式 (VFs) 不得報告 SR-IOV 適配卡的 NIC 交換器功能。
如需 NIC 交換器的詳細資訊,請參閱 NIC 交換器。
在 MiniportInitializeEx 期間報告 NIC 交換器功能
當 NDIS 呼叫 miniport 驅動程式的 MiniportInitializeEx 函式時,驅動程式會提供下列 NIC 參數功能:
網路適配器可支援之 NIC 交換器的完整硬體功能集。
注意 從 NDIS 6.30 開始,網路適配器上只會建立一個 NIC 交換器。 這個切換器稱為 預設 NIC 切換器。
目前在網路適配器上啟用的 NIC 切換功能。
迷你埠驅動程式會透過下列方式初始化的 NDIS_NIC_SWITCH_CAPABILITIES 結構,報告基礎網路適配器的 NIC 交換器硬體功能:
迷你埠驅動程式會初始化 Header 成員。 驅動程式將 Header 的 Type 成員設定為 NDIS_OBJECT_TYPE_DEFAULT。
從 NDIS 6.30 開始,小型端口驅動程式會將 Revision 成員的 Header 設定為 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2,並將 Size 成員設定為 NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2。
迷你埠驅動程式會在 NicSwitchCapabilities 中設定適當的旗標,NDIS_NIC_SWITCH_CAPABILITIES 結構的成員 SR-IOV 網路適配器的 NIC 交換器功能。 例如,如果 NIC 交換器能支援每個在交換器上建立的虛擬埠上的中斷調節,則迷你埠驅動程式會設定 NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED 旗標。
迷你埠驅動程式會將 NDIS_NIC_SWITCH_CAPABILITIES 結構的其他成員設定為 SR-IOV 網路適配器之 NIC 交換器功能的值範圍。 例如,迷你埠驅動程式會將 MaxNumVFs 和 MaxNumVPorts 成員設定為適配卡可支援的最大 VFs 和 VPorts 數目。
注意 視網路適配器上的可用硬體資源而定,迷你埠驅動程式可以將 MaxNumVFs 成員設定為小於其 *NumVFs 關鍵詞的值。 如需此關鍵詞的詳細資訊,請參閱 標準化 INF 關鍵詞用於 SR-IOV。
當 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 切換器
NDIS 6.60 和更新版本中的迷你埠驅動程序必須遵循下列需求,才能在未啟用 SR-IOV 時共存 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 交換器,迷你埠驅動程式會在 NicSwitchCapabilities 成員中設定 NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED 旗標,這是 NDIS_NIC_SWITCH_CAPABILITIES 結構的一部分。
透過上層驅動程序查詢 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_NIC_SWITCH_HARDWARE_CAPABILITIES 和 OID_NIC_SWITCH_CURRENT_CAPABILITIES 這些物件識別碼(OID)查詢請求時,會傳回 NDIS_NIC_SWITCH_CAPABILITIES 結構。