共用方式為


可延伸交換器數據路徑的封包管理指導方針

本主題描述 Hyper-V 可延伸交換器延伸模組必須遵循的指導方針,以管理可延伸交換器數據路徑上取得的封包。

注意 在可延伸交換器介面中,NDIS 篩選驅動程式稱為 可延伸交換器擴充功能,而驅動程式堆疊稱為 可延伸交換器驅動程式堆疊。 如需延伸模組的詳細資訊,請參閱 Hyper-V Extensible Switch Extensions

注意 此頁面假設您已熟悉 Hyper-V Extensible Switch 概觀和 混合式轉送中的資訊和圖表。

擴充功能必須遵循下列指導方針,才能在可延伸交換器數據路徑中管理封包:

  • 源自封包的延伸模塊必須呼叫 NdisFSendNetBufferLists,以在輸入數據路徑上起始傳送要求。 這必須以此方式完成,以允許透過可延伸交換器正確轉送封包。

  • 擷取延伸模組可以監視可延伸交換器輸入和輸出數據路徑上的封包。 不過,這種類型的擴充功能必須一律轉寄封包,而且不得卸除封包。 此外,擷取延伸模組在轉送封包之前,不得修改封包數據。

  • 在可延伸的交換器輸入資料路徑上,篩選和轉送延伸模組可以執行下列動作:

    • 篩選延伸模組可以篩選封包流量,並只針對透過可延伸交換器傳遞封包強制執行自定義埠或交換器原則。 當延伸模組篩選輸入數據路徑中的封包時,它只能根據封包的來源埠和網路適配器連線套用篩選規則。 這項資訊會儲存在封包 NET_BUFFER_LIST 結構的 OOB 數據中,而且可以使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 巨集來取得。

      注意 資料進入路徑上取得的封包不包含目標埠。 根據目的地埠篩選封包只能在取得於輸出數據路徑的封包上進行。

    • 轉送延伸模組可以篩選封包流量,並強制執行自定義和標準埠或交換器原則,以透過可延伸的交換器傳遞封包。 當轉送延伸模組篩選輸入數據路徑中的封包時,它會根據來源埠以及轉送延伸模組指派給封包的目的地埠套用篩選規則。

  • 在可延伸的交換器輸出資料路徑上,篩選和轉送延伸模組可以執行下列動作:

    • 篩選延伸模組可以篩選封包流量,並只針對透過可延伸交換器傳遞封包強制執行自定義埠或交換器原則。 當篩選延伸模組篩選輸出數據路徑中的封包時,它只能根據封包的目的地埠套用篩選規則。

      目的地埠數據會儲存在封包 NET_BUFFER_LIST 結構的 OOB 數據中。 延伸模組會藉由呼叫 getNetBufferListDestinations 函式來取得這項資訊。

    • 轉送延伸模組可以篩選封包流量,並強制執行自定義和標準埠或交換器原則,以透過可延伸的交換器傳遞封包。 當轉送延伸模組篩選輸出數據路徑中的封包時,它可以根據封包的來源或目的地埠套用篩選規則。

    • 根據在封包上強制執行的原則,篩選或轉送延伸模組可以排除將封包傳遞至一或多個目的地。 如需此程序的詳細資訊,請參閱 排除封包至可延伸交換器目的地埠的傳遞

      根據在封包上強制執行的原則,轉送延伸模組可以排除將封包傳遞至一或多個目的地。 如需詳細資訊,請參閱 混合式轉送

  • 在可延伸的交換器輸出資料路徑上,篩選和轉送延伸模組不得執行下列動作:

    • 在輸出數據路徑上轉送封包之前,請先修改封包數據。

      如果篩選延伸模組需要修改封包中的數據,它必須先複製封包而不保留埠目的地。 然後,延伸模組必須將修改過的封包插入輸入數據路徑。 這可讓基礎延伸模組在修改的封包上強制執行原則,而轉送延伸模組可以新增埠目的地。

      如果轉送延伸模組需要修改封包中的數據,它必須先複製封包,才能指派埠目的地。 在封包經過修改並指派埠目的地之後,延伸模組必須將修改過的封包插入輸入數據路徑。

      如需詳細資訊,請參閱 複製封包流量

      注意 如果延伸模組複製輸出數據路徑上取得的封包,則只有在未變更封包數據並保留原始目的地埠數據時,才能將新的封包插入輸出數據路徑。

    • 將目的地埠新增至封包,再轉送封包。

      注意 轉送延伸模組允許將目的地埠新增至輸入數據路徑上取得的封包。

    • 將新的或複製的數據封包插入輸出資料路徑。

  • 在標準 NDIS 數據路徑中,非可延伸的交換器 OOB 數據通常會有不同的格式,視封包是否表示為傳送或接收而定。 例如,NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO OOB 數據是傳送和接收特定結構的聯集。

    在可延伸交換器數據路徑中,所有封包都會隨著傳送和接收一樣,透過擴充驅動程式堆棧移動。 因此,在封包的 NET_BUFFER_LIST 結構內的非可擴展交換器 OOB 資料會在透過驅動程式堆疊的整個流程期間,以傳送或接收格式存在。

    此 OOB 資料的格式取決於封包抵達可延伸交換器的來源可延伸交換器埠。 如果來源埠連線到外部網路介面卡,則非可擴展交換器 OOB 資料會是接收格式。 對於其他埠,此 OOB 資料會以傳送格式表示。

    附註 如果延伸模組複製封包的 NET_BUFFER_LIST 結構,如果擴充功能新增或修改 OOB 數據,則必須將不可延伸的交換器 OOB 數據納入考慮。 延伸模組必須呼叫 CopyNetBufferListInfo,將與來源封包中可延伸交換器數據路徑相關聯的 OOB 數據複製到複製的封包。 當數據複製到複製的封包時,此函式會維護 OOB 傳送或接收格式。

  • 如果擴充元件在資料路徑的入口或出口棄置封包,則必須呼叫 ReportFilteredNetBufferLists。 呼叫此函式時,可擴展交換器介面會增加計數器並記錄已卸除或排除封包的事件。