排除封包傳遞至可延伸交換器目的地埠
本主題描述 Hyper-V 可延伸交換器擴充功能如何排除封包傳遞至可延伸交換器埠的方式。 封包的目的地埠是在封包 NET_BUFFER_LIST 結構內的頻外 (OOB) 轉送內容內指定。 如需此內容的詳細資訊,請參閱 Hyper-V 可延伸交換器轉送內容。
注意 此頁面假設您已熟悉 Hyper-V 可延伸交換 器和 混合式轉送概觀中的資訊和圖表。
注意 在可延伸交換器介面中,NDIS 篩選驅動程式稱為可延伸 交換器延伸模組 ,而驅動程式堆疊稱為 可延伸交換器驅動程式堆疊。 如需擴充功能的詳細資訊,請參閱 Hyper-V 可延伸交換器擴充功能。
篩選和轉送延伸模組可以排除在可延伸交換器輸入或輸出資料路徑上取得的封包傳遞。 您可以透過下列方式排除封包傳遞:
延伸模組可以完成封包要求或指示來卸載封包。 這不包括將封包傳遞至任何可延伸交換器埠。 這個方法可用於具有一或多個目的地埠的封包。
針對在可延伸交換器輸入資料路徑上取得的封包,延伸模組會呼叫 NdisFSendNetBufferListsComplete來完成封包傳送要求。
針對在可延伸交換器輸出資料路徑上取得的封包,延伸模組會呼叫 NdisFReturnNetBufferLists來完成封包接收指示。
對於使用多個目的地埠在輸出資料路徑上取得的封包,延伸模組可以修改一或多個目的地埠的資料來排除封包傳遞。 擴充功能會藉由將目的地埠NDIS_SWITCH_PORT_DESTINATION結構的IsExcluded成員設定為一個值來執行此動作。 這個方法可讓封包傳遞至 IsExcluded 值設為零的埠。
注意 在輸入資料路徑上取得的封包不包含目的地埠。 只有在可延伸交換器將封包轉送至輸出資料路徑之後,才能使用此資料。
延伸模組修改目的地埠的 IsExcluded 值之後,必須將輸出資料路徑中的封包轉送至過度延伸模組。 不過,如果所有封包目的地埠的 IsExcluded 資料設定為一個,擴充功能應該藉由完成封包接收指示來卸載封包,而不是轉送。
注意 擴充功能將目的地埠的 IsExcluded 值設定為 1 之後,輸出資料路徑上的過度延伸無法將此值變更為零。
注意 擷取擴充功能無法排除封包傳遞至可延伸交換器埠。
篩選和轉送延伸模組必須遵循下列指導方針,以排除封包傳遞至可延伸交換器埠:
在可延伸交換器輸入資料路徑上,篩選和轉送延伸模組可以根據封包來源埠或資料的原則準則來排除封包傳遞。
來源埠資訊會儲存在封包NET_BUFFER_LIST結構的 OOB 資料NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO聯集中。 延伸模組會使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏來取得資料。
如果延伸模組排除從輸入資料路徑取得的封包傳遞,則必須完成封包傳送要求來卸載封包。
在可延伸交換器輸入資料路徑上,轉送延伸模組會決定封包的目的地埠,並將此資訊新增至封包的 OOB 資料。 根據延伸模組強制執行的原則準則,它可以排除封包傳遞至埠,方法是不要將其目的地埠資訊新增至 OOB 資料。
如需此程式的詳細資訊,請參閱 將可延伸交換器目的地埠資料新增至封包。
在可延伸交換器輸出資料路徑上,篩選和轉送延伸模組可以根據原則準則排除封包的傳遞。 例如,篩選延伸模組可以根據封包來源埠或目的地埠的原則準則來排除封包傳遞。
延伸模組會遵循下列步驟,排除封包傳遞至目的地埠:
擴充功能會藉由呼叫 GetNetBufferListDestinations來取得封包的目的地埠。 如果呼叫傳回NDIS_STATUS_SUCCESS, Destinations 參數會包含 NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 結構的指標。 此結構會指定封包的可延伸交換器目的地埠。 每個目的地埠都會格式化為 NDIS_SWITCH_PORT_DESTINATION 結構。
注意如果NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY結構的NumDestinations成員包含零的值,則封包沒有目的地埠的資料。
擴充功能會將目的地埠NDIS_SWITCH_PORT_DESTINATION結構的IsExcluded成員設定為一個值,以排除封包傳遞至可延伸交換器埠。
注意 如果延伸模組排除將封包傳遞至其所有目的地埠,擴充功能必須完成封包的接收指示來卸載封包。
如果延伸模組排除對封包中一或所有目的地埠的傳遞,則必須執行下列動作:
擴充功能必須呼叫 UpdateNetBufferListDestinations ,將這些變更認可至封包的 OOB 資料。
延伸模組必須呼叫 ReportFilteredNetBufferLists。 呼叫此函式時,可延伸交換器介面會遞增排除封包的計數器和記錄事件。 擴充功能必須先進行此呼叫,才能轉送可延伸交換器資料路徑中的封包,從該路徑取得封包。
同樣地,如果延伸模組完成封包傳送要求或指示,以排除對封包的所有埠的傳遞,它也必須呼叫 ReportFilteredNetBufferLists。
注意 延伸模組可以針對擴充功能排除的封包,建立 NET_BUFFER_LIST 結構的連結清單。 當擴充功能呼叫 ReportFilteredNetBufferLists時,會將 NetBufferLists 參數設定為連結清單的指標。
如需可延伸交換器輸入和輸出資料路徑的詳細資訊,請參閱 Hyper-V 可延伸交換器資料路徑。