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) 组件将转发此数据包。 有关详细信息,请参阅 混合转发。
此标志不得由任何扩展写入。
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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