VMQ 传输路径

对于传输请求,overlying 驱动程序使用 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 筛选器操作

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