estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS (ntddndis.h)

La estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica el criterio de prueba de filtro para un campo en un encabezado de paquete de red.

Los filtros de recepción NDIS se usan en las siguientes interfaces NDIS:

Sintaxis

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;

Miembros

Header

Estructura NDIS_OBJECT_HEADER de la estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . El controlador establece el miembro Type de la estructura que Header especifica para NDIS_OBJECT_TYPE_DEFAULT.

Para indicar la versión de la estructura de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS , el controlador establece el miembro Revision en uno de los siguientes valores:

Valor Significado
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
Se agregaron miembros adicionales a la unión HeaderField para NDIS 6.30.

El controlador establece el miembro Size en NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
Versión original de NDIS 6.20.

El controlador establece el miembro Size en NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1.

Flags

OR bit a bit de marcas. Las marcas siguientes son válidas para OID_RECEIVE_FILTER_SET_FILTER OID.

Valor Significado
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
Si se establece esta marca, el adaptador de red solo debe indicar paquetes recibidos que pasen los siguientes criterios:
  • La dirección del control de acceso multimedia (MAC) del paquete coincide con la prueba de campo de encabezado MAC especificada.
  • El paquete no contiene una etiqueta VLAN o tiene una etiqueta VLAN con un identificador de cero.
Para obtener más información sobre esta marca, vea la sección Comentarios.
Nota Si un controlador de sobreslización establece un filtro de direcciones MAC y un filtro de identificador VLAN con una solicitud de OID de OID_RECEIVE_FILTER_SET_FILTER, no establece esta marca en ninguno de los campos de filtro. En este caso, el controlador de minipuerto debe indicar paquetes que coincidan con la dirección MAC especificada y el identificador VLAN. Es decir, el controlador de minipuerto no debe indicar paquetes con una dirección MAC coincidente que tenga un identificador VLAN cero o que no estén marcados como paquetes.
 

FrameHeader

Tipo de encabezado en la trama de datos de red.

ReceiveFilterTest

Tipo de prueba que se va a realizar para el filtro de recepción.

HeaderField

Tipo de campo en un encabezado. El tipo de campo (por ejemplo, NDIS_MAC_HEADER_FIELD) corresponde al tipo de encabezado especificado en el miembro FrameHeader .

Esta unión contiene los siguientes miembros:

HeaderField.MacHeaderField

Tipo de campo en un encabezado MAC.

HeaderField.ArpHeaderField

Tipo de campo en un encabezado protocolo de resolución de direcciones (ARP).

HeaderField.IPv4HeaderField

Valor de enumeración NDIS_IPV4_HEADER_FIELD que especifica el tipo de campo en un encabezado ip versión 4 (IPv4).

HeaderField.IPv6HeaderField

Valor de enumeración NDIS_IPV6_HEADER_FIELD que especifica el tipo de campo en un encabezado ip versión 6 (IPv6).

HeaderField.UdpHeaderField

Tipo de campo en un encabezado de Protocolo de datagramas de usuario (UDP).

_HEADER_FIELD

FieldValue

Valor que el adaptador de miniporte compara con el valor del campo de encabezado correspondiente en los paquetes entrantes. La ubicación del valor del campo de encabezado viene determinada por el tipo de campo especificado en el miembro HeaderField .

Para obtener más información, vea la sección Comentarios.

Esta unión contiene los siguientes miembros:

FieldValue.FieldByteValue

Valor UCHAR que se va a comparar con un campo de un paquete de red.

Nota Si el miembro MacHeaderField especifica un valor de enumeración NdisMacHeaderFieldPacketType , este miembro contiene un valor de enumeración NDIS_MAC_PACKET_TYPE .
 

FieldValue.FieldShortValue

Valor de USHORT que se va a comparar con un campo de un paquete de red.

FieldValue.FieldLongValue

Valor de ULONG que se va a comparar con un campo de un paquete de red.

FieldValue.FieldLong64Value

Valor de ULONG64 que se va a comparar con un campo de un paquete de red.

FieldValue.FieldByteArrayValue[16]

Matriz UCHAR que se va a comparar con un campo de un paquete de red.

