Condividi tramite


Funzionalità di coalescing dei pacchetti di report

I driver Miniport registrano le funzionalità seguenti con NDIS durante l'inizializzazione della scheda di rete:

  • Funzionalità di unione dei pacchetti supportate dalla scheda di rete.

  • Funzionalità di unione dei pacchetti attualmente abilitate nella scheda di rete.

  • Funzionalità di filtro dei pacchetti attualmente abilitate nella scheda di rete.

Nota Il supporto di un driver miniport per il raggruppamento dei pacchetti può essere abilitato o disabilitato tramite l'impostazione della parola chiave *PacketCoalescing INF. Questa impostazione viene visualizzata nella pagina Proprietà avanzate per la scheda di rete. Per altre informazioni sull'impostazione del file INF di unione dei pacchetti, vedere Parole chiave INF standardizzate per il coalescing dei pacchetti.

Il driver miniport segnala le funzionalità di unione e filtro dei pacchetti della scheda di rete sottostante tramite una struttura NDIS_RECEIVE_FILTER_CAPABILITIES . Se l'impostazione della parola chiave *PacketCoalescing nel Registro di sistema ha un valore di uno, il raggruppamento dei pacchetti è abilitato e il driver miniport inizializza la struttura di NDIS_RECEIVE_FILTER_CAPABILITIES nel modo seguente:

  1. Il driver miniport inizializza il membro Header . Il driver imposta il membro Type di Intestazione su NDIS_OBJECT_TYPE_DEFAULT.

    Se il driver supporta il raggruppamento dei pacchetti, imposta il membro Revisionedell'intestazione sul NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 e il membro Size su NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.

  2. Il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE nel membro SupportedQueueProperties .

    Se questo flag è impostato, la scheda di rete deve supportare il filtro dei pacchetti multicast ricevuti nell'hardware. Questo filtro si basa sugli indirizzi multicast caricati dall'NDIS nella scheda di rete inviandole OID_802_3_MULTICAST_LIST richieste di set OID.

    Nota I driver di protocollo possono anche modificare il contenuto dell'elenco indirizzi multicast inviando OID_802_3_ADD_MULTICAST_ADDRESS e OID_802_3_DELETE_MULTICAST_ADDRESS richieste. NDIS combina queste richieste in OID_802_3_MULTICAST_LIST richieste di set OID.

Nota L'adattatore è necessario per rifiutare qualsiasi pacchetto multicast in ingresso il cui indirizzo MAC (Destination Media Access Control) non corrisponde a nessuno degli indirizzi multicast specificati da queste richieste di set OID.

  1. Il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED nel membro EnabledFilterTypes .

    Nota Se il driver imposta questo flag, deve anche impostare il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE nel membro SupportedQueueProperties . In caso contrario, NDIS non riuscirà la chiamata a NdisMSetMiniportAttributes restituendo NDIS_STATUS_BAD_CHARACTERISTICS.

  2. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve supportare tutti i criteri di test di filtro. Il driver annuncia questo supporto impostando i flag seguenti nel membro 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

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedFilterTests su zero.

  3. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati in vari campi del controllo di accesso multimediale (MAC), IP versione 4 (IPv4) e intestazioni IP versione 6 (IPv6). Il driver annuncia questo supporto impostando i flag seguenti nel membro 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

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedHeaders su zero.

  4. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati all'interno dell'intestazione MAC (Media Access Control) del pacchetto ricevuto. Il driver annuncia questo supporto impostando i flag seguenti nel membro SupportedMacHeaderFields :

    • NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED

    • NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED

    • NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedMacHeaderFields su zero.

  5. Se il driver miniport imposta il flag NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati all'interno dell'intestazione di un pacchetto ARP (Address Resolution Protocol) ricevuto. Il driver annuncia questo supporto impostando i flag seguenti nel membro SupportedARPHeaderFields :

    • NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED

    • NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED

    • NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedARPHeaderFields su zero.

  6. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati all'interno dell'intestazione OSI (Open Systems Interconnect) livello 3 (L3) di un pacchetto IP ricevuto versione 4 (IPv4). Il driver annuncia questo supporto impostando i flag seguenti nel membro SupportedIPv4HeaderFields :

    • NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedIPv4HeaderFields su zero.

  7. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati all'interno dell'intestazione L3 di un pacchetto IP ricevuto versione 6 (IPv6). Il driver annuncia questo supporto impostando i flag seguenti nel membro SupportedIPv6HeaderFields :

    • NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED

    Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedIPv6HeaderFields su zero.

  8. Se il driver miniport imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver miniport deve supportare il filtro dei dati all'interno dell'intestazione OSI layer 4 (L4) di un pacchetto USER Datagram Protocol (UDP) ricevuto. Il driver annuncia questo supporto impostando i flag seguenti nel membro SupportedIUdpHeaderFields :

    • NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED

    Nota Se il pacchetto UDP ricevuto contiene le opzioni IPv4 o le intestazioni di estensione IPv6, la scheda di rete può gestire il pacchetto come se non fosse riuscito al test del filtro UDP. In questo modo, l'adattatore può eliminare automaticamente il pacchetto ricevuto.

Nota Se il driver miniport non imposta il flag di NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED, il driver deve impostare il membro SupportedIUdpHeaderFields su zero.

  1. Il driver miniport deve segnalare il numero massimo di test nei campi dell'intestazione del pacchetto che possono essere specificati per un singolo filtro di unione dei pacchetti. Il driver specifica questo valore nel membro MaxFieldTestsPerPacketCoalescingFilter .

    Nota Le schede di rete che supportano il coalescing dei pacchetti devono supportare cinque o più campi di intestazione di pacchetto che possono essere specificati per un singolo filtro di unione dei pacchetti. Se l'adattatore non supporta il raggruppamento dei pacchetti, il driver miniport deve impostare questo valore su zero.

  2. Il driver miniport deve segnalare il numero massimo di filtri di unione dei pacchetti supportati dalla scheda di rete. Il driver specifica questo valore nel membro MaxPacketCoalescingFilters .

    Nota Le schede di rete che supportano il coalescing dei pacchetti devono supportare dieci o più filtri di unione dei pacchetti. Se l'adattatore non supporta il raggruppamento dei pacchetti, il driver miniport deve impostare questo valore su zero.

Quando NDIS chiama la funzione MiniportInitializeEx del driver miniport , il driver segnala le funzionalità di unione e filtro dei pacchetti della scheda di rete sottostante seguendo questa procedura:

  • Il driver miniport inizializza una struttura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

    Se l'impostazione della parola chiave *PacketCoalescing nel Registro di sistema ha un valore di uno, il driver miniport imposta il membro HardwareReceiveFilterCapabilities su un puntatore alla struttura di NDIS_RECEIVE_FILTER_CAPABILITIES inizializzata in precedenza.

    Se l'impostazione della parola chiave *PacketCoalescing nel Registro di sistema ha un valore pari a zero, il driver miniport non annuncia il supporto per il raggruppamento dei pacchetti. Deve impostare il membro HardwareReceiveFilterCapabilities su NULL.

  • Il driver chiama NdisMSetMiniportAttributes e imposta il parametro MiniportAttributes su un puntatore alla struttura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

Il metodo usato dai driver miniport per segnalare le funzionalità di raggruppamento e filtro dei pacchetti della scheda di rete sottostante è basato sul metodo NDIS 6.20 per la creazione di report delle funzionalità di risparmio energia. Per altre informazioni su questo metodo, vedere Creazione di report sulle funzionalità di Power Management.

Per altre informazioni sul processo di inizializzazione dell'adattatore, vedere Inizializzazione di un adattatore Miniport.