Partilhar via


OID_RECEIVE_FILTER_SET_FILTER

Um driver sobreposto emite uma solicitação de método OID de OID_RECEIVE_FILTER_SET_FILTER para definir um filtro em um adaptador de rede.

O InformationBuffer membro da estrutura NDIS_OID_REQUEST contém um ponteiro para um buffer alocado pelo chamador. Esse buffer é formatado para conter o seguinte:

Após um retorno bem-sucedido da solicitação do método OID, o InformationBuffer membro da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_PARAMETERS. Se o driver sobreposto estiver criando um novo filtro de recebimento, o NDIS atualizará essa estrutura com um novo identificador de filtro.

Comentários

Os filtros de recebimento NDIS são usados nas seguintes interfaces NDIS:

A solicitação de método OID de OID_RECEIVE_FILTER_SET_FILTER é obrigatória para drivers de miniporta que suportam a coalescência de pacotes NDIS, SR-IOV ou interface VMQ.

O driver sobreposto inicializa a estrutura NDIS_RECEIVE_FILTER_PARAMETERS com sua configuração de filtro solicitada. O NDIS atribui um identificador de filtro no FilterId membro da estrutura NDIS_RECEIVE_FILTER_PARAMETERS e passa a solicitação de método para o driver de miniporta subjacente.

Cada filtro definido em uma fila de recebimento tem um identificador de filtro exclusivo para um adaptador de rede. Ou seja, os identificadores de filtro não são duplicados em filas diferentes gerenciadas pelo adaptador de rede. Quando o NDIS recebe uma solicitação OID para definir um filtro em uma fila de recebimento, ele verifica os parâmetros do filtro. Depois que o NDIS aloca os recursos necessários e o identificador de filtro, ele envia a solicitação OID para o adaptador de rede subjacente. Se o adaptador de rede puder alocar com êxito os recursos de software e hardware necessários para o filtro, ele concluirá a solicitação OID com um status de retorno de NDIS_STATUS_SUCCESS.

Observação A partir do NDIS 6.30, o filtro de recebimento coalescente de pacotes só é suportado na fila de recebimento padrão do adaptador de rede. Essa fila de recebimento tem um identificador de NDIS_DEFAULT_RECEIVE_QUEUE_ID.

O driver de miniporta deve manter os identificadores de filtro para os filtros de recebimento alocados. O NDIS usa o identificador de um filtro em solicitações OID posteriores para alterar os parâmetros do filtro de recebimento ou limpar o filtro de recebimento.

Depois que um driver de miniporta recebe uma solicitação de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE e tem filtros definidos na fila, a fila está no estado em execução. Nesse estado, o driver de miniporta pode iniciar indicações de pacotes na fila chamando NdisMIndicateReceiveNetBufferLists.

Diretrizes adicionais para a interface SR-IOV

Os seguintes pontos se aplicam aos drivers de miniporta que suportam a interface SR-IOV:

  • Para a interface SR-IOV, uma fila de recebimento é criada em uma porta virtual padrão ou não padrão (VPort).

    Observação A partir do Windows Server 2012, a interface SR-IOV suporta apenas a fila de recebimento padrão de um VPort.

    Depois que um VPort SR-IOV é alocado por meio de uma solicitação de conjunto OID de OID_NIC_SWITCH_CREATE_VPORT, os drivers sobrepostos podem definir filtros no VPort com solicitações OID de OID_RECEIVE_FILTER_SET_FILTER.

    Observação Somente o driver sobrejacente que alocou o VPort pode definir um filtro nesse VPort.

  • Como o VPort padrão sempre existe, os drivers sobrepostos sempre podem definir um filtro no VPort padrão.

  • Quando o VPort é criado, nenhum filtro de recebimento é definido nele. Nesse caso, o driver de miniporta não deve indicar nenhum pacote de recebimento nesse VPort antes que o driver de miniporta receba uma solicitação OID de OID_RECEIVE_FILTER_SET_FILTER para o VPort. Depois que essa solicitação OID é emitida, o driver de miniporta pode indicar pacotes nesse VPort.

    Observação Se o driver de miniporta indicar pacotes em um VPort enquanto estiver processando uma solicitação OID de OID_RECEIVE_FILTER_SET_FILTER, ele deverá concluir a solicitação OID e retornar um código de status NDIS_STATUS_SUCCESS.

Diretrizes adicionais para a interface VMQ

Os seguintes pontos se aplicam aos drivers de miniporta que suportam a interface VMQ:

  • Depois que uma fila de recebimento VMQ é alocada, os drivers sobrepostos podem definir filtros na fila de recebimento com solicitações OID de OID_RECEIVE_FILTER_SET_FILTER.

    Observação Somente o driver de protocolo que alocou uma fila de recebimento pode definir um filtro nessa fila.

  • Como a fila padrão sempre existe, os drivers sobrepostos sempre podem definir um filtro na fila padrão. Se o adaptador de rede oferecer suporte a uma fila de queda, os drivers sobrepostos poderão definir um filtro na fila de queda.

    Os drivers sobrepostos não possuem as filas padrão ou de queda. Portanto, todos os drivers de protocolo que estão vinculados a um adaptador de rede usam a fila padrão ou descartar.

  • Quando a fila de recebimento é criada, nenhum filtro de recebimento é definido nela. Nesse caso, o driver de miniporta não deve indicar nenhum pacote de recebimento nessa fila de recebimento antes que o driver de miniporta receba uma solicitação OID de OID_RECEIVE_FILTER_SET_FILTER para a fila de recebimento. Depois que essa solicitação OID é emitida, o driver de miniporta pode indicar pacotes nessa fila de recebimento.

    Observação Se o driver de miniporta indicar pacotes em uma fila enquanto está processando uma solicitação OID de OID_RECEIVE_FILTER_SET_FILTER, ele deverá concluir a solicitação OID e retornar um código de status NDIS_STATUS_SUCCESS.

Códigos de status de retorno

O driver de miniporta retorna um dos seguintes códigos de status para a solicitação de método OID de OID_RECEIVE_FILTER_SET_FILTER:

NDIS_STATUS_SUCCESS
O filtro foi definido na fila com êxito. O buffer de informações contém a estrutura de NDIS_RECEIVE_FILTER_PARAMETERS atualizada.

NDIS_STATUS_PENDING
O pedido está pendente de conclusão. O código de status final e os resultados serão passados para o manipulador de conclusão de solicitação OID do chamador.

NDIS_STATUS_INVALID_PARAMETER
Um ou mais dos parâmetros que o driver sobrejacente forneceu não era válido.

NDIS_STATUS_INVALID_LENGTH
O buffer de informações era muito curto. O NDIS define os DADOS. METHOD_INFORMATION. BytesNeeded membro na estrutura NDIS_OID_REQUEST para o tamanho mínimo de buffer necessário.

NDIS_STATUS_NOT_SUPPORTED
A versão NDIS do driver de miniporta é uma versão anterior à 6.20.

NDIS_STATUS_FAILURE
O pedido foi rejeitado por outros motivos.

Requerimentos

Versão

Suportado no NDIS 6.20 e posterior.

Cabeçalho

Ntddndis.h (inclui Ndis.h)

Ver também

NdisMIndicateReceiveNetBufferLists

NDIS_OID_REQUEST

NDIS_RECEIVE_FILTER_PARAMETERS

NET_BUFFER_LIST

NET_BUFFER_LIST_RECEIVE_FILTER_ID

OID_NIC_SWITCH_CREATE_VPORT

OID_RECEIVE_FILTER_CLEAR_FILTER

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE