Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um adaptador de rede indica um pacote recebido em uma fila somente se ele passar por todos os testes dos campos de filtro para um filtro definido nessa fila. Para obter mais informações sobre testes de filtro, consulte Operações de filtro VMQ.
Se o driver de protocolo sobrejacente definir o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION no membro Flags da estrutura NDIS_RECEIVE_QUEUE_PARAMETERS, o driver de miniporto não deverá misturar estruturas de NET_BUFFER_LIST para outras filas de recebimento com as estruturas de NET_BUFFER_LIST para essa fila em uma única chamada para a função NdisMIndicateReceiveNetBufferLists. Além disso, o driver deve definir a flag NDIS_RECEIVE_FLAGS_SINGLE_QUEUE no parâmetro ReceiveFlags da função NdisMIndicateReceiveNetBufferLists.
Se NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION não tiver sido definido, os drivers de miniporto podem encadear estruturas NET_BUFFER_LIST para quadros de diferentes filas de VM e indicá-las em uma única chamada para NdisMIndicateReceiveNetBufferLists. Nesse caso, não é necessário que a lista vinculada indicada de estruturas de NET_BUFFER_LIST seja classificada pelo número da fila. As estruturas NET_BUFFER_LIST para filas diferentes não precisam ser agrupadas.
Quando um driver de protocolo define NDIS_RETURN_FLAGS_SINGLE_QUEUE e retorna buffers de recebimento, todas as estruturas de NET_BUFFER_LIST no parâmetro NetBufferLists da função NdisReturnNetBufferLists devem pertencer à mesma fila de VM. No entanto, os drivers de protocolo não precisam retornar todas as estruturas NET_BUFFER_LIST que foram indicadas em uma única chamada para a função ProtocolReceiveNetBufferLists em uma única chamada para NdisReturnNetBufferLists. Além disso, a lista retornada pode incluir NET_BUFFER_LIST estruturas de indicações de recebimento múltiplas pertencentes à mesma fila de VM.
Os drivers de protocolo definem o bit NDIS_RETURN_FLAGS_SINGLE_QUEUE no parâmetro ReturnFlags de NdisReturnNetBufferLists para indicar que todas as estruturas de NET_BUFFER_LIST retornadas pertencem à mesma fila de VM.
As indicações de recebimento do VMQ devem incluir as seguintes informações de fora de banda (OOB) no membro NetBufferListInfo das estruturas NET_BUFFER_LIST.
Especifique o identificador de fila na informação NetBufferListFilteringInfo.
Defina o identificador de filtro nas informações NetBufferListFilteringInfo como zero.
As informações de NetBufferListFilteringInfo são especificadas em uma estrutura NDIS_NET_BUFFER_LIST_FILTERING_INFO . Para acessar a estrutura NDIS_NET_BUFFER_LIST_FILTERING_INFO nos dados OOB NET_BUFFER_LIST, um driver NDIS chama a macro NET_BUFFER_LIST_INFO e especifica o tipo de informação NetBufferListFilteringInfo.
Para acessar diretamente o identificador de filtro e o identificador de fila, utilize as macros NET_BUFFER_LIST_RECEIVE_FILTER_ID e NET_BUFFER_LIST_RECEIVE_QUEUE_ID.
As indicações de recebimento de VMQ devem definir informações de memória compartilhada no membro SharedMemoryInfo da estrutura NET_BUFFER .
Nota Quando um VMQ é excluído (por exemplo, durante a migração dinâmica da VM), é possível que o driver de miniporto receba um NBL que contenha um valor QueueId inválido. Se isso acontecer, o miniporto deverá ignorar a ID da fila inválida e usar 0 (a fila padrão). A QueueId é encontrada na parte NetBufferListFilteringInfo dos dados OOB da NBL e é recuperada usando a macro NET_BUFFER_LIST_RECEIVE_QUEUE_ID .
Para indicar que o ponteiro NET_BUFFER_SHARED_MEMORY em SharedMemoryInfo é válido, o driver de miniporto deve definir o sinalizador NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID no parâmetro ReceiveFlags da função NdisMIndicateReceiveNetBufferLists. Para obter mais informações sobre o layout de buffers de memória compartilhados em buffers de recebimento de VMQ, consulte Memória Compartilhada em Buffers de Recebimento.
A indicação de recebimento deve incluir as informações a seguir na estrutura de NET_BUFFER_SHARED_MEMORY .
NextSharedMemorySegment
Um ponteiro para a próxima estrutura NET_BUFFER_SHARED_MEMORY em uma lista encadeada terminada por NULL dessas estruturas.
SharedMemoryHandle
Um identificador de memória compartilhada do NDIS que NdisAllocateSharedMemory retornou.
SharedMemoryOffset
Um deslocamento, em bytes, a partir dos dados no início do buffer de memória compartilhado.
SharedMemoryLength
O comprimento, em bytes, do segmento de memória compartilhada.
Se o driver de protocolo sobreposto definir o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED no membro Flags da estrutura NDIS_RECEIVE_QUEUE_PARAMETERS, cada NET_BUFFER incluirá:
Dois MDLs e estruturas SharedMemoryInfo correspondentes.
Um buffer de pós-antecipação com espaço para backfill.
Se necessário, o driver de protocolo copia o conteúdo do buffer lookahead para a área de preenchimento. No entanto, o espaço de backfill deve existir mesmo se o pacote estiver inteiramente no buffer lookahead.
Se o driver sobrejacente não definir o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED, cada estrutura NET_BUFFER contém um único MDL e uma única estrutura SharedMemoryInfo.
A contagem de bytes e o deslocamento de bytes no MDL e os membros DataLength e DataOffset na estrutura NET_BUFFER_DATA são configurados da mesma maneira que para drivers que não usam VMQ. Os membros SharedMemoryLength e SharedMemoryOffset na estrutura SharedMemoryInfo podem ser definidos uma vez durante a inicialização. O driver de miniport não é obrigado a atualizar os membros SharedMemoryLength e SharedMemoryOffset para cada pacote recebido, porque os drivers subjacentes e o NDIS podem usar o membro DataLength do NET_BUFFER e a contagem de bytes do MDL para determinar o início e o tamanho do pacote.
Nota A partir do NDIS 6.30 e do Windows Server 2012, não há mais suporte para a divisão de dados de pacote em buffers lookahead separados. O driver de protocolo superior não definirá o sinalizador de NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED.