Поделиться через


Состояния и операции очереди

Для каждой очереди сетевой адаптер должен поддерживать следующий набор рабочих состояний:

Неопределенный
Очередь не выделена. Чтобы выделить очередь, драйвер с избыточной лицензией отправляет запрос OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID.

Allocated
Состояние "Выделено " — это начальное состояние очереди. Когда очередь находится в состоянии "Выделено", драйвер, выполняющий превышение, обычно устанавливает фильтры в очереди с OID_RECEIVE_FILTER_SET_FILTER OID или завершает выделение очереди с помощью запроса OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

Присвойте параметру
В состоянии Set для очереди выделен по крайней мере один фильтр, но драйвер не отправил OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

Запущена
В состоянии Выполняется очередь имеет заданные фильтры, выделение очереди завершено, а адаптер мини-порта указывает на получение пакетов для очереди.

Пауза
В состоянии Приостановлено сетевой адаптер не указывает полученные сетевые данные для очереди. Перед запросом OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE в очереди не были заданы фильтры, либо все фильтры, заданные в очереди, были очищены с помощью запроса OID_RECEIVE_FILTER_CLEAR_FILTER OID.

DMA остановлено
В состоянии Остановлено DMA драйвер мини-порта получил OID_RECEIVE_FILTER_FREE_QUEUE запрос OID. Если DMA остановлена и драйвер выдал указание состояния остановки DMA (с NDIS_STATUS_RECEIVE_QUEUE_STATE), драйвер переходит в состояние Освобождения.

Освобождение
В состоянии Освобождения драйвер мини-порта завершает операции, необходимые для остановки операций отправки и получения для очереди, и освобождает связанные ресурсы. После завершения всех невыполненных указаний получения очередь удаляется, а очередь не определена.

В следующей таблице заголовки являются состояниями очереди. Основные события перечислены в первом столбце. Остальные записи в таблице указывают следующее состояние, в которое очередь входит после возникновения события в состоянии. Пустые записи представляют недопустимые сочетания событий и состояний.

Событие \ Состояние Не определено. Allocated Присвойте параметру Запущен Пауза Остановка DMA Освобождение

OID_RECEIVE_FILTER_ALLOCATE_QUEUE — метод (set)

Allocated

OID_RECEIVE_FILTER_QUEUE_PARAMETERS — запрос метода (запроса)

Allocated

Присвойте параметру

Запущен

Пауза

OID_RECEIVE_FILTER_QUEUE_PARAMETERS — задать запрос

Allocated

Присвойте параметру

Запущен

Пауза

OID_RECEIVE_FILTER_SET_FILTER — запрос метода (set)

Присвойте параметру

Присвойте параметру

Запущен

Запущен

OID_RECEIVE_FILTER_CLEAR_FILTER — задать запрос (последний фильтр)

Allocated

Пауза

OID_RECEIVE_FILTER_CLEAR_FILTER — задать запрос (не последний фильтр)

Присвойте параметру

Запущен

OID_RECEIVE_FILTER_ENUM_FILTERS — метод (запрос запроса)

Allocated

Присвойте параметру

Запущен

Пауза

OID_RECEIVE_FILTER_PARAMETERS — запрос метода (запроса)

Присвойте параметру

Запущен

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE — запрос метода (set)

Пауза

Запущен

Получение пакета

Запущен

OID_RECEIVE_FILTER_FREE_QUEUE запрос на настройку

Остановка DMA

Остановка DMA

DMA остановлена и NDIS_STATUS_RECEIVE_QUEUE_STATE отправлено сообщение о состоянии (примечание. DMA, вероятно, уже остановлено в состоянии "Выделено" или "Приостановлено")

Освобождение

Все указания на получение завершены, а ресурсы очереди освобождены

Не определено.

Примечание События, перечисленные в предыдущей таблице, включают некоторые вторичные события, которые не приводят к изменению состояния. Эти вторичные события включаются в таблицу для указания состояний, в которых эти события являются допустимыми.

Основные события очереди определяются следующим образом:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE — запрос метода (set)
Избыточный драйвер выделил очередь. Дополнительные сведения о выделении очередей см. в разделе Выделение и освобождение очередей виртуальных машин.

OID_RECEIVE_FILTER_SET_FILTER — запрос метода (set)
Переопределяющий драйвер устанавливает фильтр в очереди. Если драйвер с превышением не отправил OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, очередь находится в состоянии Задать. В противном случае очередь находится в состоянии Выполняется. Дополнительные сведения о настройке фильтров для очередей см. в разделе Настройка и очистка фильтров VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER — задать запрос
Переопределяющий драйвер очистил фильтр в очереди. Если последний фильтр был очищен в работающей очереди, DMA можно остановить; Уведомления о получении остановлены, и очередь должна быть очищена от полученных данных, если таковые имеются. Дополнительные сведения об очистке фильтров в очередях см. в разделе Настройка и очистка фильтров VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE — запрос метода (set)
Превышение драйвера завершило выделение очереди. Если в очереди установлены фильтры, она находится в состоянии Выполняется и может начаться получение. Дополнительные сведения о завершении выделения очередей см. в статье Выделение и освобождение очередей виртуальных машин.

Получение пакета
Драйвер мини-порта может указывать только получение пакетов для очереди, которая находится в состоянии Выполняется. Дополнительные сведения об указании полученных данных для очередей см. в разделе Операции отправки и получения VMQ.

OID_RECEIVE_FILTER_FREE_QUEUE задать запрос.
Слишком большой драйвер освободил очередь. Драйвер выдает указание состояния остановки DMA (с NDIS_STATUS_RECEIVE_QUEUE_STATE), драйвер переходит в состояние Освобождения. Когда все неоплаченные признаки получения завершены и ресурсы очереди освобождены, очередь не определена.