Définition d’un filtre de réception sur un port virtuel
Une fois qu’un port virtuel (VPort) est créé sur le commutateur de carte réseau de la carte réseau, les pilotes sur-ment peuvent définir des filtres de réception sur le VPort. Seul le pilote qui a créé le VPort peut définir un filtre de réception sur ce VPort
Cette rubrique contient les informations suivantes :
Définition d’un filtre de réception sur un VPort
Utilisation de l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
Utilisation de l’identificateur de filtre
Gestion des filtres de réception sur un VPort
Pour plus d’informations sur la création d’un port virtuel, consultez Création d’un port virtuel.
Note Étant donné que le VPort par défaut existe toujours et n’est jamais créé explicitement, n’importe quel pilote qui surclasse peut définir un filtre de réception sur le VPort par défaut. Les pilotes qui se superposent ne possèdent pas le VPort par défaut. Par conséquent, tous les pilotes de protocole liés à une carte réseau peuvent utiliser le VPort par défaut. Le VPort par défaut a une valeur d’identificateur de NDIS_DEFAULT_VPORT_ID.
Définition d’un filtre de réception sur un VPort
Pour définir et configurer un filtre sur un VPort, un pilote qui se superpose émet une demande de méthode d’identificateur d’objet (OID) de OID_RECEIVE_FILTER_SET_FILTER. Le membre InformationBuffer de la structure NDIS_OID_REQUEST contient initialement un pointeur vers une structure NDIS_RECEIVE_FILTER_PARAMETERS .
Avant que le pilote overlying n’envoie cette demande de méthode OID, il doit initialiser une structure NDIS_RECEIVE_FILTER_PARAMETERS . Le pilote doit définir les membres de cette structure de la manière suivante :
Le membre FilterType doit être défini sur une valeur d’énumération NDIS_RECEIVE_FILTER_TYPE .
Note À compter de NDIS 6.30, seuls les types de filtre NdisReceiveFilterTypeVMQueue sont pris en charge pour l’interface de virtualisation d’E/S racine unique (SR-IOV).
Le membre QueueId doit être défini sur NDIS_DEFAULT_RECEIVE_QUEUE_ID.
Le membre VPortId doit être défini sur l’identificateur associé au VPort. Le pilote qui se superpose obtient l’identificateur VPort de l’une des manières suivantes :
À partir d’une précédente demande de méthode OID de OID_NIC_SWITCH_CREATE_VPORT.
À partir d’une précédente demande de méthode OID de OID_NIC_SWITCH_ENUM_VPORTS.
Le membre FilterId doit être défini sur NDIS_DEFAULT_RECEIVE_FILTER_ID.
Note NDIS affecte un identificateur de filtre unique dans ce membre avant de transférer la requête OID au pilote miniport pour traitement.
Les membres FieldParametersArrayOffset, FieldParametersArrayNumElements et FieldParametersArrayElementSize de la structure NDIS_RECEIVE_FILTER_PARAMETERS doivent être définis de manière appropriée pour définir un tableau de structures NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . Chaque structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS dans le tableau définit le critère de test de filtre pour un champ dans un en-tête de réseau.
Pour l’interface SR-IOV, les paramètres de test de champ suivants sont définis :
L’adresse MAC (Destination Media Access Control) dans le paquet est égale à l’adresse MAC spécifiée.
L’identificateur de réseau local virtuel (VLAN) dans le paquet est égal à l’identificateur de réseau local virtuel spécifié.
Après un retour réussi de la demande de méthode OID, le membre InformationBuffer de la structure NDIS_OID_REQUEST contient un pointeur vers une structure NDIS_RECEIVE_FILTER_PARAMETERS avec un nouvel identificateur de filtre.
Utilisation de l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
Le membre Indicateurs de la structure NDIS_RECEIVE_FILTER_FIELD_PARAMETERS spécifie les actions à effectuer pour le filtre de réception. Les points suivants s’appliquent à l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO :
Si l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO est défini dans le membre Indicateurs , la carte réseau doit indiquer uniquement les paquets reçus qui correspondent à tous les critères de test suivants :
Paquet avec une adresse MAC correspondante.
Paquet qui n’a pas de balise de réseau local virtuel ou qui a un identificateur de réseau local virtuel égal à zéro.
Si l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO est défini, la carte réseau ne doit pas indiquer les paquets qui ont une adresse MAC correspondante et un identificateur VLAN différent de zéro.
Note Si la pile de virtualisation définit le filtre d’adresse MAC et qu’aucun filtre d’identificateur de réseau local virtuel n’est configuré par la demande de jeu d’OID_RECEIVE_FILTER_SET_FILTER , le commutateur définit également l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO .
À 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 une NDIS_NET_BUFFER_LIST_8021Q_INFO associée à la structure NET_BUFFER_LIST du paquet.
Si un pilote de protocole définit un filtre d’adresse MAC et un filtre d’identificateur de réseau local virtuel avec la demande de méthode OID_RECEIVE_FILTER_SET_FILTER , il ne définit pas l’indicateur NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO dans l’un 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.
Utilisation de l’identificateur de filtre
NDIS affecte un identificateur de filtre dans le membre FilterId de la structure NDIS_RECEIVE_FILTER_PARAMETERS et transmet la demande de méthode OID de OID_RECEIVE_FILTER_SET_FILTER au pilote miniport sous-jacent. Chaque filtre défini sur un VPort a un identificateur de filtre unique pour une carte réseau. Autrement dit, les identificateurs de filtre ne sont pas dupliqués sur différentes files d’attente que la carte réseau gère.
Le pilote overlying doit utiliser l’identificateur de filtre fourni par NDIS dans les requêtes OID ultérieures pour modifier les paramètres de filtre ou libérer un filtre.
Quand NDIS reçoit une demande OID pour définir un filtre sur un VPort, il vérifie les paramètres de filtre. Une fois que NDIS alloue les ressources nécessaires et l’identificateur de filtre, il envoie la demande OID à la carte réseau sous-jacente. Si la carte réseau peut allouer correctement les ressources logicielles et matérielles nécessaires pour le filtre, elle termine la requête OID avec NDIS_STATUS_SUCCESS.
Le pilote miniport doit conserver les identificateurs de filtre pour les filtres de réception alloués. NDIS utilise l’identificateur de filtre d’un filtre avec des requêtes OID ultérieures pour modifier les paramètres de filtre de réception ou effacer le filtre de réception. Pour plus d’informations sur la modification des paramètres et l’effacement des filtres, consultez Obtention et mise à jour des paramètres de file d’attente de machines virtuelles et Effacement d’un filtre VMQ.
Gestion des filtres de réception sur un VPort
Le pilote miniport programme la carte réseau en fonction des filtres de la manière suivante :
Tous les paramètres de test sur le terrain d’un filtre particulier doivent correspondre pour affecter un paquet au VPort.
Plusieurs filtres peuvent être définis sur un VPort.
Les paquets doivent être affectés au VPort si l’un des filtres passe.
La carte réseau combine les résultats de tous les tests sur le terrain avec une opération AND logique. Autrement dit, si un test sur le terrain inclus dans le tableau de structures NDIS_RECEIVE_FILTER_FIELD_PARAMETERS échoue, le paquet réseau ne répond pas au critère de filtre spécifié.
Lorsqu’une carte réseau teste un paquet reçu par rapport à ces critères de filtre, elle doit ignorer tous les champs du paquet qui n’ont aucun critère de test spécifié.