修改封包的可延伸交換器來源埠資料

Hyper-V 可延伸交換器來源埠是由NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO結構中的SourcePortId成員所指定。 此結構包含在封包 NET_BUFFER_LIST 結構的頻外 (OOB) 轉送內容中。 如需此內容的詳細資訊,請參閱 Hyper-V 可延伸交換器轉送內容

可延伸交換器延伸模組必須遵循下列指導方針來修改封包的來源埠識別碼:

  • 可延伸交換器擴充功能必須呼叫 SetNetBufferListSource 來修改封包的來源埠。 延伸模組不得直接修改NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO結構的SourcePortId成員。

  • 如果擴充功能正在建立或複製封包,它必須在呼叫NdisAllocateNetBufferList之後呼叫AllocateNetBufferListForwardingCoNtext函式。 此函式會為用於轉送封包資訊的 OOB 資料配置可延伸交換器內容區域。

    當擴充功能呼叫 AllocateNetBufferListForwardingCoNtext時, SourcePortId 成員會設定為 NDIS_SWITCH_DEFAULT_PORT_ID。 這會指定封包源自擴充功能,而不是抵達可延伸交換器埠。

    具有 來源埠NDIS_SWITCH_DEFAULT_PORT_ID 的封包會由可延伸交換器延伸模組資料路徑視為具有特殊許可權且受信任。 這類流量不應受限於套用至來自其他來源埠之封包的原則。 例如,具有來源埠識別碼的封包 NDIS_SWITCH_DEFAULT_PORT_ID 略過可延伸交換器的基礎迷你埠邊緣所套用的內建可延伸交換器原則。 這些原則包括存取控制清單 (ACL) 和服務品質 (QoS) 。

    擴充功能源自封包流量時,應該謹慎且謹慎地使用 NDIS_SWITCH_DEFAULT_PORT_ID 的來源埠。 在大部分情況下,擴充功能應該將來源埠識別碼修改為可延伸交換器上的使用中埠。 這可讓該埠的原則套用至封包。

    不過,在某些情況下,擴充功能必須使用其來源埠 NDIS_SWITCH_DEFAULT_PORT_ID 的封包。 例如,如果擴充功能源自必須傳送至實體或虛擬網路上目的地的控制封包,它應該使用 NDIS_SWITCH_DEFAULT_PORT_ID 作為來源埠識別碼。 這可確保可延伸交換器驅動程式堆疊中的基礎延伸模組不會篩選和拒絕封包。