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:
-
Agrupamento de pacotes NDIS. Para obter mais informações sobre como usar filtros de recebimento nessa interface, consulte Gerenciando filtros de recebimento de agrupamento de pacotes.
-
Virtualização de E/S de Raiz Única (SR-IOV). Para obter mais informações sobre como usar filtros de recebimento nessa interface, consulte Configurando um filtro de recebimento em uma porta virtual.
-
VMQ (Fila de Máquinas Virtuais). Para obter mais informações sobre como usar filtros de recebimento nessa interface, consulte Configuração e limpeza de filtros VMQ.
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:
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 |
---|---|
|
Se esse sinalizador estiver definido, o adaptador de rede deverá indicar apenas os pacotes recebidos que passam pelos seguintes crité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.
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) |
- 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.
-
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_RECEIVE_FILTER_PARAMETERSComentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de