Compartilhar via


estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS (ntddndis.h)

A estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica o critério de teste de filtro para um campo em um cabeçalho de pacote de rede.

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

Sintaxe

typedef struct _NDIS_RECEIVE_FILTER_FIELD_PARAMETERS {
  NDIS_OBJECT_HEADER       Header;
  ULONG                    Flags;
  NDIS_FRAME_HEADER        FrameHeader;
  NDIS_RECEIVE_FILTER_TEST ReceiveFilterTest;
  union {
    NDIS_MAC_HEADER_FIELD  MacHeaderField;
    NDIS_ARP_HEADER_FIELD  ArpHeaderField;
    NDIS_IPV4_HEADER_FIELD IPv4HeaderField;
    NDIS_IPV6_HEADER_FIELD IPv6HeaderField;
    NDIS_UDP_HEADER_FIELD  UdpHeaderField;
  } HeaderField;
  _HEADER_FIELD            _HEADER_FIELD;
  union {
    UCHAR   FieldByteValue;
    USHORT  FieldShortValue;
    ULONG   FieldLongValue;
    ULONG64 FieldLong64Value;
    UCHAR   FieldByteArrayValue[16];
  } FieldValue;
  _FIELD_VALUE             _FIELD_VALUE;
  union {
    UCHAR   ResultByteValue;
    USHORT  ResultShortValue;
    ULONG   ResultLongValue;
    ULONG64 ResultLong64Value;
    UCHAR   ResultByteArrayValue[16];
  } ResultValue;
  _RESULT_VALUE            _RESULT_VALUE;
} NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, *PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS;

Membros

Header

A estrutura NDIS_OBJECT_HEADER para a estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . O driver define o membro Type da estrutura especificada por Header como NDIS_OBJECT_TYPE_DEFAULT.

Para indicar a versão da estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS , o driver define o membro Revision como um dos seguintes valores:

Valor Significado
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
Adicionados membros adicionais à união HeaderField para NDIS 6.30.

O driver define o membro Size como NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
Versão original do NDIS 6.20.

O driver define o membro Size como NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1.

Flags

Um OR bit a bit de sinalizadores. Os sinalizadores a seguir são válidos para o OID_RECEIVE_FILTER_SET_FILTER OID.

Valor Significado
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
Se esse sinalizador estiver definido, o adaptador de rede deverá indicar apenas os pacotes recebidos que passam pelos seguintes critérios:
  • O endereço MAC (controle de acesso à mídia) do pacote corresponde ao teste de campo de cabeçalho MAC especificado.
  • O pacote não contém uma marca VLAN ou tem uma marca VLAN com uma ID zero.
Para obter mais informações sobre esse sinalizador, consulte a seção Comentários.
Nota Se um driver sobreposto definir um filtro de endereço MAC e um filtro de identificador de VLAN com uma solicitação OID de OID_RECEIVE_FILTER_SET_FILTER, ele não definirá esse sinalizador em nenhum dos campos de filtro. Nesse caso, o driver de miniporto deve indicar pacotes que correspondam ao endereço MAC especificado e ao identificador de VLAN. Ou seja, o driver de miniporte não deve indicar pacotes com um endereço MAC correspondente que tenham um identificador VLAN zero ou que sejam pacotes não registrados.
 

FrameHeader

O tipo de cabeçalho no quadro de dados de rede.

ReceiveFilterTest

O tipo de teste a ser executado para o filtro de recebimento.

HeaderField

O tipo de campo em um cabeçalho. O tipo de campo (por exemplo, NDIS_MAC_HEADER_FIELD) corresponde ao tipo de cabeçalho especificado no membro FrameHeader .

Essa união contém os seguintes membros:

HeaderField.MacHeaderField

O tipo de campo em um cabeçalho MAC.

HeaderField.ArpHeaderField

O tipo de campo em um cabeçalho ARP (Protocolo de Resolução de Endereços).

HeaderField.IPv4HeaderField

Um NDIS_IPV4_HEADER_FIELD valor de enumeração que especifica o tipo de campo em um cabeçalho ip versão 4 (IPv4).

HeaderField.IPv6HeaderField

Um valor de enumeração NDIS_IPV6_HEADER_FIELD que especifica o tipo de campo em um cabeçalho ip versão 6 (IPv6).

HeaderField.UdpHeaderField

O tipo de campo em um cabeçalho UDP (User Datagram Protocol).

_HEADER_FIELD

FieldValue

O valor que o adaptador de miniporto compara com o valor do campo de cabeçalho correspondente em pacotes de entrada. O local do valor do campo de cabeçalho é determinado pelo tipo de campo especificado no membro HeaderField .

Para obter mais informações, consulte a seção Comentários.

Essa união contém os seguintes membros:

FieldValue.FieldByteValue

Um valor UCHAR a ser comparado com um campo em um pacote de rede.

Nota Se o membro MacHeaderField especificar um valor de enumeração NdisMacHeaderFieldPacketType , esse membro conterá um valor de enumeração NDIS_MAC_PACKET_TYPE .
 

