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