Gestion des filtres de réception de fusion de paquets
Plusieurs filtres de réception sont téléchargés sur un pilote miniport via des requêtes de méthode OID de OID_RECEIVE_FILTER_SET_FILTER. Chaque filtre peut spécifier un ou plusieurs tests (tests de champ d’en-tête) que la carte réseau utilise pour déterminer si un paquet reçu doit être coalescé dans une mémoire tampon de fusion matérielle sur l’adaptateur.
Avant que le pilote miniport ne configure la carte réseau avec les filtres de réception, le pilote doit optimiser les filtres de réception en fonction des fonctionnalités matérielles de l’adaptateur. Par exemple, tous les filtres de réception nécessitent un test de champ d’en-tête pour l’en-tête MAC. Par conséquent, le pilote peut optimiser les règles de filtre en fonction des résultats de ce test. Cela permet à l’adaptateur de déterminer les tests de champ d’en-tête de couche 3 (L3) et de couche 4 (L4) à effectuer ensuite.
Dès que la carte réseau a été configurée avec des filtres de réception, elle doit effectuer les opérations suivantes :
Tous les paramètres de test de champ d’en-tête pour un filtre particulier doivent correspondre sur le paquet reçu afin de fusionner le paquet dans la mémoire tampon de fusion.
La carte réseau combine les résultats de tous les tests de champ d’en-tête d’un filtre de réception avec une opération AND logique. Autrement dit, si un test de champ d’en-tête inclus dans le tableau de structures NDIS_RECEIVE_FILTER_FIELD_PARAMETERS pour un filtre de réception échoue, le paquet reçu ne répond pas au critère de filtre spécifié et ne doit pas être regroupé.
La carte réseau inspecte uniquement les données de paquets en fonction des paramètres de test de champ d’en-tête spécifiés. L’adaptateur doit ignorer tous les champs d’en-tête du paquet pour lequel les tests de champ d’en-tête ne sont pas spécifiés.
Si un paquet reçu correspond à tous les tests de champ d’en-tête pour l’un des filtres de réception, la carte réseau doit fusionner le paquet dans la mémoire tampon de fusion matérielle. Dès que le premier paquet est coalescé, la carte réseau doit démarrer un minuteur matériel et doit définir l’heure d’expiration sur la valeur du membre MaxCoalescingDelay de la structure NDIS_RECEIVE_FILTER_PARAMETERS pour le filtre de réception correspondant.
À mesure que des paquets correspondant à un filtre de réception de fusion de paquets sont reçus, la carte réseau les place dans la mémoire tampon de fusion.
Si le minuteur matériel est déjà en cours d’exécution, l’adaptateur ne doit pas arrêter ou redémarrer le minuteur pour le filtre de réception correspondant. Toutefois, l’adaptateur peut configurer le minuteur matériel avec la plus petite valeur d’expiration des filtres de réception correspondants. Par exemple, lorsque le pilote reçoit un paquet qui correspond au filtre de réception X, l’adaptateur démarre le minuteur avec la valeur d’expiration spécifiée pour ce filtre de réception. Si l’adaptateur reçoit ensuite un paquet qui correspond au filtre de réception Y, l’adaptateur peut reconfigurer le minuteur matériel avec la valeur d’expiration spécifiée pour ce filtre de réception.
Note La carte réseau ne doit pas reconfigurer le minuteur matériel si le temps restant sur le minuteur est inférieur au temps d’expiration d’un filtre de réception.
Dès que les paquets reçus sont coalescés, la carte réseau génère une interruption si l’un des événements suivants se produit :
Si l’espace disponible dans la mémoire tampon de fusion matérielle atteint une limite d’eau spécifique au matériel, la carte réseau doit générer une interruption de réception afin que le pilote miniport puisse traiter les paquets de réception coalescés.
Si le minuteur matériel utilisé pour la mémoire tampon de fusion matérielle expire, la carte réseau doit générer une interruption de réception afin que le pilote miniport puisse traiter les paquets de réception coalescés.
Si un filtre de réception est effacé et que des paquets correspondant à ce filtre ont été coalescés, la carte réseau doit générer une interruption de réception afin que le pilote miniport puisse traiter les paquets de réception coalescés.
Si un paquet reçu ne correspond à aucun des filtres de réception, la carte réseau doit générer une interruption de réception afin que le pilote miniport puisse traiter le paquet reçu. Si des paquets ont été coalescés, le pilote miniport doit également traiter ces paquets.
Si la carte réseau génère une interruption pour toute autre interruption status autre qu’une interruption de réception, la carte réseau doit également signaler une interruption de réception status afin que le pilote miniport puisse traiter les paquets reçus en fusion.
Dès que l’interruption est générée, la carte réseau doit arrêter le minuteur matériel s’il n’a pas expiré et doit effacer la mémoire tampon de fusion matérielle.
Le pilote miniport doit conserver un compteur de paquets coalescé, qui contient une valeur pour le nombre de paquets reçus correspondant à un filtre de fusion de paquets. NDIS interroge ce compteur via une requête de requête OID de OID_PACKET_COALESCING_FILTER_MATCH_COUNT.
La carte réseau effectue uniquement la fusion des paquets lorsque le matériel fonctionne dans un état de pleine puissance. Alors que le matériel est dans un état de faible consommation, l’adaptateur doit filtrer uniquement les paquets reçus en fonction des modèles de mise en éveil qui ont été déchargés sur l’adaptateur via des demandes de jeu d’OID de OID_PNP_ENABLE_WAKE_UP.
Lorsque la carte réseau passe à un état d’alimentation complète, le pilote miniport doit suivre les étapes suivantes :
Le pilote miniport doit configurer la carte réseau pour ignorer tous les paquets coalescés dans la mémoire tampon de fusion matérielle. La carte réseau a peut-être coalescé ces paquets lorsqu’elle a été transitionnée vers un état de faible consommation.
Le pilote miniport doit configurer la carte réseau avec l’ensemble des filtres de réception de fusion de paquets qui ont été téléchargés sur le pilote avant la transition à faible consommation d’énergie.
Le pilote miniport doit effacer le compteur de paquets coalescé.