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
NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL
Hyper-V 可扩展交换机 的 概述