NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO union (ndis.h)
NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO聯集會指定將封包轉送至一或多個 Hyper-V 可延伸交換器埠的資訊。
此資訊包含在封包 NET_BUFFER_LIST結構的頻 外 (OOB) 數據中。
語法
typedef union _NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO {
UINT64 AsUINT64;
struct {
UINT32 NumAvailableDestinations : 16;
UINT32 SourcePortId : 16;
UINT32 SourceNicIndex : 8;
UINT32 NativeForwardingRequired : 1;
#if ...
UINT32 Reserved1 : 1;
#else
UINT32 Reserved1 : 2;
#endif
UINT32 IsPacketDataSafe : 1;
UINT32 SafePacketDataSize : 12;
UINT32 IsPacketDataUncached : 1;
UINT32 IsSafePacketDataUncached : 1;
UINT32 Reserved2 : 7;
};
} NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO, *PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO;
成員
AsUINT64
完整的 64 位 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 值。
NumAvailableDestinations
值,指定 NET_BUFFER_LIST 結構內未使用的可延伸交換器目的地埠元素數目。 如需詳細資訊,請參閱<備註>一節。
SourcePortId
來源可延伸交換器埠的標識碼, NET_BUFFER_LIST 來源。
SourceNicIndex
UINT32 值,指定連接到 SourcePortId 成員所指定之可延伸交換器埠的來源網路適配器索引。
如需此索引值的詳細資訊,請參閱 網路適配器索引值。
NativeForwardingRequired
如果此成員設定為 TRUE,封包是 NVGRE 封包,而 Hyper-V 網路虛擬化 (Hyper-V 可延伸交換器之 HNV) 元件將會轉送此封包。 如需詳細資訊,請參閱 混合式轉送。
此旗標不得由任何延伸模組寫入。
Reserved1
此成員保留供 NDIS 未來使用。
此成員保留供 NDIS 未來使用。
IsPacketDataSafe
如果此成員設定為 TRUE,則所有封包數據都來自受信任的主機記憶體。
SafePacketDataSize
值,指定位於受信任主機記憶體之封包數據中的連續位元組數目。 此值以位元組為單位,從封包數據開始。 如果 SafePacketDataSize 值之後有任何) 位於 Hyper-V 子分割和父分割區存取的不受信任共用記憶體中,則封包數據的其餘部分會 (。
如需詳細資訊,請參閱<備註>一節。
IsPacketDataUncached
如果未設定此旗標,則會快取整個封包數據。 如果已設定, 則不會 快取部分或所有數據。 設定時,請檢查 IsSafePacketDataUncached 字段,以查看是否至少快取 SafePacketData 部分。
IsSafePacketDataUncached
如果已設定 IsPacketDataUncached 旗標,此欄位會指出是否快取封包的SafePacketData部分。 如果是,請參閱 SafePacketDataSize 位元段,以瞭解快取多少個字節。
Reserved2
此成員保留供 NDIS 未來使用。
備註
可延伸的交換器延伸模組可以使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏來存取NET_BUFFER_LIST結構中的NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO等位。
NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO等位的 NumAvailableDestinations 成員會指定NET_BUFFER_LIST結構內未使用的可延伸交換器目的地埠元素數目。 每個可延伸交換器目的地埠都是由NET_BUFFER_LIST 結構之NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY結構內的NDIS_SWITCH_PORT_DESTINATION元素指定。 可延伸交換器擴充功能會呼叫 GetNetBufferListDestinations,以取得NET_BUFFER_LIST結構中的目前NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY。
NativeForwardingRequired 成員會指定封包是否為 NVGRE 封包。 如果是 TRUE,封包是 NVGRE 封包,而轉送延伸模組不會判斷封包的轉送目的地埠數位,雖然它可以在數位中新增或排除目的地埠。 如需詳細資訊,請參閱 混合式轉送。
IsPacketDataUncached 旗標可協助擴充交換器延伸模組判斷部分或所有封包數據是否快取。 如果已設定此旗標,則 不會 快取部分或所有數據, 而IsSafePacketDataUncached 旗標會告知延伸模組是否快取安全封包數據部分。 如果快取安全封包數據, SafePacketDataSize 成員會指定快取多少個字節。
SafePacketDataSize 會指定 Hyper-V 父數據分割之父操作系統中位於本機或 受信任記憶體的封包數據大小。 子分割區無法存取此記憶體。 因此,由在該分割區中執行的客體操作系統將它視為「安全」,
如果可延伸交換器延伸模組需要更多信任的空間才能檢查封包數據,則必須遵循下列步驟:
- 延伸模組必須藉由配置NET_BUFFER_LIST和NET_BUFFER結構來複製封包的NET_BUFFER_LIST結構。 然後擴充功能會呼叫 NdisCopyFromNetBufferToNetBuffer 來複製封包 的NET_BUFFER 結構。 如果此函式順利完成,封包的數據會複製到受信任的記憶體。
- 擴充功能必須呼叫 CopyNetBufferListInfo ,才能將封包的 OOB 數據複製到重複的封包。
- 複製原始封包之後,延伸模組必須使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏,在重複的封包中取得 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 聯集。 擴充功能必須將 IsPacketDataSafe 成員設定為 TRUE。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | NDIS 6.30 和更新版本支援。 |
標頭 | ndis.h (包括 Ndis.h) |
另請參閱
NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應