注意 本页假定你熟悉 Hyper-V 可扩展交换机 和 混合转发概述中的信息和关系图。
通过 Hyper-V 可扩展交换机数据路径移动的数据包流量通过以下方式由扩展获取:
当调用其 FilterSendNetBufferLists 函数时,扩展将从入口数据路径获取数据包。 该扩展通过调用 NdisFSendNetBufferList 将数据包转发到入口数据路径的基础扩展。 筛选和转发扩展还可以通过调用 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结构中的每个数据包使用相同的源端口,扩展应在完成发送请求时在 NdisFSendNetBufferListsComplete 的 SendCompleteFlags 参数中设置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 完成接收指示。