NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structure (ntddndis.h)

La structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS spécifie le critère de test de filtre pour un champ dans un en-tête de paquet réseau.

Les filtres de réception NDIS sont utilisés dans les interfaces NDIS suivantes :

Syntaxe

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;

Membres

Header

Structure NDIS_OBJECT_HEADER de la structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . Le pilote définit le membre Type de la structure spécifiée par Header sur NDIS_OBJECT_TYPE_DEFAULT.

Pour indiquer la version de la structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS , le pilote définit le membre Revision sur l’une des valeurs suivantes :

Valeur Signification
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2
2
Ajout de membres supplémentaires à l’union HeaderField pour NDIS 6.30.

Le pilote définit le membre Size sur NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2.

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1
1
Version d’origine de NDIS 6.20.

Le pilote définit le membre Size sur NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1.

Flags

Or au niveau du bit d’indicateurs. Les indicateurs suivants sont valides pour le OID_RECEIVE_FILTER_SET_FILTER OID.

Valeur Signification
NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
0x00000001
Si cet indicateur est défini, la carte réseau doit indiquer uniquement les paquets reçus qui respectent les critères suivants :
  • L’adresse MAC (Media Access Control) du paquet correspond au test de champ d’en-tête MAC spécifié.
  • Le paquet ne contient pas de balise de réseau local virtuel ou a une balise de réseau local virtuel avec un ID égal à zéro.
Pour plus d’informations sur cet indicateur, consultez la section Remarques.
Note Si un pilote qui se chevauche définit un filtre d’adresse MAC et un filtre d’identificateur de réseau local virtuel avec une requête OID de OID_RECEIVE_FILTER_SET_FILTER, il ne définit cet indicateur dans aucun des champs de filtre. Dans ce cas, le pilote miniport doit indiquer les paquets qui correspondent à la fois à l’adresse MAC spécifiée et à l’identificateur de réseau local virtuel. Autrement dit, le pilote miniport ne doit pas indiquer les paquets avec une adresse MAC correspondante qui ont un identificateur de VLAN zéro ou qui sont des paquets non étiquetés.
 

FrameHeader

Type d’en-tête dans la trame de données réseau.

ReceiveFilterTest

Type de test à effectuer pour le filtre de réception.

HeaderField

Type de champ dans un en-tête. Le type de champ (par exemple, NDIS_MAC_HEADER_FIELD) correspond au type d’en-tête spécifié dans le membre FrameHeader .

Cette union contient les membres suivants :

HeaderField.MacHeaderField

Type de champ dans un en-tête MAC.

HeaderField.ArpHeaderField

Type de champ dans un en-tête ARP (Address Resolution Protocol).

HeaderField.IPv4HeaderField

Valeur d’énumération NDIS_IPV4_HEADER_FIELD qui spécifie le type de champ dans un en-tête IP version 4 (IPv4).

HeaderField.IPv6HeaderField

Valeur d’énumération NDIS_IPV6_HEADER_FIELD qui spécifie le type de champ dans un en-tête IP version 6 (IPv6).

HeaderField.UdpHeaderField

Type de champ dans un en-tête UDP (User Datagram Protocol).

_HEADER_FIELD

FieldValue

Valeur que l’adaptateur miniport compare à la valeur de champ d’en-tête correspondante dans les paquets entrants. L’emplacement de la valeur du champ d’en-tête est déterminé par le type de champ spécifié dans le membre HeaderField .

Pour plus d'informations, consultez la section Notes.

Cette union contient les membres suivants :

FieldValue.FieldByteValue

Valeur UCHAR à comparer avec un champ dans un paquet réseau.

Note Si le membre MacHeaderField spécifie une valeur d’énumération NdisMacHeaderFieldPacketType , ce membre contient une valeur d’énumération NDIS_MAC_PACKET_TYPE .
 

FieldValue.FieldShortValue

Valeur USHORT à comparer à un champ dans un paquet réseau.

FieldValue.FieldLongValue

Valeur ULONG à comparer avec un champ dans un paquet réseau.

FieldValue.FieldLong64Value

Valeur ULONG64 à comparer à un champ dans un paquet réseau.

FieldValue.FieldByteArrayValue[16]

Tableau UCHAR à comparer avec un champ dans un paquet réseau.

