Partilhar via


Determinando os recursos de filtragem de recebimento

Este tópico descreve como o NDIS e os drivers sobrepostos determinam os recursos de filtragem de recebimento de um adaptador de rede que oferece suporte à virtualização de E/S de raiz única (SR-IOV). Este tópico contém as seguintes informações:

Relatórios recebem recursos de filtragem durante MiniportInitializeEx

Consulta das Capacidades de Filtragem de Receção por Drivers Sobrejacentes

Observação Somente o driver de miniporta para a função física (PF) PCI Express (PCIe) de um adaptador de rede SR-IOV pode relatar recursos de filtragem de recebimento. Os drivers de miniporta para PCIe Virtual Functions (VFs) não devem relatar os recursos de filtragem de recebimento do adaptador SR-IOV.

Relatar capacidades de filtragem recebidas durante MiniportInitializeEx

Quando o NDIS chama a função MiniportInitializeEx do driver de miniporta PF , o driver fornece os seguintes recursos de filtragem de recebimento:

  • O hardware completo recebe recursos de filtragem que o adaptador de rede pode suportar.

  • Os recursos de filtragem de recebimento para as interfaces que estão atualmente habilitadas no adaptador de rede.

O driver de miniporta relata os recursos completos de filtragem de recebimento de hardware do adaptador de rede subjacente por meio de uma estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES inicializada da seguinte maneira:

  1. O miniport driver inicializa o membro Header . O driver define o membro Tipo do Cabeçalho como NDIS_OBJECT_TYPE_DEFAULT.

    A partir do NDIS 6.30, o driver de miniporta define o membro Revisão do Cabeçalho como NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 e o membro Tamanho como NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.

  2. O driver de miniporta define os outros membros da estrutura de 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 miniporta define as flags apropriadas no SupportedFilterTests para especificar operações de teste de filtro que o driver de miniporta suporta.

  3. Além do SR-IOV, a filtragem de recebimento também é usada nas seguintes interfaces:

    Se o driver de miniporta suportar qualquer uma dessas interfaces, ele também deve definir os membros da estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES para o intervalo de valores de capacidade de filtragem de recebimento que são específicos para a interface. Por exemplo, se o driver oferecer suporte à coalescência 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 da miniporta indica as capacidades de filtragem de receção atualmente ativadas do adaptador de rede subjacente por meio de uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES inicializada da forma seguinte:

  1. O controlador de miniporta inicializa o membro Header. O driver define o membro do Tipo do Cabeçalho como NDIS_OBJECT_TYPE_DEFAULT.

    A partir do NDIS 6.30, o driver de miniporta define o membro Revisão de de Cabeçalho como NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 e o membro Tamanho como NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.

  2. O driver de miniporta define os outros membros da estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES para o intervalo de valores das capacidades de filtragem de receção das interfaces que estão atualmente habilitadas. Por exemplo, se a coalescência de pacotes NDIS estiver habilitada, o driver deverá definir apenas os membros específicos dessa tecnologia.

    As interfaces que usam filtragem de recebimento são habilitadas ou desabilitadas por meio de palavras-chave INF padronizadas. Para obter mais informações sobre como a agregação de pacotes NDIS é ativada, consulte Palavras-chave INF padronizadas para agregação de pacotes. Para obter mais informações sobre como SR-IOV e o VMQ são ativados, consulte Gestão das Palavras-chave Padronizadas INF para SR-IOV, VMQ e RSS.

Quando o NDIS chama a função MiniportInitializeEx do driver de miniport, o driver regista as capacidades de filtragem de recepção do adaptador de rede seguindo estas etapas:

  1. O driver de miniporta inicializa uma estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES.

    O driver de miniporta atribui o membro HardwareReceiveFilterCapabilities ao 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.

  2. Se a coalescência de pacotes VMQ, SR-IOV e NDIS estiver atualmente desabilitada no adaptador de rede, o driver de miniporta definirá o membro CurrentReceiveFilterCapabilities como NULL.

  3. Se a coalescência de pacotes VMQ, SR-IOV ou NDIS estiver atualmente habilitada no adaptador de rede, o driver de miniporta deverá fazer o seguinte:

    • O driver de miniporta deve inicializar outra estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES com os recursos de filtragem de recebimento atuais para as interfaces que estão atualmente habilitadas no adaptador de rede.

      Se a interface SR-IOV estiver ativada, há situações em que o driver de miniporta deve definir os membros da estrutura NDIS_RECEIVE_FILTER_CAPABILITIES para os mesmos valores ou valores diferentes. Isso ocorre porque a interface SR-IOV fornece um mecanismo de enfileiramento semelhante ao VMQ, mas usa portas virtuais (VPorts) em vez de filas de recebimento de VM.

      Por exemplo, o driver de miniporta deve definir o sinalizador NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED no membro EnabledFilterTypes se estiver habilitada a VMQ ou a interface SR-IOV. No entanto, o driver de miniporta deve 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 miniporta define o membro CurrentReceiveFilterCapabilities para o endereço da estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES que contém os recursos de filtragem de recebimento atuais para a interface habilitada no momento.

  4. Se a coalescência de pacotes VMQ, SR-IOV ou NDIS estiver habilitada no momento no adaptador de rede, o driver de miniporta definirá o membro HardwareReceiveFilterCapabilities para o endereço de uma estrutura de NDIS_RECEIVE_FILTER_CAPABILITIES. Esta estrutura foi anteriormente inicializada com as capacidades de filtragem de receção atualmente habilitadas do adaptador de rede.

  5. 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 miniporta.

Consultando capacidades de filtragem de recebimento por drivers superiores

O NDIS passa as capacidades de filtragem de recebimento atualmente habilitadas do adaptador de rede para os drivers superiores que fazem interface com o adaptador de rede da seguinte maneira:

  • Quando o NDIS chama a função FilterAttach de um driver de filtro sobreposto, o NDIS passa os recursos do comutador NIC do adaptador de rede através do parâmetro AttachParameters. Este parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS. O membro ReceiveFilterCapabilities desta 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 transmite as capacidades do comutador NIC do adaptador de rede através do parâmetro BindParameters. Este parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS. O ReceiveFilterCapabilities membro desta estrutura contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_CAPABILITIES.

O NDIS também retorna a estrutura NDIS_RECEIVE_FILTER_CAPABILITIES quando lida com solicitações de consulta de identificador de objeto (OID) de OID_RECEIVE_FILTER_CURRENT_CAPABILITIES e OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES emitidas por drivers de protocolo ou filtro sobrepostos.