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 キューのキュー識別子に設定される可能性があります。

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

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

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

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