來自實體網路適配器的NDIS狀態指示
本主題討論可擴充交換器轉發延伸模組所使用的方法,以針對連接到交換器的網路介面卡產生 NDIS 狀態指示。 延伸模組可以產生下列適配卡類型的 NDIS 狀態指示:
一或多個基礎的物理網路介面被系結至可延伸交換器的 外部網路適配器。
例如,外部網路適配器可以系結至 NDIS 多任務器 (MUX) 中繼驅動程式的虛擬迷你埠邊緣。 MUX 驅動程式綁定於主機上的一個或多個實體網路組。 這個設定稱為 可延伸交換器小組。
在此設定中,可延伸交換器擴充功能會公開給小組中的每個網路適配器。 這可讓擴充功能管理小組中個別網路適配器的設定和使用。 例如,轉送延伸模組可以藉由將傳出封包轉送至個別配接器,為群組提供負載平衡故障轉移(LBFO)解決方案的支持。 管理可擴展交換器團隊的轉送擴展模組稱為 團隊提供者。 如需組合提供者的詳細資訊,請參閱 Teaming Provider Extensions。
在 Hyper-V 子分割內公開並連線到可延伸交換器埠的虛擬機 (VM) 網路適配器。
下圖顯示 NDIS 6.40 (Windows Server 2012 R2)及更高版本中,來自實體和虛擬機器網路配接卡的 NDIS 狀態指示的 Hyper-V 擴展交換器控制路徑。
下圖顯示用於 NDIS 6.30(Windows Server 2012)的 Hyper-V 可延伸交換器控制路徑,其處理來自實體和 VM 網路介面卡的 NDIS 狀態指示。
注意 在可延伸交換器介面中,NDIS 篩選驅動程式稱為 擴充功能,而驅動程式堆疊稱為 可延伸交換器驅動程式堆疊。
轉發擴充模組可以起始封裝的硬體卸載狀態指示,以在可擴充交換機驅動程式堆疊中提供給上層驅動程式。 這也允許擴充功能更改系結在可延伸交換器的外部網路適配器上的實體適配器團隊的目前卸載功能。 當配接器小組系結至外部網路介面卡時,只有小組的共同能力會公告給 NDIS 或其上層通訊協定和篩選驅動程式。 延伸模組可以藉由產生封裝狀態指示來擴充公告功能,以公告小組中某些配接器所支援的功能。 例如,擴充功能可以發出封裝的 NDIS_STATUS_RECEIVE_FILTER_CURRENT_CAPABILITIES 指示,以變更整個小組目前啟用的接收篩選功能。
注意 只有轉送延伸模組可以產生封裝的狀態指示。 如需此類型擴充功能的詳細資訊,請參閱 轉送延伸模組。
一般而言,轉發擴展會發出封裝的 NDIS 狀態指示,以變更所宣告的基礎實體網路介面卡硬體卸載能力。 例如,延伸模組可能會針對下列硬體卸除類型產生狀態指示:
因特網通訊協定安全性(IPsec)。
虛擬機佇列(VMQ)。
單一根 I/O 虛擬化 (SR-IOV)。
轉送延伸模組也可以發起封裝的 NDIS 狀態指示,以變更分配給 Hyper-V 子分割的硬體卸載資源。 從 NDIS 6.30 開始,擴充功能可以發出封裝的 NDIS_STATUS_SWITCH_PORT_REMOVE_VF 指示,以移除 VM 網路適配器與 PCI Express (PCIe) 虛擬函式 (VF) 之間的系結。 VF 是由支援 單一根 I/O 虛擬化(SR-IOV) 介面的基礎實體網路適配器所公開並支援。
如果轉送擴充程式源自基礎實體網絡介面卡硬體卸載資源的封裝 NDIS 狀態指示,則必須以下列方式設定 NDIS_SWITCH_NIC_STATUS_INDICATION 結構的成員:
DestinationPortId 成員必須設定為 NDIS_SWITCH_DEFAULT_PORT_ID。
DestinationNicIndex 成員必須設定為 NDIS_SWITCH_DEFAULT_NIC_INDEX
SourcePortId 成員必須設定為外部網路適配器所連接的可延伸交換器埠識別碼。
SourceNicIndex 成員必須設定為 NDIS_SWITCH_DEFAULT_NIC_INDEX。 這可讓狀態指示解譯為來自與外部網路適配器綁定的整個可延展交換器群組。
注意 如果只有單一實體網路適配器系結至外部網路適配器,轉送延伸模組也必須將此成員設定為 NDIS_SWITCH_DEFAULT_NIC_INDEX。
StatusIndication 成員必須設定為指向 NDIS_STATUS_INDICATION 結構的指標。 此結構包含封裝 NDIS 狀態指示的數據。
如果轉送延伸模組是為 Hyper-V 子分割區的硬體卸載資源發送 NDIS 狀態指示,則必須將 NDIS_SWITCH_NIC_STATUS_INDICATION 結構的成員設定如下:
DestinationPortId 和 DestinationNicIndex 成員必須設定為分割區所使用之網路連線的埠和網路適配器索引對應值。
SourcePortId 成員必須設定為 NDIS_SWITCH_DEFAULT_PORT_ID。
SourceNicIndex 成員必須設定為 NDIS_SWITCH_DEFAULT_NIC_INDEX。
StatusIndication 成員必須設定為指向 NDIS_STATUS_INDICATION 結構的指標。 此結構包含封裝 NDIS 狀態指示的數據。
當擴充功能發出封裝的 NDIS 狀態指示時,它必須遵循下列步驟:
擴充功能會呼叫 ReferenceSwitchNic,以遞增來源或目的地的網路適配器連線的參考計數。 這可確保可延伸交換器介面不會在參考計數器非零時刪除網路適配器連線。
當擴充功能呼叫 ReferenceSwitchNic時,它會以下列方式設定參數:
如果轉送延伸模組正在為基礎實體配接器產生封裝的 NDIS 狀態指示,則會將 SwitchPortId 參數設置為 SourcePortId 成員所指定的值。 延伸模組也會將 switchNicIndex 參數 設定為 sourceNicIndex 成員 所指定的值。
如果轉送延伸模組是從 Hyper-V 子分割產生 NDIS 狀態指示,則會將 SwitchPortId 參數設定為 DestinationPortId 成員指定的值。 擴充功能也會將 SwitchNicIndex 參數設定為 DestinationNicIndex 成員指定的值。
注意 如果 ReferenceSwitchNic 未傳回NDIS_STATUS_SUCCESS,則無法發出封裝的 NDIS 狀態指示。
擴充功能會呼叫 NdisFIndicateStatus 來轉送封裝的狀態通知。
注意 如果延伸模組轉送已篩選的 OID 要求,則必須在呼叫其 FilterStatus 函式的內容中呼叫 NdisFIndicateStatus。
NdisFIndicateStatus 傳回之後,擴充功能會呼叫 DereferenceSwitchNic,以清除來源或目的地網路適配器連線的參考計數器。 此延伸模組會將 SwitchPortId 和 SwitchNicIndex 參數設定為其在呼叫 ReferenceSwitchNic時所使用的相同值。