共用方式為


修改封包的可延伸交換器源埠數據

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

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

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

  • 如果延伸模組正在建立或複製封包,它必須在呼叫 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。 這可確保封包不會被可延伸交換器驅動程式堆疊中的基礎延伸模組篩選和拒絕。