Compartir a través de


Estados y operaciones de cola

Para cada cola, un adaptador de red debe admitir el siguiente conjunto de estados operativos:

Indefinido
No se asigna la cola. Para asignar una cola, un controlador sobreasignado envía una solicitud de OID de OID_RECEIVE_FILTER_ALLOCATE_QUEUE .

Allocated
El estado Asignado es el estado inicial de una cola. Cuando una cola está en el estado Asignado, el controlador de sobreasignación normalmente establece filtros en la cola con el OID de OID_RECEIVE_FILTER_SET_FILTER o completa la asignación de cola con la solicitud de OID de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE .

Establecer
En el estado Set (Establecer ), una cola tiene al menos un filtro asignado, pero el controlador de sobreasignación no ha enviado el OID de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE .

Corriendo
En el estado En ejecución , la cola tiene filtros establecidos, la asignación de cola se completa y el adaptador de minipuerto indica los paquetes de recepción de la cola.

Pausa
En el estado Pausado , el adaptador de red no indica los datos de red recibidos de la cola. No había ningún filtro establecido en la cola antes de la solicitud de OID de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE o todos los filtros establecidos en la cola se borraron con la solicitud de OID de OID_RECEIVE_FILTER_CLEAR_FILTER .

DMA detenido
En el estado DMA Detenido , un controlador de minipuerto recibió una solicitud de OID de OID_RECEIVE_FILTER_FREE_QUEUE . Cuando se detiene el DMA y el controlador ha emitido la indicación de estado DMA-stopped (con NDIS_STATUS_RECEIVE_QUEUE_STATE), el controlador entra en el estado freeing.

Liberar
En el estado Freeing , un controlador de miniporte completa las operaciones necesarias para detener las operaciones de envío y recepción de la cola y libera los recursos asociados. Una vez completadas todas las indicaciones de recepción pendientes, se elimina la cola y la cola es Indefinido.

En la tabla siguiente, los encabezados son los estados de la cola. Los eventos principales se muestran en la primera columna. El resto de las entradas de la tabla especifican el siguiente estado en el que entra la cola después de que se produzca un evento dentro de un estado. Las entradas en blanco representan combinaciones de eventos o estados no válidas.

Evento \ Estado No definido Allocated Set En ejecución En pausa Detener DMA Liberar

OID_RECEIVE_FILTER_ALLOCATE_QUEUE: método (set)

Allocated

OID_RECEIVE_FILTER_QUEUE_PARAMETERS: solicitud de método (consulta)

Allocated

Set

En ejecución

En pausa

OID_RECEIVE_FILTER_QUEUE_PARAMETERS: establecer solicitud

Allocated

Set

En ejecución

En pausa

OID_RECEIVE_FILTER_SET_FILTER: solicitud de método (set)

Set

Set

En ejecución

En ejecución

OID_RECEIVE_FILTER_CLEAR_FILTER: establecer solicitud (último filtro)

Allocated

En pausa

OID_RECEIVE_FILTER_CLEAR_FILTER: establecer solicitud (no el último filtro)

Set

En ejecución

OID_RECEIVE_FILTER_ENUM_FILTERS: método (solicitud de consulta)

Allocated

Set

En ejecución

En pausa

OID_RECEIVE_FILTER_PARAMETERS: solicitud de método (consulta)

Set

En ejecución

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE: solicitud de método (set)

En pausa

En ejecución

Recepción de paquetes

En ejecución

OID_RECEIVE_FILTER_FREE_QUEUE establecer solicitud

Detener DMA

Detener DMA

DMA se detiene y NDIS_STATUS_RECEIVE_QUEUE_STATE indicación de estado se envió (Nota: DMA probablemente ya se detuvo en estado Asignado o En pausa)

Liberar

Todas las indicaciones de recepción están completas y se liberan los recursos de la cola.

No definido

Nota Los eventos enumerados en la tabla anterior incluyen algunos eventos secundarios que no dan lugar a un cambio de estado. Estos eventos secundarios se incluyen en la tabla para especificar los estados en los que estos eventos son válidos.

Los eventos de cola principal se definen de la siguiente manera:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE: solicitud de método (set)
Un controlador sobreasignado a una cola. Para más información sobre la asignación de colas, consulte Asignación y liberación de colas de máquinas virtuales.

OID_RECEIVE_FILTER_SET_FILTER: solicitud de método (set)
Un controlador de sobreaprovisionamiento establece un filtro en una cola. Si el controlador de sobreaprovisionamiento no ha enviado el OID de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE , la cola se encuentra en estado Set. De lo contrario, la cola está en estado En ejecución. Para obtener más información sobre cómo establecer filtros en colas, consulte Establecer y borrar filtros de VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER: establecer solicitud
Un controlador de sobrescargó un filtro en una cola. Si el último filtro se ha borrado en una cola en ejecución, se puede detener DMA; las indicaciones de recepción se detienen y la cola debe borrarse de los datos recibidos, si los hay. Para obtener más información sobre cómo borrar filtros en colas, consulte Configuración y borrado de filtros de VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE: solicitud de método (set)
Un controlador sobreasignación completó la asignación de cola. Si hay filtros establecidos en la cola, se encuentra en estado En ejecución y se pueden iniciar indicaciones de recepción. Para más información sobre cómo completar la asignación de colas, consulte Asignación y liberación de colas de máquinas virtuales.

Recepción de paquetes
Un controlador de minipuerto solo puede indicar paquetes de recepción para una cola que se encuentra en estado En ejecución. Para obtener más información sobre cómo indicar los datos recibidos para las colas, consulte Operaciones de envío y recepción de VMQ.

OID_RECEIVE_FILTER_FREE_QUEUE establecer solicitud.
Un controlador sobreapoderado liberó una cola. El controlador emite la indicación de estado DMA-stopped (con NDIS_STATUS_RECEIVE_QUEUE_STATE), el controlador entra en el estado freeing. Cuando se completan todas las indicaciones de recepción pendientes y se liberan los recursos de cola, la cola no está definida.