Compartir a través de


Asignación de una cola de máquinas virtuales

Para asignar una cola con un conjunto inicial de parámetros de configuración, un controlador demasiado excesivo emite una solicitud de OID de método de OID_RECEIVE_FILTER_ALLOCATE_QUEUE . El miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene inicialmente un puntero a una estructura de NDIS_RECEIVE_QUEUE_PARAMETERS . Después de una devolución correcta de la solicitud de método OID, el miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene un puntero a una estructura de NDIS_RECEIVE_QUEUE_PARAMETERS que tiene un nuevo identificador de cola y una entrada de tabla MSI-X.

La estructura NDIS_RECEIVE_QUEUE_PARAMETERS se usa en el OID de OID_RECEIVE_FILTER_ALLOCATE_QUEUE y el OID de OID_RECEIVE_FILTER_QUEUE_PARAMETERS . Para más información sobre los parámetros de la cola de máquinas virtuales, consulte Obtención y actualización de parámetros de cola de máquinas virtuales.

El controlador de sobreaprovisionamiento inicializa la estructura de NDIS_RECEIVE_QUEUE_PARAMETERS con los siguientes parámetros de configuración de cola:

  • Tipo de cola (NdisReceiveQueueTypeVMQueue de la enumeración NDIS_RECEIVE_QUEUE_TYPE ).

  • Afinidad de procesador para la cola.

  • El nombre de la cola y el nombre de la máquina virtual.

  • Parámetros lookahead-split.

    Nota A partir de NDIS 6.30, ya no se admite la división de datos de paquetes en búferes de búsqueda anticipada independientes.

Nota El controlador de sobreaprovisionamiento puede establecer las marcas de NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION y NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED en el miembro Flags de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS . Las demás marcas no se usan para la asignación de colas.

Cuando NDIS recibe una solicitud de OID para asignar una cola de recepción, comprueba los parámetros de la cola. Una vez que NDIS asigna los recursos necesarios y el identificador de cola, envía la solicitud OID al controlador de miniport subyacente. El identificador de cola es único para el adaptador de red asociado.

Si el controlador de minipuerto puede asignar correctamente los recursos de software y hardware necesarios para la cola de recepción, completa la solicitud OID con un estado correcto.

Antes de que NDIS envíe la solicitud OID al controlador de minipuerto, NDIS asigna un identificador de cola en el miembro QueueId de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS y pasa la solicitud de método al controlador de miniport. El controlador miniport proporciona la entrada de tabla MSI-X en el miembro MSIXTableEntry .

El controlador de minipuerto debe conservar los identificadores de cola de las colas de recepción asignadas. NDIS usa el identificador de cola de una cola de recepción para las llamadas posteriores al controlador de miniporte para establecer un filtro de recepción en la cola de recepción, cambiar los parámetros de la cola de recepción o liberar la cola de recepción.

Nota La cola predeterminada (identificador de cola cero) siempre se asigna y no se puede liberar.

El controlador de sobreaprovisionamiento debe usar el identificador de cola que proporciona NDIS en las solicitudes OID posteriores, por ejemplo, para modificar los parámetros de la cola o liberar la cola. El identificador de cola también se incluye en los datos de OOB en todas las estructuras NET_BUFFER_LIST asociadas a la cola. Los controladores usan la macro NET_BUFFER_LIST_RECEIVE_QUEUE_ID para recuperar el identificador de cola en una estructura de NET_BUFFER_LIST.

Nota Un controlador de protocolo puede establecer filtros VMQ en cualquier momento después de asignar correctamente una cola y antes de que se elimine la cola.

El controlador de protocolo emite una solicitud de OID de método OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE para completar la asignación de cola. El controlador de minipuerto puede asignar memoria compartida y otros recursos cuando se completa la asignación. Para obtener más información sobre cómo asignar recursos de memoria compartida, consulte Asignación de recursos de memoria compartida.

Después de que un controlador de minipuerto reciba una solicitud de OID de OID_RECEIVE_FILTER_QUEUE_ALLOCATION y la controle correctamente, la cola se encuentra en estado Asignado . Para obtener más información sobre los estados de la cola, consulte Estados de cola y operaciones.

Después de que un controlador sobreasigne una o varias colas de recepción (y, opcionalmente, establece los filtros iniciales), debe emitir OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE establecer solicitudes de OID para notificar al controlador de minipuerto que la asignación está completa para el lote actual de colas de recepción.

El controlador de minipuerto no debe conservar ningún paquete en una cola de recepción si no hay ningún filtro establecido en esa cola. Si una cola nunca tenía ningún filtro establecido o se borraron todos los filtros, la cola debe estar vacía y se deben descartar los paquetes. Es decir, no se indican la pila de controladores ni se conservan en la cola.

Los controladores demasiado excesivos usan el OID de OID_RECEIVE_FILTER_FREE_QUEUE para liberar las colas que asignan. Para más información sobre cómo liberar colas, consulte Liberar una cola de máquinas virtuales.