共用方式為


原始封包流量

本主題描述 Hyper-V 擴充功能如何產生新的封包,並將其插入可延伸交換器資料路徑。

注意 此頁面假設您已熟悉 Hyper-V 可延伸交換 器和 混合式轉送概觀中的資訊和圖表。

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

可延伸交換器延伸模組只能將新的封包插入可延伸交換器輸入資料路徑。 這可確保可延伸交換器介面可以正確篩選和轉送這些封包。 延伸模組必須遵循下列指導方針,才能將新的封包插入輸入資料路徑:

  • 擴充功能必須先為新的封包配置 NET_BUFFER_LIST 結構。

  • 擴充功能為新的封包配置 NET_BUFFER_LIST 結構之後,它必須呼叫 AllocateNetBufferListForwardingCoNtext 處理常式函式,以配置封包的可延伸交換器轉送內容。

    轉送內容位於封包的頻外 (OOB) 資料中。 它包含封包的轉送資訊,例如其來源埠和一或多個目的地埠的陣列。

    如需轉送內容的詳細資訊,請參閱 Hyper-V 可延伸交換器轉送內容

  • 擴充功能呼叫 AllocateNetBufferListForwardingCoNtext之後,封包的來源埠會設定為 NDIS_SWITCH_DEFAULT_PORT_ID。 信任來源埠識別碼 為 NDIS_SWITCH_DEFAULT_PORT_ID 的封包,並略過可延伸的交換器埠原則,例如存取控制清單 (ACL) 和服務品質 (QoS) 。

    擴充功能可能會希望封包被視為源自特定埠。 這可讓該埠的原則套用至封包。 擴充功能會呼叫 SetNetBufferListSource 來變更封包的來源埠。

    不過,在某些情況下,擴充功能可能會想要將封包的來源埠識別碼指派給 NDIS_SWITCH_DEFAULT_PORT_ID。 例如,擴充功能可能會想要將來源埠識別碼設定為 NDIS_SWITCH_DEFAULT_PORT_ID ,以取得傳送至外部網路上裝置的專屬控制封包。

  • 如果轉送延伸模組在輸入資料路徑上傳送新的封包,則必須判斷封包的目的地埠。 如需此程式的詳細資訊,請參閱 將可延伸交換器目的地埠資料新增至封包

    注意 擷取或篩選延伸模組無法將新的目的地埠新增至新的封包。

  • 當擴充功能建立新的封包時,封包資料位於 Hyper-V 父分割區父作業系統的本機或 受信任記憶體中。 子分割區無法存取此記憶體。 因此,客體作業系統在該分割區中執行的客體作業系統,會將其視為「安全」。

    擴充功能必須使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏,取得新封包 的NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 聯集。 擴充功能必須將 IsPacketDataSafe 成員設定為 TRUE。 這會指定所有封包資料都位於受信任的記憶體中。

  • 當擴充功能呼叫 NdisFSendNetBufferLists 以將封包插入輸入資料路徑時,它必須使用適當的可延伸交換器旗標設定來設定 Flags 參數。 如需這些旗標設定的詳細資訊,請參閱 Hyper-V 可延伸交換器傳送和接收旗標

  • 當 NDIS 呼叫延伸模組的 FilterSendNetBufferListsComplete 函式以完成新封包的傳送要求時,延伸模組必須呼叫 FreeNetBufferListForwardingCoNtext 以釋放配置的轉送內容。 擴充功能必須先執行此動作,才能釋放或重複使用封包 的NET_BUFFER_LIST 結構。

如需可延伸交換器輸入和輸出資料路徑的詳細資訊,請參閱 Hyper-V 可延伸交換器資料路徑