Fonctionnalités de fusion de paquets de rapports
Les pilotes miniport inscrivent les fonctionnalités suivantes avec NDIS lors de l’initialisation de la carte réseau :
Fonctionnalités de fusion de paquets prises en charge par la carte réseau.
Fonctionnalités de fusion de paquets actuellement activées sur la carte réseau.
Les fonctionnalités de filtrage de fusion de paquets qui sont actuellement activées sur la carte réseau.
Note La prise en charge d’un pilote miniport pour la fusion des paquets peut être activée ou désactivée via le paramètre *PacketCoalescing INF mot clé. Ce paramètre s’affiche dans la page de propriétés Avancées de la carte réseau. Pour plus d’informations sur le paramètre de fichier INF de fusion de paquets, consultez Mots clés INF standardisés pour le coalescing de paquets.
Le pilote miniport signale les fonctionnalités de fusion et de filtrage des paquets de la carte réseau sous-jacente via une structure NDIS_RECEIVE_FILTER_CAPABILITIES . Si le paramètre *PacketCoalescing mot clé dans le Registre a une valeur, la fusion des paquets est activée et le pilote miniport initialise la structure NDIS_RECEIVE_FILTER_CAPABILITIES de la manière suivante :
Le pilote miniport initialise le membre Header . Le pilote définit le membre Type de l’en-tête sur NDIS_OBJECT_TYPE_DEFAULT.
Si le pilote prend en charge la fusion de paquets, il définit le membre Révision de l’en-tête sur le NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 et le membre Size sur NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.
Le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE dans le membre SupportedQueueProperties .
Si cet indicateur est défini, la carte réseau doit prendre en charge le filtrage des paquets de multidiffusion reçus dans le matériel. Ce filtrage est basé sur les adresses de multidiffusion que NDIS a déchargées sur la carte réseau en l’envoyant OID_802_3_MULTICAST_LIST demandes de jeu OID.
Note Les pilotes de protocole peuvent également modifier le contenu de la liste d’adresses de multidiffusion en envoyant des requêtes OID_802_3_ADD_MULTICAST_ADDRESS et OID_802_3_DELETE_MULTICAST_ADDRESS . NDIS combine ces requêtes en OID_802_3_MULTICAST_LIST demandes d’ensemble OID.
Note L’adaptateur est nécessaire pour rejeter tout paquet de multidiffusion entrant dont l’adresse de contrôle d’accès au média de destination (MAC) ne correspond à aucune des adresses de multidiffusion spécifiées par ces demandes de jeu d’OID.
Le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED dans le membre EnabledFilterTypes .
Note Si le pilote définit cet indicateur, il doit également définir l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE dans le membre SupportedQueueProperties . Sinon, NDIS échouera l’appel à NdisMSetMiniportAttributes en retournant NDIS_STATUS_BAD_CHARACTERISTICS.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il doit prendre en charge tous les critères de test de filtre de réception. Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedFilterTests :
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il doit définir le membre SupportedFilterTests sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans différents champs des en-têtes contrôle d’accès au média (MAC), IP version 4 (IPv4) et IP version 6 (IPv6). Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedHeaders :
NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote doit définir le membre SupportedHeaders sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans l’en-tête de contrôle d’accès multimédia (MAC) du paquet reçu. Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedMacHeaderFields :
NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote doit définir le membre SupportedMacHeaderFields sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans l’en-tête d’un paquet ARP (Address Resolution Protocol) reçu. Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedARPHeaderFields :
NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il doit définir le membre SupportedARPHeaderFields sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans l’en-tête de couche 3 (L3) open systems interconnection (OSI) d’un paquet IP reçu version 4 (IPv4). Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedIPv4HeaderFields :
- NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote doit définir le membre SupportedIPv4HeaderFields sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans l’en-tête L3 d’un paquet IP reçu version 6 (IPv6). Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedIPv6HeaderFields :
- NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote doit définir le membre SupportedIPv6HeaderFields sur zéro.
Si le pilote miniport définit l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote miniport doit prendre en charge le filtrage des données dans l’en-tête OSI layer 4 (L4) d’un paquet UDP (User Datagram Protocol) reçu. Le pilote publie cette prise en charge en définissant les indicateurs suivants dans le membre SupportedIUdpHeaderFields :
- NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED
Note Si le paquet UDP reçu contient des options IPv4 ou des en-têtes d’extension IPv6, la carte réseau peut gérer le paquet comme si le test de filtre UDP avait échoué. De cette façon, l’adaptateur peut supprimer automatiquement le paquet reçu.
Note Si le pilote miniport ne définit pas l’indicateur NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, le pilote doit définir le membre SupportedIUdpHeaderFields sur zéro.
Le pilote miniport doit signaler le nombre maximal de tests sur les champs d’en-tête de paquet qui peuvent être spécifiés pour un filtre de fusion de paquets unique. Le pilote spécifie cette valeur dans le membre MaxFieldTestsPerPacketCoalescingFilter .
Note Les cartes réseau qui prennent en charge le regroupement de paquets doivent prendre en charge au moins cinq champs d’en-tête de paquets qui peuvent être spécifiés pour un seul filtre de fusion de paquets. Si l’adaptateur ne prend pas en charge la fusion des paquets, le pilote miniport doit définir cette valeur sur zéro.
Le pilote miniport doit signaler le nombre maximal de filtres de fusion de paquets pris en charge par la carte réseau. Le pilote spécifie cette valeur dans le membre MaxPacketCoalescingFilters .
Note Les cartes réseau qui prennent en charge le regroupement de paquets doivent prendre en charge au moins dix filtres de fusion de paquets. Si l’adaptateur ne prend pas en charge la fusion des paquets, le pilote miniport doit définir cette valeur sur zéro.
Lorsque NDIS appelle la fonction MiniportInitializeEx du pilote miniport , le pilote signale les fonctionnalités de fusion et de filtrage des paquets de la carte réseau sous-jacente en procédant comme suit :
Le pilote miniport initialise une structure NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
Si le paramètre *PacketCoalescing mot clé dans le Registre a une valeur, le pilote miniport définit le membre HardwareReceiveFilterCapabilities vers un pointeur vers la structure NDIS_RECEIVE_FILTER_CAPABILITIES précédemment initialisée.
Si le paramètre *PacketCoalescing mot clé dans le Registre a la valeur zéro, le pilote miniport ne publie pas la prise en charge de la fusion des paquets. Il doit définir le membre HardwareReceiveFilterCapabilities sur NULL.
Le pilote appelle NdisMSetMiniportAttributes et définit le paramètre MiniportAttributes sur un pointeur vers la structure NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .
La méthode utilisée par les pilotes miniport pour signaler les fonctionnalités de fusion et de filtrage des paquets de la carte réseau sous-jacente est basée sur la méthode NDIS 6.20 pour signaler les fonctionnalités de gestion de l’alimentation. Pour plus d’informations sur cette méthode, consultez Création de rapports sur les fonctionnalités de gestion de l’alimentation.
Pour plus d’informations sur le processus d’initialisation de l’adaptateur, consultez Initialisation d’un adaptateur Miniport.