Determinando recursos de filtragem de recebimento
Este tópico descreve como os drivers NDIS e overlying determinam os recursos de filtragem de recebimento de um adaptador de rede que dá suporte à virtualização de E/S de raiz única (SR-IOV). Este tópico inclui as informações a seguir:
Recursos de filtragem de recebimento de relatórios durante MiniportInitializeEx
Consultando recursos de filtragem de recebimento por drivers overlying
Nota Somente o driver de miniporto para a PF (Função Física) PCI Express (PCIe) de um adaptador de rede SR-IOV pode relatar recursos de filtragem de recebimento. Os drivers de miniport para VFs (PcIe Virtual Functions) não devem relatar os recursos de filtragem de recebimento do adaptador SR-IOV.
Recursos de filtragem de recebimento de relatórios durante MiniportInitializeEx
Quando o NDIS chama a função MiniportInitializeEx do driver de miniport do PF, o driver fornece os seguintes recursos de filtragem de recebimento:
O hardware completo recebe recursos de filtragem que o adaptador de rede pode dar suporte.
Os recursos de filtragem de recebimento para as interfaces atualmente habilitadas no adaptador de rede.
O driver de miniporte relata os recursos completos de filtragem de recebimento de hardware do adaptador de rede subjacente por meio de uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES inicializada da seguinte maneira:
O driver de miniporta inicializa o membro Header . O driver define o membro Tipo de Cabeçalho como NDIS_OBJECT_TYPE_DEFAULT.
A partir do NDIS 6.30, o driver de miniporto define o membro Revision de Header como NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 e o membro Size como NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.
O driver de miniporte define os outros membros da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES para o intervalo de valores para os recursos de filtragem de recebimento do adaptador de rede SR-IOV. Por exemplo, o driver de miniporto define os sinalizadores apropriados no SupportedFilterTests para especificar operações de teste de filtro compatíveis com o driver de miniporte.
Além do SR-IOV, a filtragem de recebimento também é usada nas seguintes interfaces:
Agrupamento de pacotes NDIS. Para obter mais informações sobre como usar filtros de recebimento nessa interface, consulte Gerenciando filtros de recebimento de agrupamento de pacotes.
VMQ (Fila de Máquinas Virtuais). Para obter mais informações sobre como usar filtros de recebimento nessa interface, consulte Configuração e limpeza de filtros VMQ.
Se o driver de miniporto der suporte a qualquer uma dessas interfaces, ele também deverá definir os membros da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES para o intervalo de valores de capacidade de filtragem de recebimento específicos para a interface. Por exemplo, se o driver der suporte à união de pacotes NDIS e SR-IOV, ele deverá definir o sinalizador NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE no membro SupportedQueueProperties .
O driver de miniporte relata os recursos de filtragem de recebimento habilitados no momento do adaptador de rede subjacente por meio de uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES inicializada da seguinte maneira:
O driver de miniporta inicializa o membro Header . O driver define o membro Tipo de Cabeçalho como NDIS_OBJECT_TYPE_DEFAULT.
A partir do NDIS 6.30, o driver de miniporto define o membro Revision de Header como NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 e o membro Size como NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.
O driver de miniporto define os outros membros da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES para o intervalo de valores para os recursos de filtragem de recebimento das interfaces que estão habilitadas no momento. Por exemplo, se a união de pacotes NDIS estiver habilitada, o driver só deverá definir os membros específicos para essa tecnologia.
As interfaces que usam a filtragem de recebimento são habilitadas ou desabilitadas por meio de palavras-chave INF padronizadas. Para obter mais informações sobre como a união de pacotes NDIS está habilitada, consulte Palavras-chave INF padronizadas para agrupamento de pacotes. Para obter mais informações sobre como SR-IOV e VMQ estão habilitados, consulte Manipulando palavras-chave SR-IOV, VMQ e RSS Standardized INF.
Quando o NDIS chama a função MiniportInitializeEx do driver de miniport, o driver registra os recursos de filtragem de recebimento do adaptador de rede seguindo estas etapas:
O driver de miniporta inicializa uma estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
O driver de miniporto define o membro HardwareReceiveFilterCapabilities como o endereço de uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES . Essa estrutura foi inicializada anteriormente com os recursos completos de filtragem de recebimento de hardware do adaptador de rede.
Se a união de pacotes VMQ, SR-IOV e NDIS estiverem desabilitadas no momento no adaptador de rede, o driver de miniporto definirá o membro CurrentReceiveFilterCapabilities como NULL.
Se a união de pacotes VMQ, SR-IOV ou NDIS estiver habilitada no momento no adaptador de rede, o driver de miniporte deverá fazer o seguinte:
O driver de miniporte deve inicializar outra estrutura NDIS_RECEIVE_FILTER_CAPABILITIES com os recursos atuais de filtragem de recebimento para as interfaces atualmente habilitadas no adaptador de rede.
Se a interface SR-IOV estiver habilitada, haverá situações em que o driver de miniporto deve definir os membros da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES com os mesmos valores ou valores diferentes. Isso ocorre porque a interface SR-IOV fornece um mecanismo de enfileiramento semelhante ao VMQ, mas usa VPorts (portas virtuais) em vez de filas de recebimento de VM.
Por exemplo, o driver de miniporto deve definir o sinalizador NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED no membro EnabledFilterTypes se a interface VMQ ou SR-IOV estiver habilitada. No entanto, o driver de miniporto deverá definir o membro NumQueues como zero se a interface SR-IOV estiver habilitada e um valor diferente de zero se a interface VMQ estiver habilitada.
O driver de miniporto define o membro CurrentReceiveFilterCapabilities como o endereço da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES que contém os recursos atuais de filtragem de recebimento para a interface atualmente habilitada.
Se a união de pacotes VMQ, SR-IOV ou NDIS estiver habilitada no momento no adaptador de rede, o driver de miniporto definirá o membro HardwareReceiveFilterCapabilities como o endereço de uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES . Essa estrutura foi inicializada anteriormente com os recursos de filtragem de recebimento habilitados no momento do adaptador de rede.
O driver chama NdisMSetMiniportAttributes e define o parâmetro MiniportAttributes como um ponteiro para a estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Para obter mais informações sobre o processo de inicialização do adaptador, consulte Inicializando um adaptador de miniporto.
Consultando recursos de filtragem de recebimento por drivers overlying
O NDIS passa os recursos de filtragem de recebimento habilitados no momento do adaptador de rede para drivers overlying que se associam ao adaptador de rede da seguinte maneira:
Quando o NDIS chama a função FilterAttach de um driver de filtro sobressalente, o NDIS passa os recursos de comutador NIC do adaptador de rede por meio do parâmetro AttachParameters . Esse parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS . O membro ReceiveFilterCapabilities dessa estrutura contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES .
Quando o NDIS chama a função ProtocolBindAdapterEx de um driver de protocolo sobreposto, o NDIS passa os recursos de comutador NIC do adaptador de rede por meio do parâmetro BindParameters . Esse parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS . O membro ReceiveFilterCapabilities dessa estrutura contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES .
O NDIS também retorna a estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES quando lida com solicitações de consulta OID (identificador de objeto) de OID_RECEIVE_FILTER_CURRENT_CAPABILITIES e OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES emitidas por drivers de filtro ou protocolo sobrepostos.