共用方式為


將 OID 要求轉送至實體網路適配器

本主題討論如何 Hyper-V 可擴充交換器延伸轉發物件識別碼(OID)要求給基礎實體配接器,透過 Hyper-V 可擴充交換器控制路徑。 延伸模組也可以遵循本主題中所述的方法,對基礎實體網路適配器發出OID要求。

例如,外部網路適配器可以系結至 NDIS 多任務器 (MUX) 中繼驅動程式的虛擬迷你埠邊緣。 MUX 驅動程式綁定於主機上的一個或多個實體網路組。 這個設定稱為 可延伸交換器小組

在此設定中,可延伸交換器擴充功能會公開給小組中的每個網路適配器。 這可讓擴充功能管理小組中個別網路適配器的設定和使用。 例如,轉送延伸模組可以藉由將傳出封包轉送至個別配接器,為群組提供負載平衡故障轉移(LBFO)解決方案的支持。 管理可延伸交換器小組的轉送延伸模組稱為 小組提供者。 如需有關團隊提供者的詳細資訊,請參閱 Teaming Provider Extensions

下圖顯示 NDIS 6.40(Windows Server 2012 R2) 和更新版本的可延伸交換器小組範例。

ndis 6.40 的 oid 控制項路徑圖表。

下圖顯示 NDIS 6.30 的可延伸交換器小組範例(Windows Server 2012)。

ndis 6.30 可延伸交換器組隊的圖表。

注意 在 Hyper-V 可延伸交換器介面中,NDIS 篩選驅動程式稱為 可延伸交換器擴充 功能,而驅動程式堆疊稱為 可延伸交換器驅動程式堆棧

必須封裝 OID 要求,才能將要求轉送至基礎實體網路適配器。 OID 要求會先封裝在 NDIS_SWITCH_NIC_OID_REQUEST 結構內。 然後,OID 要求會透過 OID_SWITCH_NIC_REQUEST 的 OID 設定要求經由可延伸交換器控制路徑轉送。

基礎實體適配卡的 OID 要求是由下列項目發出:

可延伸的交換器介面。
OID 要求,例如硬體卸載的要求,是由上層協定或篩選驅動程式發出,這些驅動程式會在如下載體中執行:

  • 在 Hyper-V 父分割區中執行的管理作系統。

  • 在 Hyper-V 子分割中執行的客體作業系統。

當可延伸交換器收到這些 OID 要求時,這些要求會封裝並轉送至可延伸交換器控制路徑。 當轉送延伸模組收到封裝的 OID 要求時,可以將要求轉送至基礎實體配接器。 這項功能特別適用於設定硬體卸載的可擴展交換機組。

例如,MUX 驅動程式會公告整個可延伸交換器小組的一般功能。 不過,轉送延伸模組可能會發出 OID 要求,以查詢或設定小組內的配接器個別功能。 然後,轉送延伸模組可以從外部網路適配器產生 NDIS 狀態指示,以通知上層驅動程式有關套用至整個網路組隊的功能。 如需此程式的詳細資訊,請參閱 從實體網路適配器產生 NDIS 狀態指示

當轉送延伸模組透過控制路徑轉送 OID 要求時,外部網路適配器會收到它。 此時,OID 要求會解構並轉送至指定的實體網路適配器。

注意 從 Windows Server 2012 開始,只有硬體卸載 OID 要求會以這種方式封裝和轉送。 例如,虛擬機佇列(VMQ)或因特網通訊協定安全性(IPsec)的 OID 請求卸載會透過可延伸的交換器控制路徑封裝和轉送。 如需詳細資訊,請參閱 管理硬體將 OID 要求卸載至實體網路適配器

轉送延伸模組。
轉送延伸模組可以產生自己的封裝 OID 要求,並將其轉送至基礎實體網路適配器。 轉送延伸模組可以封裝標準 NDIS OID 要求。 轉送延伸模組也可以封裝實體網路適配器的獨立硬體廠商 (IHV) 所定義的私人 OID 要求。 這可讓 IHV 開發的轉送延伸模組,在小組中的個別實體配接器上啟用或停用專屬屬性。

此外,轉送延伸模組可以發起封裝的硬體卸載 OID 要求,為指定的 Hyper-V 子分割配置資源。 例如,轉送延伸模組可以發起封裝的 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 要求,為指定的子分割區分配 VMQ。 在此情況下,擴充功能會將要求封裝為源自與分割區相關聯的可延伸交換器埠和網路適配器連線。

注意 如果轉送擴充功能正在篩選由上層驅動程式發出的相同 OID 要求,則它只能創建自己的封裝的硬體卸載 OID 要求。 在此情況下,延伸模組不得轉送原始 OID 要求。 相反地,當 NDIS 呼叫其 FilterOidRequestComplete 以完成發起的 OID 請求時,擴充功能必須呼叫 NdisFOidRequestComplete 來完成此請求。

篩選或擷取延伸模組
篩選或擷取延伸模組可以產生自己的封裝 OID 查詢要求,並將其轉送至基礎實體網路適配器。 這些延伸模組可以封裝標準 NDIS OID 查詢要求或實體網路適配器獨立硬體廠商 (IHV) 所定義的私人 OID 查詢要求。

注意 只有轉送延伸模組才能將封裝的 OID 集合要求封裝到基礎實體適配卡。

