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:

  1. 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.

  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.

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

    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:

  1. 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.

  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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

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