_FIELD_VALUE

ResultValue

Union qui contient une valeur de résultat de test.

Si le membre ReceiveFilterTest est défini sur NdisReceiveFilterTestMaskEqual, la carte réseau calcule d’abord un résultat à partir de la valeur dans le membre FieldValue et de la valeur du champ d’en-tête comme spécifié par le membre HeaderField . L’adaptateur compare ensuite le résultat calculé avec ResultValue.

Pour plus d'informations, consultez la section Notes.

Cette union contient les membres suivants :

ResultValue.ResultByteValue

Valeur UCHAR à comparer avec un résultat de test.

ResultValue.ResultShortValue

Valeur USHORT à comparer avec un résultat de test.

ResultValue.ResultLongValue

Valeur ULONG à comparer avec un résultat de test.

ResultValue.ResultLong64Value

Valeur ULONG64 à comparer avec un résultat de test.

ResultValue.ResultByteArrayValue[16]

Tableau UCHAR à comparer avec un résultat de test.

_RESULT_VALUE

Remarques

La structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS spécifie le critère de test de filtre pour un champ dans un tableau possible de tests sur le terrain qui peuvent être spécifiés avec le NDIS_RECEIVE_FILTER_PARAMETERS structure.

Le tableau suivant décrit comment la carte réseau utilise les membres ReceiveFilterTest, FieldValue et ResultValue pour effectuer un test de filtre sur la valeur de champ d’en-tête spécifiée d’un paquet reçu.

Valeur ReceiveFilterTest Test de filtre effectué par la carte réseau
NdisReceiveFilterTestEqual (<valeur du champ d’en-tête> == FieldValue)
NdisReceiveFilterTestMaskEqual ((<valeur de champ d’en-tête> & FieldValue) == ResultValue)
NdisReceiveFilterTestNotEqual (<valeur du champ d’en-tête> != FieldValue)
 
Note Toutes les valeurs de champ et de résultat multioctets, telles que les membres FieldShortValue et ResultLong64Value , doivent être spécifiées au format d’ordre d’octet réseau (big-endian).
 
Si l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO n’est pas défini et qu’aucun filtre d’identificateur de réseau local virtuel n’a été configuré par une demande de jeu d’OID de OID_RECEIVE_FILTER_SET_FILTER, le pilote miniport doit effectuer l’une des opérations suivantes :
  • Pour NDIS 6.20, le pilote miniport doit retourner une status ayant échoué pour la requête OID de OID_RECEIVE_FILTER_SET_FILTER.
  • À compter de NDIS 6.30, si l’indicateur de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO n’est pas défini et qu’aucun filtre d’identificateur de réseau local virtuel n’est configuré par la demande de méthode OID_RECEIVE_FILTER_SET_FILTER, le pilote miniport doit effectuer l’une des opérations suivantes :
    • Le pilote miniport doit retourner une status ayant échoué pour la demande de méthode OID_RECEIVE_FILTER_SET_FILTER.
    • Le pilote miniport doit configurer la carte réseau pour inspecter et filtrer les champs d’adresse MAC spécifiés. Si une balise VLAN est présente dans le paquet reçu, la carte réseau doit la supprimer des données du paquet. Le pilote miniport doit placer la balise VLAN dans un NDIS_NET_BUFFER_LIST_8021Q_INFO associé à la structure NET_BUFFER_LIST du paquet.
À compter de NDIS 6.30, si l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO n’est pas défini et qu’il existe un filtre d’identificateur de réseau local virtuel différent de zéro qui a été configuré par une demande de jeu d’OID de OID_RECEIVE_FILTER_SET_FILTER, le pilote miniport doit effectuer les opérations suivantes :
  • Le pilote miniport doit configurer la carte réseau pour inspecter et filtrer les champs d’adresse MAC et d’identificateur de réseau local virtuel spécifiés.

    Si une balise VLAN est présente dans le paquet reçu, la carte réseau doit la supprimer des données du paquet. Le pilote miniport doit placer la balise VLAN dans un NDIS_NET_BUFFER_LIST_8021Q_INFO associé à la structure NET_BUFFER_LIST du paquet.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans NDIS 6.20 et versions ultérieures.
En-tête ntddndis.h (include Ndis.h)

Voir aussi

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