NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO union (ndis.h)

NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO联合指定用于将数据包转发到一个或多个 Hyper-V 可扩展交换机端口的信息。

此信息包含在带外 (OOB) 数据包 NET_BUFFER_LIST 结构的数据中。

语法

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_LIST和NET_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 可扩展交换机概述