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 membro InformationBuffer 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 de método OID, o membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura de NDIS_RECEIVE_FILTER_PARAMETERS . Se o driver sobressociente estiver criando um novo filtro de recebimento, o NDIS atualizará essa estrutura com um novo identificador de filtro.

Comentários

Os filtros de recebimento do 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 miniport que dão suporte à união de pacotes NDIS, SR-IOV ou interface VMQ.

O driver overlying inicializa a estrutura de NDIS_RECEIVE_FILTER_PARAMETERS com sua configuração de filtro solicitada. O NDIS atribui um identificador de filtro no membro FilterId da estrutura NDIS_RECEIVE_FILTER_PARAMETERS e passa a solicitação de método para o driver de miniporto 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 de 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 uma status de retorno de NDIS_STATUS_SUCCESS.

Nota A partir do NDIS 6.30, o filtro de recebimento de agrupamento de pacotes só tem suporte 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 miniporto 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 de filtro de recebimento ou limpar o filtro de recebimento.

Depois que um driver de miniporto recebe uma solicitação 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 miniporto pode iniciar indicações de pacotes na fila chamando NdisMIndicateReceiveNetBufferLists.

Diretrizes adicionais para a interface SR-IOV

Os seguintes pontos se aplicam a drivers de miniport que dão suporte à 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).

    Nota Começando com Windows Server 2012, a interface SR-IOV dá suporte apenas à fila de recebimento padrão de um VPort.

    Depois que um VPort SR-IOV é alocado por meio de uma solicitação de conjunto de 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.

    Nota Somente o driver overlying que alocou o VPort pode definir um filtro nesse VPort.

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

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

    Nota Se o driver de miniporto 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 NDIS_STATUS_SUCCESS status.

Diretrizes adicionais para a interface VMQ

Os pontos a seguir se aplicam a drivers de miniport que dão suporte à interface VMQ:

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

    Nota 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 subjacentes sempre podem definir um filtro na fila padrão. Se o adaptador de rede der suporte a uma fila suspensa, os drivers overlying poderão definir um filtro na fila suspensa.

    Os drivers em excesso não possuem as filas padrão ou suspensas. Portanto, todos os drivers de protocolo associados a um adaptador de rede usam a fila padrão ou suspensa.

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

    Nota Se o driver de miniporto indicar pacotes em uma fila 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 NDIS_STATUS_SUCCESS status.

Retornar códigos de status

O driver de miniporto 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
A solicitação está pendente de conclusão. O código de status final e os resultados serão passados para o manipulador de conclusão da solicitação OID do chamador.

NDIS_STATUS_INVALID_PARAMETER
Um ou mais dos parâmetros que o driver sobressociante 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. Membro BytesNeeded na estrutura NDIS_OID_REQUEST para o tamanho mínimo do buffer necessário.

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

NDIS_STATUS_FAILURE
A solicitação falhou por outros motivos.

Requisitos

Versão

Com suporte no NDIS 6.20 e posterior.

Cabeçalho

Ntddndis.h (inclua Ndis.h)

Confira 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