轉送延伸模組在轉送、重新導向或產生基礎實體配接器的封裝 OID 要求時,必須遵循下列步驟:

  1. 如果轉接延伸模組發起了 OID 要求,則必須使用與該要求相關的資訊,初始化延伸分配的 NDIS_OID_REQUEST 結構。

    如果延伸模組正在轉送 OID 要求,則它不得變更 FilterOidRequest 函式 OidRequest 參數所參考的現有NDIS_OID_REQUEST結構。 相反地,擴充功能必須呼叫 NdisAllocateCloneOidRequest ,為新的 NDIS_OID_REQUEST 結構配置記憶體,並從現有的 NDIS_OID_REQUEST 結構複製所有資訊。

  2. 擴充功能會將擴充配置 NDIS_SWITCH_NIC_OID_REQUEST 結構的成員設定為下列值:

    • DestinationPortId 成員必須設定為外部網路適配器所連接的可延伸交換器埠識別碼。

    • DestinationNicIndex 成員必須設定為基礎實體網路適配器的非零索引值。

      如需這些索引值的詳細資訊,請參閱 網路適配器索引值

    • 如果轉送延伸模組發起針對 Hyper-V 子分割區的硬體卸載 OID 要求,則 SourcePortId 成員必須設置為該分割區所使用的埠識別碼。 此外, SourceNicIndex 成員必須設定為該埠的網路連線網路適配器索引。

      如果轉送擴展模組是為了自身的目的而發起標準或私人 OID 要求,則必須將 SourcePortIdSourceNicIndex 成員設為零。

      如果轉送延伸模組正在轉送或重新導向硬體卸除 OID 要求,它必須保留由可延伸交換器介面設定之 SourcePortIdSourceNicIndex 成員的值。

    • OidRequest 成員必須被設定為指向已初始化的 NDIS_OID_REQUEST 結構的指標,以便處理封裝的 OID 請求。 轉送延伸模組會配置並初始化這個結構,或使用結構的複製複本。

  3. 擴充功能會將擴充配置 NDIS_OID_REQUEST 結構的成員設定為下列值:

    • Oid 成員必須設定為 OID_SWITCH_NIC_REQUEST

    • InformationBuffer 成員必須包含緩衝區的指標,該緩衝區包含產生的或篩選的 OID 要求數據。

    • InformationBufferLength 成員必須包含包含所產生或篩選 OID 要求數據的緩衝區長度,以位元組為單位。

    擴充功能會將其他成員設定為對 NDIS_OID_REQUEST 結構有效的值。

  4. 擴充功能會呼叫 ReferenceSwitchNic 來增加目的地實體網路適配器索引的參考計數器。 這可確保可延伸交換器介面不會在參考計數器非零時刪除實體網路適配器連線。

    當擴充功能呼叫 ReferenceSwitchNic 時,它會將 SwitchPortId 參數設定為 DestinationPortId 成員指定的值。 擴充功能也會將 SwitchNicIndex 參數設定為 DestinationNicIndex 成員指定的值。

    注意 如果 ReferenceSwitchNic 未傳回NDIS_STATUS_SUCCESS,則 OID 要求無法轉送至目的地實體網路適配器。

  5. 如果轉送延伸模組針對 Hyper-V 子分割啟動硬體卸載的 OID 要求,它同時會呼叫 ReferenceSwitchNic ,以遞增與該分割區相關聯的來源網路適配器連線索引的參考計數器。 這可確保可延伸交換器介面不會在參考計數器非零時刪除實體網路適配器連線。

    當擴充功能呼叫 ReferenceSwitchNic 時,它會將 SwitchPortId 參數設定為 SourcePortId 成員指定的值。 延伸模組也會將 switchNicIndex 參數 設定為 sourceNicIndex 成員 所指定的值。

    注意 如果 ReferenceSwitchNic 未傳回NDIS_STATUS_SUCCESS,則 OID 要求無法轉送至目的地實體網路適配器。

  6. 擴充功能會呼叫 NdisFOidRequest ,將封裝的 OID 要求轉送至指定的目的地可延伸交換器埠和網路適配器。

    注意如果延伸模組正在轉送篩選的 OID 要求,則必須在對 FilterOidRequest 函式的呼叫內容中呼叫 NdisFOidRequest。 如果擴充功能正在轉送已產生的 OID 要求,則會在處於執行重新啟動暫停暫停狀態時呼叫 NdisFIndicateStatus。 如需這些狀態的詳細資訊,請參閱 篩選模塊狀態和作業

  7. 當 NDIS 呼叫 FilterOidRequestComplete 函式時,擴充功能會呼叫 DereferenceSwitchNic,以清除目的地實體網路適配器索引的參考計數器。

    如果轉發擴充套件為 Hyper-V 子分割區產生了硬體卸載 OID 要求,它還會呼叫DereferenceSwitchNic,以清除網路介面卡來源網路介面卡連線索引的參考計數器。

    在這兩種情況下,擴充功能會將 SwitchPortIdSwitchNicIndex 參數設定為呼叫 ReferenceSwitchNic 時所使用的相同值。

如需擴充功能如何發出 OID 要求的詳細資訊,請參閱 從 NDIS 篩選驅動程式產生 OID 要求

如需 MUX 驅動程式的詳細資訊,請參閱 NDIS MUX 中繼驅動程式