Состояния и операции очереди
Для каждой очереди сетевой адаптер должен поддерживать следующий набор рабочих состояний:
Неопределенный
Очередь не выделена. Чтобы выделить очередь, драйвер с избыточной лицензией отправляет запрос 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), драйвер переходит в состояние Освобождения. Когда все неоплаченные признаки получения завершены и ресурсы очереди освобождены, очередь не определена.