共用方式為


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) 元件將會轉送此封包。 如需詳細資訊,請參閱 混合式轉送

此旗標不得由任何延伸模組寫入。

注意 此旗標僅適用於 NDIS 6.40 和更新版本。

Reserved1

此成員保留供 NDIS 未來使用。

此成員保留供 NDIS 未來使用。

IsPacketDataSafe

如果此成員設定為 TRUE,則所有封包數據都來自受信任的主機記憶體。

SafePacketDataSize

值,指定位於受信任主機記憶體之封包數據中的連續位元組數目。 此值以位元組為單位,從封包數據開始。 如果 SafePacketDataSize 值之後有任何) 位於 Hyper-V 子分割和父分割區存取的不受信任共用記憶體中,則封包數據的其餘部分會 (。

如需詳細資訊,請參閱<備註>一節。

注意 只有當 IsPacketDataSafe 成員設定為 FALSE 時,這個成員才有效。

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 父數據分割之父操作系統中位於本機或 受信任記憶體的封包數據大小。 子分割區無法存取此記憶體。 因此,由在該分割區中執行的客體操作系統將它視為「安全」,

如果可延伸交換器延伸模組需要更多信任的空間才能檢查封包數據,則必須遵循下列步驟:

  1. 延伸模組必須藉由配置NET_BUFFER_LISTNET_BUFFER結構來複製封包的NET_BUFFER_LIST結構。 然後擴充功能會呼叫 NdisCopyFromNetBufferToNetBuffer 來複製封包 的NET_BUFFER 結構。 如果此函式順利完成,封包的數據會複製到受信任的記憶體。
  2. 擴充功能必須呼叫 CopyNetBufferListInfo ,才能將封包的 OOB 數據複製到重複的封包。
  3. 複製原始封包之後,延伸模組必須使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏,在重複的封包中取得 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 聯集。 擴充功能必須將 IsPacketDataSafe 成員設定為 TRUE
如需如何在可延伸交換器介面中複製封包的詳細資訊,請參閱 產生封包流量

規格需求

需求
最低支援的用戶端 NDIS 6.30 和更新版本支援。
標頭 ndis.h (包括 Ndis.h)

另請參閱

轉送延伸模組

將封包轉送至 Hyper-V 可延伸交換器埠

將封包轉送至實體網路適配器

GetNetBufferListDestinations

混合式轉送

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY

NDIS_SWITCH_PORT_DESTINATION

NET_BUFFER_LIST

NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL

Hyper-V 可延伸交換器概觀