FieldValue.FieldShortValue

Um valor USHORT a ser comparado com um campo em um pacote de rede.

FieldValue.FieldLongValue

Um valor ULONG a ser comparado com um campo em um pacote de rede.

FieldValue.FieldLong64Value

Um valor ULONG64 a ser comparado com um campo em um pacote de rede.

FieldValue.FieldByteArrayValue[16]

Uma matriz UCHAR a ser comparada com um campo em um pacote de rede.

_FIELD_VALUE

ResultValue

Uma união que contém um valor de resultado de teste.

Se o membro ReceiveFilterTest estiver definido como NdisReceiveFilterTestMaskEqual, o adaptador de rede primeiro calculará um resultado do valor no membro FieldValue e do valor do campo de cabeçalho, conforme especificado pelo membro HeaderField . Em seguida, o adaptador compara o resultado calculado com ResultValue.

Para obter mais informações, consulte a seção Comentários.

Essa união contém os seguintes membros:

ResultValue.ResultByteValue

Um valor UCHAR a ser comparado com um resultado de teste.

ResultValue.ResultShortValue

Um valor USHORT a ser comparado com um resultado de teste.

ResultValue.ResultLongValue

Um valor ULONG a ser comparado com um resultado de teste.

ResultValue.ResultLong64Value

Um valor ULONG64 a ser comparado com um resultado de teste.

ResultValue.ResultByteArrayValue[16]

Uma matriz UCHAR a ser comparada com um resultado de teste.

_RESULT_VALUE

Comentários

A estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica o critério de teste de filtro para um campo em uma possível matriz de testes de campo que podem ser especificados com o NDIS_RECEIVE_FILTER_PARAMETERS estrutura.

A tabela a seguir descreve como o adaptador de rede usa os membros ReceiveFilterTest, FieldValue e ResultValue para executar um teste de filtro no valor do campo de cabeçalho especificado de um pacote recebido.

Valor receiveFilterTest Teste de filtro executado pelo adaptador de rede
NdisReceiveFilterTestEqual (<valor do campo de cabeçalho> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<valor do campo de cabeçalho> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<valor do campo de cabeçalho> != FieldValue)
 
Nota Todos os valores de campo e resultado multibyte, como os membros FieldShortValue e ResultLong64Value , devem ser especificados no formato de ordem de byte de rede (big-endian).
 
Se o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO não estiver definido e não houver nenhum filtro de identificador de VLAN configurado por uma solicitação de conjunto de OID de OID_RECEIVE_FILTER_SET_FILTER, o driver de miniporto deverá fazer um dos seguintes procedimentos:
  • Para o NDIS 6.20, o driver de miniporto deve retornar uma status com falha para a solicitação OID de OID_RECEIVE_FILTER_SET_FILTER.
  • A partir do NDIS 6.30, se o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO não estiver definido e não houver nenhum filtro de identificador de VLAN configurado pela solicitação de método OID_RECEIVE_FILTER_SET_FILTER , o driver de miniporte deverá fazer um dos seguintes procedimentos:
    • O driver de miniporte deve retornar uma status com falha para a solicitação do método OID_RECEIVE_FILTER_SET_FILTER.
    • O driver de miniporte deve configurar o adaptador de rede para inspecionar e filtrar os campos de endereço MAC especificados. Se uma marca VLAN estiver presente no pacote recebido, o adaptador de rede deverá removê-la dos dados do pacote. O driver de miniporto deve colocar a marca VLAN em um NDIS_NET_BUFFER_LIST_8021Q_INFO associado à estrutura NET_BUFFER_LIST do pacote.
A partir do NDIS 6.30, se o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO não estiver definido e houver um filtro de identificador de VLAN diferente de zero configurado por uma solicitação de conjunto de OID de OID_RECEIVE_FILTER_SET_FILTER, o driver de miniporte deverá fazer o seguinte:
  • O driver de miniporto deve configurar o adaptador de rede para inspecionar e filtrar os campos de endereço MAC e identificador de VLAN especificados.

    Se uma marca VLAN estiver presente no pacote recebido, o adaptador de rede deverá removê-la dos dados do pacote. O driver de miniporto deve colocar a marca VLAN em um NDIS_NET_BUFFER_LIST_8021Q_INFO associado à estrutura NET_BUFFER_LIST do pacote.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.20 e posterior.
Cabeçalho ntddndis.h (inclua Ndis.h)

Confira também

NDIS_ARP_HEADER_FIELD

NDIS_FRAME_HEADER

NDIS_IPV4_HEADER_FIELD

NDIS_IPV6_HEADER_FIELD

NDIS_MAC_HEADER_FIELD

NDIS_MAC_PACKET_TYPE

NDIS_OBJECT_HEADER

NDIS_RECEIVE_FILTER_PARAMETERS

NDIS_RECEIVE_FILTER_TEST

NDIS_UDP_HEADER_FIELD

OID_RECEIVE_FILTER_SET_FILTER