VMQ 传输路径

对于传输请求,过度的驱动程序使用 NET_BUFFER_LIST_RECEIVE_QUEUE_ID 宏通过 NetBufferListFilteringInfo OOB 信息在传出数据中设置传出队列的队列标识符。 NetBufferListFilteringInfo 信息是在NDIS_NET_BUFFER_LIST_FILTERING_INFO结构中指定的。

NDIS 驱动程序可以使用 NET_BUFFER_LIST_RECEIVE_QUEUE_ID 宏来设置或获取 NET_BUFFER_LIST 结构的队列标识符。 如果队列组包含多个 VM 队列,则传输数据包的队列标识符可能设置为组中任何 VM 队列的队列标识符。

协议驱动程序在 NdisSendNetBufferLists 函数的 SendFlags 参数上设置 NDIS_SEND_FLAGS_SINGLE_QUEUE 位,以指示调用中的所有用于传输的 NET_BUFFER_LIST 结构都属于同一传输队列。

微型端口驱动程序在 NdisMSendNetBufferListsComplete 函数的 SendCompleteFlags 参数上设置NDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE位,以指示调用中的所有NET_BUFFER_LISTs都在同一传输队列上发送。

有关筛选器测试的详细信息,请参阅 VMQ 筛选器作

注意 在删除 VMQ 时(例如,在 VM 实时迁移期间),微型端口驱动程序可能会接收到包含无效 QueueId 值的 NBL。 如果发生这种情况,微型端口应忽略无效的队列 ID 并使用 0(默认队列)。 QueueId 位于 NBL OOB 数据的 NetBufferListFilteringInfo 部分中,并使用 NET_BUFFER_LIST_RECEIVE_QUEUE_ID 宏进行检索。