VMQ 送信パス

送信要求の場合、上にあるドライバーは、NET_BUFFER_LIST_RECEIVE_QUEUE_ID マクロを使用して、NetBufferListFilteringInfo OOB 情報を使用して、送信データ内の送信キューのキュー識別子を設定します。 NetBufferListFilteringInfo 情報は、NDIS_NET_BUFFER_LIST_FILTERING_INFO 構造体で指定されます。

NDIS ドライバーは、NET_BUFFER_LIST 構造体のキュー識別子を設定または取得する NET_BUFFER_LIST_RECEIVE_QUEUE_ID マクロを使用できます。 キュー グループに複数の VM キューが含まれている場合、送信パケットのキュー識別子は、グループ内の任意の VM キューのキュー識別子に設定される可能性があります。

プロトコル ドライバーは、NdisSendNetBufferLists 関数の SendFlags パラメーターにNDIS_SEND_FLAGS_SINGLE_QUEUE ビットを設定して、呼び出し内のすべての送信NET_BUFFER_LIST構造体が同じ送信キュー用であることを示します。

ミニポート ドライバーは、呼び出し内のすべてのNET_BUFFER_LISTsが同じ送信キューに送信されたことを示すために、NdisMSendNetBufferListsComplete 関数の SendCompleteFlags パラメーターにNDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE ビットを設定します。

フィルター テストの詳細については、「VMQ フィルター操作の」を参照してください。

VMQ が削除されると (たとえば、VM のライブ マイグレーション中)、ミニポート ドライバーが無効な QueueId 値を含む NBL を受け取る可能性があります。 この場合、ミニポートは無効なキュー ID を無視し、代わりに 0 (既定のキュー) を使用する必要があります。 QueueId は、NBL の OOB データの 部分 NetBufferListFilteringInfo に含まれており、NET_BUFFER_LIST_RECEIVE_QUEUE_ID マクロを使用して取得されます。