_FIELD_VALUE

ResultValue

Unión que contiene un valor de resultado de prueba.

Si el miembro ReceiveFilterTest se establece en NdisReceiveFilterTestMaskEqual, el adaptador de red calcula primero un resultado del valor del miembro FieldValue y el valor del campo de encabezado según lo especificado por el miembro HeaderField . A continuación, el adaptador compara el resultado calculado con ResultValue.

Para obtener más información, vea la sección Comentarios.

Esta unión contiene los siguientes miembros:

ResultValue.ResultByteValue

Valor UCHAR que se va a comparar con un resultado de prueba.

ResultValue.ResultShortValue

Valor de USHORT que se va a comparar con un resultado de prueba.

ResultValue.ResultLongValue

Valor de ULONG que se va a comparar con un resultado de prueba.

ResultValue.ResultLong64Value

Valor de ULONG64 que se va a comparar con un resultado de prueba.

ResultValue.ResultByteArrayValue[16]

Matriz UCHAR que se va a comparar con un resultado de prueba.

_RESULT_VALUE

Comentarios

La estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica el criterio de prueba de filtro para un campo en una posible matriz de pruebas de campo que se pueden especificar con el NDIS_RECEIVE_FILTER_PARAMETERS estructura.

En la tabla siguiente se describe cómo el adaptador de red usa los miembros ReceiveFilterTest, FieldValue y ResultValue para realizar una prueba de filtro en el valor de campo de encabezado especificado de un paquete recibido.

Valor ReceiveFilterTest Prueba de filtro realizada por el adaptador de red
NdisReceiveFilterTestEqual (<valor del campo de encabezado> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<header field value> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<valor del campo de encabezado> != FieldValue)
 
Nota Todos los valores de resultado y campo multibyte, como los miembros FieldShortValue y ResultLong64Value , deben especificarse en formato de orden de bytes de red (big-endian).
 
Si no se establece la marca NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO y no hay ningún filtro de identificador de VLAN configurado por una solicitud de conjunto de OID de OID_RECEIVE_FILTER_SET_FILTER, el controlador de minipuerto debe realizar una de las siguientes acciones:
  • Para NDIS 6.20, el controlador de minipuerto debe devolver un estado erróneo para la solicitud OID de OID_RECEIVE_FILTER_SET_FILTER.
  • A partir de NDIS 6.30, si no se establece la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO y no hay ningún filtro de identificador VLAN configurado por la solicitud del método OID_RECEIVE_FILTER_SET_FILTER , el controlador de miniporte debe realizar una de las siguientes acciones:
    • El controlador de minipuerto debe devolver un estado erróneo para la solicitud de método OID_RECEIVE_FILTER_SET_FILTER .
    • El controlador de minipuerto debe configurar el adaptador de red para inspeccionar y filtrar los campos de dirección MAC especificados. Si una etiqueta VLAN está presente en el paquete recibido, el adaptador de red debe quitarla de los datos del paquete. El controlador de minipuerto debe colocar la etiqueta VLAN en una NDIS_NET_BUFFER_LIST_8021Q_INFO asociada a la estructura NET_BUFFER_LIST del paquete.
A partir de NDIS 6.30, si no se establece la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO y hay un filtro de identificador de VLAN distinto de cero configurado por una solicitud de conjunto de OID de OID_RECEIVE_FILTER_SET_FILTER, el controlador de miniporte debe hacer lo siguiente:
  • El controlador de minipuerto debe configurar el adaptador de red para inspeccionar y filtrar los campos de dirección MAC y identificador de VLAN especificados.

    Si una etiqueta VLAN está presente en el paquete recibido, el adaptador de red debe quitarla de los datos del paquete. El controlador de minipuerto debe colocar la etiqueta VLAN en una NDIS_NET_BUFFER_LIST_8021Q_INFO asociada a la estructura NET_BUFFER_LIST del paquete.

Requisitos

Requisito Value
Cliente mínimo compatible Se admite en NDIS 6.20 y versiones posteriores.
Encabezado ntddndis.h (include Ndis.h)

Consulte también

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