Hyper-V 可延伸交換器埠的概觀
Hyper-V 可延伸交換器的每個網路連線都會以埠表示。 可延伸交換器介面會在建立網路連線之前建立並設定埠。 在網路連線中斷之後,介面可能會刪除埠,或將其重複使用到另一個網路連線。
使用網路介面設定的每個 Hyper-V 子分割區,都會在可延伸交換器上指派埠。 啟動 Hyper-V 子分割區時,可擴充交換器介面會在來賓作業系統中公開虛擬機(VM)網路配接器之前先建立埠。 在 VM 網路適配器公開和初始化之後,可延伸交換器介面會在 VM 網路適配器與可延伸交換器埠之間建立網路連線。 如果子分割區停止,可延伸交換器介面會先刪除網路連線,然後刪除可延伸交換器埠。
建立可延伸交換器埠時,會使用唯一標識符和名稱進行設定。 建立可延伸交換器埠之後,可以使用原則來配置該埠,從而定義封包流量管理的各種屬性。 例如,您可以針對虛擬 LAN (VLAN) 屬性定義標準埠原則,以及埠流量的存取限制。 此外,獨立軟體供應商(ISVs)可以定義自訂政策,以配置個別埠。 如需詳細資訊,請參閱 埠原則。
可延伸交換器埠包含下列型態:
驗證埠
驗證埠可用來驗證和驗證埠設定。 這些埠是暫時的,而且會在特定條件下建立。
例如,建立或重新設定 Hyper-V 子分割區以進行網路存取時,可延伸交換器介面會建立驗證埠。 介面會使用此埠來驗證磁碟分區虛擬機 (VM) 網路適配器的網路連線設定。 驗證完成後,會刪除驗證埠,並建立作業埠。
如需詳細資訊,請參閱 驗證埠。
作業埠
操作埠是用來建立和托管可擴展交換器網路介面卡連接。 建立作業埠時,會指派埠類型。 此通訊埠類型會在建立埠之後生效,並在它被拆毀之前生效。 針對指派給 Hyper-V 子分割區的埠,當分割區正在執行並運行時,作業埠類型會保持有效狀態。
如需詳細資訊,請參閱 作業埠。
可擴充交換器擴充套件會透過以下的可擴充交換器物件識別碼 (OID) 要求收到連接埠的建立、更新和刪除通知:
OID_SWITCH_PORT_CREATE
可延伸交換器的協議邊緣發出 OID_SWITCH_PORT_CREATE OID 集合要求,通知可延伸交換器的延伸模組關於建立可延伸交換器埠。
延伸模組可以透過傳回 STATUS_DATA_NOT_ACCEPTED 給 OID 要求,來否決建立通知。 例如,如果擴充功能無法配置資源,以在埠上強制執行其設定的原則,擴充功能就會否決建立通知。
如果延伸模組接受建立通知,則必須將 OID 要求轉送至可延伸交換器驅動程式堆疊。 延伸模組會監視此 OID 要求的完成狀態,以判斷基礎延伸模組是否已否決埠建立通知。
延伸模組無法將封包轉送至新建立的埠,直到建立網路連線為止。 如需此過程的詳細資訊,請參閱 Hyper-V 延伸交換網路配接器。
OID_SWITCH_PORT_UPDATED
可延伸交換器的通訊協定邊緣發出 OID_SWITCH_PORT_UPDATED 的 OID 集合要求,以通知可延伸交換器延伸模組正在更新可延伸交換器埠的參數。 OID 只會針對那些已建立且尚未開始卸除或刪除過程的埠發出。 目前只有 PortFriendlyName 字段在建立之後才會更新。
當先前與埠的網路連線已中斷且所有對埠的 OID 要求已完成時,可擴充交換器的通訊協定邊緣會發出此 OID 要求。
注意 如果先前未對埠進行網路適配器連線,可能會發出此 OID 要求。
延伸模組必須一律將這個 OID 集合要求轉送至可延伸交換器驅動程式堆疊。 延伸模組不得讓要求失敗。
OID_SWITCH_PORT_TEARDOWN
可延伸交換器的通訊協定邊緣發出 OID_SWITCH_PORT_TEARDOWN 的 OID 集合要求,以通知可延伸交換器延伸模組正在刪除可延伸交換器埠。 擴充交換器的協議邊界在與埠的先前網路連線已拆除且所有針對該埠的 OID 要求皆已完成時,會發出此 OID 要求。
注意 如果先前未對埠進行網路適配器連線,可能會發出此 OID 要求。
延伸模組必須一律將這個 OID 集合要求轉送至可延伸交換器驅動程式堆疊。 擴充功能不得使請求失敗。
延伸模組轉送此 OID 要求後,它就無法再針對被刪除的埠發出 OID 要求。
OID_SWITCH_PORT_DELETE
可延伸交換器的通訊協定邊緣發出 OID_SWITCH_PORT_DELETE 的 OID 集合要求,以通知可延伸交換器延伸模組已刪除可延伸交換器埠。 可延伸交換器的通訊協定邊緣會在發出 OID_SWITCH_PORT_TEARDOWN 要求後,以及完成以埠為目標的 OID 要求之後,再發出此 OID 要求。
延伸模組必須一律將這個 OID 集合要求轉送至可延伸交換器驅動程式堆疊。 延伸模組不得讓要求失敗。
針對網路連線建立的所有可延伸交換器埠都會指派大於 NDIS_SWITCH_DEFAULT_PORT_ID的標識碼。 NDIS_SWITCH_DEFAULT_PORT_ID 識別碼會保留,並透過下列方式使用:
封包的來源埠標識符會儲存在與封包 NET_BUFFER_LIST 結構相關聯的封包頻外 (OOB) 轉送內容中。 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 可延伸交換器轉送內容。
OID_SWITCH_NIC_REQUEST 的物件標識碼 (OID) 要求是由可延伸交換器介面發出,以封裝發行至可延伸交換器外部網路適配器的 OID 要求。 例如,硬體卸載 OID 要求會在傳送到可延伸交換器驅動程式堆疊之前,由介面封裝。
擴充功能也可以發出封裝的 OID 要求,以便將要求轉送至可延伸的交換器控制路徑。 這可讓擴充功能查詢或設定基礎實體網路適配器的功能。
InformationBuffer 成員位於 NDIS_OID_REQUEST 結構中,此 OID 請求包含一個指向 NDIS_SWITCH_NIC_OID_REQUEST 結構的指標。 如果 SourcePortId 成員設定為 NDIS_SWITCH_DEFAULT_PORT_ID,這會指定 OID 要求是由可延伸交換器介面所產生。 如果 DestinationPortId 設定為 NDIS_SWITCH_DEFAULT_PORT_ID,這會指定 OID 要求是以擴充交換器驅動程式堆疊中的延伸模塊處理為目標。
如需 OID 要求之控制路徑的詳細資訊,請參閱 Hyper-V OID 要求的可延伸交換器控制路徑。
NDIS_STATUS_SWITCH_NIC_STATUS 的 NDIS 狀態指示是由可延伸交換器的小埠端點發出,用於封裝來自可延伸交換器外部網路適配器的狀態指示。
延伸模組也可以發出封裝的 NDIS 狀態指示,以便將指示向上傳遞至可擴展交換器控制路徑。 這可讓擴充功能變更基礎實體網路適配器的回報功能。
StatusBufferNDIS_STATUS_INDICATION 結構的成員,這個指示包含 NDIS_SWITCH_NIC_STATUS_INDICATION 結構的指標。 如果 SourcePortId 成員設為 NDIS_SWITCH_DEFAULT_PORT_ID,這表示狀態指示是由可延伸交換器介面所產生。 如果 DestinationPortId 設定為 NDIS_SWITCH_DEFAULT_PORT_ID,這會指定 OID 要求是以擴充交換器驅動程式堆疊中的延伸模塊處理為目標。
如需 NDIS 狀態指示之控制路徑的詳細資訊,請參閱 Hyper-V NDIS 狀態指示的可延伸交換器控制路徑。
可延伸交換器介面會針對已建立的每個埠維護參考計數器。 如果埠的參考計數器具有非零值,則不會刪除埠。 介面提供下列處理程式函式,以遞增或遞減可延伸交換器埠的參考計數器:
參考交換埠
可延伸交換器擴充功能會呼叫此函式,以遞增埠的參考計數器。 雖然參考計數器具有非零值,但可延伸交換器的通訊協定邊緣將不會發出 OID_SWITCH_PORT_DELETE 的物件標識碼 (OID) 集合要求,以刪除可延伸交換器埠。
擴充功能必須先呼叫 ReferenceSwitchPort,然後才能執行任何要求埠處於啟動狀態的操作。 例如,擴充功能必須先呼叫 ReferenceSwitchPort,之後才能發出 OID_SWITCH_PORT_PROPERTY_ENUM的 OID 方法請求。
附註 延伸模組在收到关于埠的 OID_SWITCH_PORT_TEARDOWN 的 OID 設定要求後,不得呼叫 ReferenceSwitchPort。
DereferenceSwitchPort
可延伸交換器擴充功能會呼叫此函式來遞減埠的參考計數器。
埠上的作業完成後,擴充功能必須呼叫 DereferenceSwitchPort。 例如,如果擴充功能在發出 OID_SWITCH_PORT_PROPERTY_ENUM 請求之前呼叫 ReferenceSwitchPort,那麼該擴充功能必須在該 OID 請求完成後呼叫 DereferenceSwitchPort。
注意 NDIS 埠和可延伸交換器埠是不同的物件。 透過可延伸交換器數據路徑移動的封包一律會指派給 NDIS_DEFAULT_PORT_NUMBER的 NDIS 埠號碼。 不過,封包的來源和目的地可延伸交換器埠號碼可以是 NDIS_SWITCH_DEFAULT_PORT_ID 或更大值。 如需詳細資訊,請參閱 Hyper-V 可延伸交換器資料路徑。