Hyper-V 可扩展交换机发送和接收标志
注意 本页假定你熟悉 Hyper-V 可扩展交换机 和 混合转发概述中的信息和关系图。
通过 Hyper-V 可扩展交换机数据路径移动的数据包流量由扩展按以下方式获取:
扩展在调用其 FilterSendNetBufferLists 函数时从入口数据路径获取数据包。 该扩展通过调用 NdisFSendNetBufferLists 将数据包转发到入口数据路径上的基础扩展。 筛选和转发扩展还可以通过调用 NdisFSendNetBufferListsComplete 从入口数据路径中删除数据包。
当调用其 FilterReceiveNetBufferLists 函数时,扩展将从出口数据路径获取数据包。 该扩展通过调用 NdisFIndicateReceiveNetBufferLists 将数据包转发到出口数据路径上的过度扩展。 筛选和转发扩展还可以通过调用 NdisFReturnNetBufferLists 从出口数据路径中删除数据包。
可以在 FilterSendNetBufferLists 或NdisFSendNetBufferLists 的 SendFlags 参数中设置以下标志:
NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE
如果设置了此标志, 则NET_BUFFER_LIST 结构链接列表中的所有数据包都源自同一 Hyper-V 可扩展交换机源端口。
当 NDIS 调用 FilterSendNetBufferLists 时,如果可扩展交换机可扩展接口已将来自同一源端口的多个数据包分组,它将设置此标志。 为了获得最佳性能,扩展应保留此分组,并在调用 NdisFSendNetBufferLists 时设置此标志。 如果扩展使用与列表中其他数据包相同的源端口,则扩展还可以将任何源自或克隆的数据包添加到 NET_BUFFER_LIST 结构的链接列表。
注意如果NET_BUFFER_LIST结构链接列表中的每个数据包使用相同的源端口,则扩展应在完成发送请求时在 NdisFSendNetBufferListsCompleteCompleteFlags 参数中设置NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE标志。
NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
如果设置了此标志,则 NET_BUFFER_LIST 结构链接列表中的所有数据包都将转发到同一可扩展交换机目标端口。
转发扩展可以在确定每个数据包的目标端口后,将此标志用于在入口数据路径上转发的 NET_BUFFER_LIST 结构的链接列表。 在将数据包转发到出口数据路径之前,可扩展交换机的基础微型端口边缘会使用此标志并将其删除。
捕获和筛选扩展不能使用此标志。
注意 转发扩展仅确定非 NVGRE 数据包的数据包的目标端口。 如果数据包是 NVGRE 数据包,Hyper-V 网络虚拟化 (HNV) 组件将确定数据包的目标端口并转发数据包。 有关详细信息,请参阅 混合转发。
为了获得最佳性能,如果要将链接列表中的所有数据包转发到同一目标端口,则转发扩展应设置此标志。 通过设置此标志,扩展会确认链接列表中的所有数据包在可扩展交换机转发上下文中具有相同的目标端口元素。
注意 转发扩展不得为具有多个目标端口的数据包的链接列表设置此标志。
可以在 FilterReceiveNetBufferLists 或 NdisFIndicateReceiveNetBufferLists 的 ReceiveFlags 参数中设置以下标志:
NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE
如果设置了此标志, 则NET_BUFFER_LIST 结构链接列表中的所有数据包都源自同一 Hyper-V 可扩展交换机源端口。
当 NDIS 调用 FilterReceiveNetBufferLists 时,如果可扩展交换机已将来自同一源端口的多个数据包分组,它将设置此标志。 为了获得最佳性能,扩展应保留此分组,并在调用 NdisMIndicateReceiveNetBufferLists 时设置此标志。 如果数据包与列表中的其他数据包具有相同的源端口,则扩展还应将任何源自或克隆的数据包添加到 NET_BUFFER_LIST 结构的链接列表。
注意如果NET_BUFFER_LIST结构链接列表中的每个数据包都使用相同的源端口,则当接收请求完成时,扩展应在 FilterReturnNetBufferLists 的 ReturnFlags 参数中设置NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE标志。 如果扩展调用 NdisFReturnNetBufferLists 来返回它不是源自或克隆的数据包,则扩展必须在 ReturnFlags 参数中设置此标志。
NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP
如果设置了此标志,则 NET_BUFFER_LIST 结构链接列表中的所有数据包都将转发到同一可扩展交换机目标端口。
当 NDIS 调用 FilterReceiveNetBufferLists 时,如果可扩展交换机对具有相同目标端口的多个数据包进行分组,它将设置此标志。 为了获得最佳性能,扩展应保留此分组,并在调用 NdisMIndicateReceiveNetBufferLists 时设置此标志。 如果数据包的目标端口与列表中的其他数据包相同,则扩展还应将任何源自或克隆的数据包添加到 NET_BUFFER_LIST 结构的链接列表中。
注意当扩展调用 NdisFIndicateReceiveNetBufferLists 时,它不得在 ReceiveFlags 参数中设置 NDIS_RECEIVE_FLAGS_RESOURCES 标志。 可扩展交换机接口会忽略此标志,并通过调用 FilterReturnNetBufferLists 完成接收指示。