VMQ Transmit Path
For transmit requests, the overlying driver uses the NET_BUFFER_LIST_RECEIVE_QUEUE_ID macro to set the queue identifier of the outgoing queue in the outgoing data with the NetBufferListFilteringInfo OOB information. The NetBufferListFilteringInfo information is specified in an NDIS_NET_BUFFER_LIST_FILTERING_INFO structure.
NDIS drivers can use the NET_BUFFER_LIST_RECEIVE_QUEUE_ID macro to set or get the queue identifier of a NET_BUFFER_LIST structure. If a queue group contains more than one VM queue, the queue identifier of the transmit packet might be set to the queue identifier of any of the VM queues in the group.
Protocol drivers set the NDIS_SEND_FLAGS_SINGLE_QUEUE bit on the SendFlags parameter of the NdisSendNetBufferLists function to indicate that all of the transmit NET_BUFFER_LIST structures in the call are for the same transmit queue.
Miniport drivers set the NDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE bit on the SendCompleteFlags parameter of the NdisMSendNetBufferListsComplete function to indicate that all NET_BUFFER_LISTs in the call were sent on the same transmit queue.
For more information about filter tests, see VMQ Filter Operations.
Note When a VMQ is deleted (for example, during VM live migration), it is possible for the miniport driver to receive an NBL that contains an invalid QueueId value. If this happens, the miniport should ignore the invalid queue ID and use 0 (the default queue) instead. The QueueId is found in the NetBufferListFilteringInfo portion of the NBL's OOB data, and is retrieved by using the NET_BUFFER_LIST_RECEIVE_QUEUE_ID macro.