Determinando as funcionalidades de VMQ de um adaptador de rede
O NDIS fornece a interface para determinar os recursos VMQ de um adaptador de rede, como:
Os recursos genéricos de filtragem de um adaptador de rede.
Recursos de fila de VM com suporte.
Suporte do Lookahead para permitir a divisão da memória de dados de rede em dois buffers separados.
Nota A partir do NDIS 6.30, não há mais suporte para a divisão de dados de pacotes em buffers lookahead separados.
Os drivers de miniporto fornecem as seguintes informações ao NDIS durante a inicialização do adaptador de rede:
Os recursos de hardware do VMQ aos quais o adaptador de rede pode dar suporte.
Os recursos do VMQ que estão atualmente habilitados.
Os recursos globais de filtragem de recebimento habilitados ou desabilitados em um adaptador de rede.
Drivers e aplicativos sobrepostos podem usar as seguintes solicitações de consulta OID para obter os recursos do adaptador de rede.
OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES
OID_RECEIVE_FILTER_CURRENT_CAPABILITIES
OID_RECEIVE_FILTER_GLOBAL_PARAMETERS
O NDIS manipula essas solicitações de consulta OID para drivers de miniport. Portanto, a consulta não é solicitada para drivers de miniport. O NDIS relata que os recursos de VMQ de recebimento atualmente habilitados de um adaptador de rede durante a inicialização. Portanto, os drivers overlying não precisam consultar esses OIDs.
A estrutura NDIS_RECEIVE_FILTER_CAPABILITIES especifica os recursos de filtragem de um adaptador de rede. Essa estrutura é usada das seguintes maneiras:
Quando o NDIS chama a função MiniportInitializeEx , o driver de miniporte registra seus recursos de filtragem inicializando uma estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES . Em seguida, o driver define o membro HardwareReceiveFilterCapabilities da estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES para apontar para a estrutura NDIS_RECEIVE_FILTER_CAPABILITIES . Em seguida, o driver chama a função NdisMSetMiniportAttributes e define o parâmetro MiniportAttributes como um ponteiro para a estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Um driver de protocolo sobreposto recebe a estrutura NDIS_RECEIVE_FILTER_CAPABILITIES na estrutura NDIS_BIND_PARAMETERS quando o NDIS chama a função ProtocolBindAdapterEx do driver.
Um driver de filtro sobressalto recebe a estrutura NDIS_RECEIVE_FILTER_CAPABILITIES na estrutura NDIS_FILTER_ATTACH_PARAMETERS quando o NDIS chama a função FilterAttach do driver.
Os drivers em excesso recebem a estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES emitindo uma solicitação de consulta OID de OID_RECEIVE_FILTER_CURRENT_CAPABILITIES ou OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES. Os membros HardwareReceiveFilterCapabilities e CurrentReceiveFilterCapabilities apontam para uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES .
A estrutura NDIS_RECEIVE_FILTER_CAPABILITIES inclui as seguintes informações:
EnabledFilterTypes
Os tipos dos filtros de recebimento com suporte. O sinalizador NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED especifica que os filtros de VMQ (fila de máquinas virtuais) estão habilitados.
EnabledQueueTypes
Os tipos de filas de recebimento com suporte. O sinalizador NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED especifica que as filas de VM (máquina virtual) estão habilitadas.
NumQueues
O número de filas de recebimento compatíveis com o adaptador de rede. Para dar suporte ao VMQ, esse número deve ser igual ou menor que o número de endereços MAC unicast compatíveis com a NIC. Esse número não deve incluir a fila padrão.
Nota O número de endereços MAC unicast ou filas de VM compatíveis com um adaptador de rede não inclui o endereço MAC da NIC associada.
SupportedQueueProperties
As propriedades da fila compatíveis com o adaptador de rede. O sinalizador NDIS_RECEIVE_FILTER_VM_QUEUE_SUPPORTED especifica que o adaptador de rede fornece os requisitos mínimos para dar suporte à filtragem de VMQ. Uma NIC compatível com VMQ deve fornecer uma entrada de tabela MSI-X para cada fila de recebimento. Portanto, um driver de miniporto VMQ deve definir o sinalizador NDIS_RECEIVE_FILTER_MSI_X_SUPPORTED.
SupportedFilterTests
As operações de teste de filtro compatíveis com um driver de miniporto. Por exemplo, o adaptador de rede dá suporte ao teste do campo de cabeçalho selecionado para determinar se ele é igual a um determinado valor. Um driver de miniporto VMQ deve definir o sinalizador de NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED.
SupportedHeaders
Os tipos de cabeçalhos de pacote de rede que um driver de miniporto pode inspecionar. Por exemplo, o adaptador de rede pode inspecionar o cabeçalho MAC de um pacote de rede. O cabeçalho MAC inclui o tipo de pacote, endereços MAC de destino e de origem, o identificador de VLAN e os campos de marca de prioridade. Um driver de miniporto VMQ deve definir o sinalizador de NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED.
SupportedMacHeaderFields
Os tipos de campos de cabeçalho MAC que um driver de miniporto pode inspecionar. Um driver de miniporto VMQ deve definir o sinalizador de NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED.
MaxMacHeaderFilters
O número máximo de filtros de cabeçalho MAC compatíveis com o driver de miniporto. Deve haver pelo menos tantos filtros de cabeçalho quanto há filas de VM.
MaxQueueGroups
Esse membro é reservado para o NDIS.
MaxQueuesPerQueueGroup
Esse membro é reservado para o NDIS.
MinLookaheadSplitSize
O tamanho mínimo, em bytes, que o adaptador de rede dá suporte para segmentos de pacote lookahead.
Nota A partir do NDIS 6.30, não há mais suporte para a divisão de dados de pacotes em buffers lookahead separados. Os drivers de miniport que dão suporte ao NDIS 6.30 ou versões posteriores devem definir esse membro como zero.
MaxLookaheadSplitSize
O tamanho máximo, em bytes, que o adaptador de rede dá suporte para segmentos de pacote lookahead.
Nota A partir do NDIS 6.30, não há mais suporte para a divisão de dados de pacotes em buffers lookahead separados. Os drivers de miniport que dão suporte ao NDIS 6.30 ou versões posteriores devem definir esse membro como zero.
Após um retorno bem-sucedido da consulta OID OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES , o membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES. Esses recursos podem incluir recursos de hardware VMQ que estão atualmente desabilitados pelas configurações de arquivo INF ou por meio da página Propriedades avançadas . Para obter mais informações sobre as configurações de arquivos INF do VMQ, consulte Entradas inf padrão do VMQ.
Os drivers de miniporto NDIS fornecem os recursos de hardware de filtragem de recebimento durante a inicialização no membro HardwareReceiveFilterCapabilities da estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Após um retorno bem-sucedido da consulta OID OID_RECEIVE_FILTER_CURRENT_CAPABILITIES , o membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES . Esses recursos incluem os recursos de VMQ habilitados no momento.
Os drivers de miniporto NDIS fornecem os recursos de filtragem de recebimento atualmente habilitados durante a inicialização no membro CurrentReceiveFilterCapabilities da estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
O NDIS relata os recursos de filtragem de recebimento atualmente habilitados de um adaptador de rede subjacente para drivers de protocolo sobressociáveis no membro ReceiveFilterCapabilities da estrutura NDIS_BIND_PARAMETERS durante a operação de associação.
A estrutura NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS é usada no OID de consulta OID_RECEIVE_FILTER_GLOBAL_PARAMETERS para obter as configurações atuais do filtro de recebimento global.
NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS inclui as seguintes informações:
EnabledFilterTypes
Os tipos de filtros de recebimento habilitados. O sinalizador NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED especifica que os filtros de VMQ (fila de máquinas virtuais) estão habilitados.
EnabledQueueTypes
Os tipos de filas de recebimento habilitadas. O sinalizador NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED especifica que as filas de VM (máquina virtual) estão habilitadas.
Após um retorno bem-sucedido da consulta OID OID_RECEIVE_FILTER_GLOBAL_PARAMETERS , o membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura de NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS . A estrutura NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS especifica os recursos de filtragem de recebimento habilitados ou desabilitados em um adaptador de rede.
Os drivers de protocolo NDIS usam OID_RECEIVE_FILTER_GLOBAL_PARAMETERS para consultar os parâmetros de configuração globais atuais para receber filtragem em um adaptador de rede. Por exemplo, os drivers de protocolo podem usar essa OID para determinar se os tipos de filtros de recebimento ou as filas de recebimento estão habilitados ou desabilitados.