可延伸交換器資料路徑的封包管理指導方針
本主題描述 Hyper-V 可延伸交換器延伸模組必須遵循的指導方針,以管理在可延伸交換器資料路徑上取得的封包。
注意 在可延伸交換器介面中,NDIS 篩選驅動程式稱為 可延伸交換器延伸模組 ,而驅動程式堆疊稱為 可延伸交換器驅動程式堆疊。 如需擴充功能的詳細資訊,請參閱 Hyper-V 可延伸交換器擴充功能。
注意此頁面假設您已熟悉Hyper-V 可延伸交換器和混合式轉送概觀中的資訊和圖表。
延伸模組必須遵循這些指導方針,才能在可延伸交換器資料路徑中管理封包:
源自封包的延伸模組必須呼叫 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。 呼叫此函式時,可延伸交換器介面會遞增已捨棄或排除封包的計數器和記錄事件。