Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un adaptador de red indica un paquete recibido en una cola solo si este supera todas las pruebas de los campos de filtro de un filtro aplicado en esa cola. Para más información sobre las pruebas de filtro, consulte Operaciones de filtro de VMQ.
Si el controlador de protocolo superpuesto establece el indicador NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION en el miembro Flags de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS, el controlador de miniporte no debe mezclar las estructuras NET_BUFFER_LIST para otras colas de recepción con las estructuras NET_BUFFER_LIST para esta cola en una sola llamada a la función NdisMIndicateReceiveNetBufferLists. Además, el controlador debe establecer la bandera NDIS_RECEIVE_FLAGS_SINGLE_QUEUE en el parámetro ReceiveFlags de la función NdisMIndicateReceiveNetBufferLists.
Si NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION no fue establecido, los controladores de miniport pueden vincular estructuras NET_BUFFER_LIST para fotogramas de diferentes colas de máquinas virtuales e indicarlos en una sola llamada a NdisMIndicateReceiveNetBufferLists. En este caso, no es necesario ordenar la lista vinculada indicada de estructuras de NET_BUFFER_LIST por número de cola. No es necesario agrupar las estructuras NET_BUFFER_LIST para diferentes colas.
Cuando un controlador de protocolo establece NDIS_RETURN_FLAGS_SINGLE_QUEUE y devuelve búferes de recepción, todas las estructuras NET_BUFFER_LIST del parámetro NetBufferLists de la función NdisReturnNetBufferLists deben pertenecer a la misma cola de máquinas virtuales. Sin embargo, no es necesario que los controladores de protocolo devuelvan todas las estructuras de NET_BUFFER_LIST que se indicaron en una sola llamada a la función ProtocolReceiveNetBufferLists en una sola llamada a NdisReturnNetBufferLists. Además, la lista devuelta puede incluir estructuras NET_BUFFER_LIST de varias indicaciones de recepción si pertenecen a la misma cola de máquinas virtuales.
Los controladores de protocolo establecen el bit NDIS_RETURN_FLAGS_SINGLE_QUEUE en el parámetro ReturnFlags de NdisReturnNetBufferLists para indicar que todas las estructuras NET_BUFFER_LIST devueltas pertenecen a la misma cola de VM.
Las indicaciones de recepción de VMQ deben incluir la siguiente información fuera de banda (OOB) en el miembro NetBufferListInfo de las estructuras NET_BUFFER_LIST.
Especifique el identificador de cola en la información NetBufferListFilteringInfo.
Establezca el identificador de filtro en la información de NetBufferListFilteringInfo en cero.
La información de NetBufferListFilteringInfo se especifica en una estructura NDIS_NET_BUFFER_LIST_FILTERING_INFO . Para acceder a la estructura NDIS_NET_BUFFER_LIST_FILTERING_INFO en los datos OOB de NET_BUFFER_LIST, un controlador NDIS llama a la macro NET_BUFFER_LIST_INFO y especifica el tipo de información NetBufferListFilteringInfo.
Para acceder directamente al identificador de filtro y al identificador de cola, use las macros NET_BUFFER_LIST_RECEIVE_FILTER_ID y NET_BUFFER_LIST_RECEIVE_QUEUE_ID .
Las indicaciones de recepción de VMQ deben definir información de memoria compartida en el miembro SharedMemoryInfo de la estructura NET_BUFFER .
Nota Cuando se elimina una VMQ (por ejemplo, durante la migración en vivo de la máquina virtual), es posible que el controlador de miniporte reciba un NBL que contenga un valor QueueId no válido. Si esto sucede, el miniport debe omitir el identificador de cola no válido y usar 0 (la cola predeterminada) en su lugar. QueueId se encuentra en la parte NetBufferListFilteringInfo de los datos OOB de NBL y se recupera mediante la macro NET_BUFFER_LIST_RECEIVE_QUEUE_ID.
Para indicar que el puntero NET_BUFFER_SHARED_MEMORY en SharedMemoryInfo es válido, el controlador de miniport debe establecer la marca NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID en el parámetro ReceiveFlags de la función NdisMIndicateReceiveNetBufferLists . Para obtener más información sobre el diseño de los búferes de memoria compartida en los búferes de recepción de VMQ, consulte Memoria compartida en búferes de recepción.
La indicación de recepción debe incluir la siguiente información en la estructura NET_BUFFER_SHARED_MEMORY .
NextSharedMemorySegment
Puntero a la siguiente estructura NET_BUFFER_SHARED_MEMORY dentro de una lista vinculada de dichas estructuras, finalizada en NULL.
SharedMemoryHandle
Identificador de memoria compartida NDIS que devolvió NdisAllocateSharedMemory .
SharedMemoryOffset
Un desplazamiento, en bytes, hasta el comienzo de los datos desde el principio del búfer de memoria compartida.
SharedMemoryLength
Longitud, en bytes, del segmento de memoria compartida.
Si el controlador de protocolo sobreyacente establece la marca NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED en el miembro Flags de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS, cada NET_BUFFER incluye:
Dos MDL y las estructuras SharedMemoryInfo correspondientes.
Un búfer post-lookahead con espacio de reposición.
Si es necesario, el controlador de protocolo copia el contenido del búfer de lookahead en el área de reposición. Sin embargo, el espacio de reposición debe existir incluso si el paquete está completamente en el búfer de lookahead.
Si el controlador superior no establece el indicador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED, cada estructura NET_BUFFER incluye una única MDL y una única estructura SharedMemoryInfo.
El recuento de bytes y el desplazamiento de bytes en el MDL y los miembros DataLength y DataOffset de la estructura NET_BUFFER_DATA se establecen de la misma manera que se establecen para los controladores que no usan VMQ. Los miembros SharedMemoryLength y SharedMemoryOffset de la estructura SharedMemoryInfo se pueden establecer una vez durante la inicialización. El controlador de miniport no está obligado a actualizar los miembros SharedMemoryLength y SharedMemoryOffset para cada paquete que se recibe porque los controladores superiores y NDIS pueden usar el miembro NET_BUFFERDataLength y el número de bytes del MDL para determinar el inicio y el tamaño del paquete.
Nota A partir de NDIS 6.30 y Windows Server 2012, ya no se admite la división de datos de paquetes en búferes de lookahead independientes. El controlador de protocolo superior no establecerá el indicador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED.