Condividi tramite


Ciclo dei pacchetti NDIS

Se il flag NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET nel membro NblFlags della struttura NET_BUFFER_LIST è impostato, il pacchetto è un pacchetto di loopback. I driver di protocollo e i driver di filtro possono controllare questo flag per determinare se un pacchetto è un pacchetto di loopback.

NDIS esegue un ciclo indietro dei pacchetti se vengono soddisfatte tutte le tre condizioni seguenti:

  1. Il tipo di supporto dell'adattatore miniport sottostante è NdisMedium802_3 o NdisMedium802_5.

  2. Viene soddisfatta una delle tre condizioni seguenti:

    1. Un binding di protocollo imposta il parametro NDIS_PACKET_TYPE_PROMISCUOUS con l'OID OID_GEN_CURRENT_PACKET_FILTER per specificare il filtro di pacchetti e, per Windows 8 e versioni successive, non imposta NDIS_PACKET_TYPE_NO_LOCAL nello stesso OID. Uno dei seguenti è vero:

      • È presente più di un'associazione all'adattatore miniport.
      • È collegato all'adattatore miniport un modulo di filtro, e il modulo di filtro ha registrato un handler di ricezione.
    2. Un'associazione di protocollo imposta l'impostazione di NDIS_PACKET_TYPE_ALL_LOCAL con l'OID OID_GEN_CURRENT_PACKET_FILTER per specificare il filtro di pacchetti e uno dei seguenti è true.

      • È presente più di un'associazione all'adattatore miniport.
      • È presente un modulo di filtro collegato all'adattatore miniport e il modulo di filtro ha registrato un gestore di ricezione.
    3. Il chiamante imposta il flag NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK nel parametro SendFlags della funzione NdisSendNetBufferLists.

  3. Il pacchetto è accettabile come determinato dal filtro di pacchetti impostato con l'OID OID_GEN_CURRENT_PACKET_FILTER per l'adattatore miniport. Di seguito sono riportati alcuni esempi:

    • Se il pacchetto è un pacchetto diretto, l'indirizzo di destinazione nel pacchetto deve corrispondere all'indirizzo MAC dell'adattatore miniport.
    • Se il pacchetto è un pacchetto multicast, il filtro di pacchetti deve avere NDIS_PACKET_TYPE_ALL_MULTICAST impostato oppure l'indirizzo di destinazione corrisponde a uno degli indirizzi multicast nell'elenco di indirizzi multicast dell'adattatore miniport e il filtro di pacchetti ha NDIS_PACKET_TYPE_MULTICAST impostato.
    • Se il pacchetto è un pacchetto broadcast, il filtro pacchetti dell'adattatore miniport deve avere NDIS_PACKET_TYPE_BROADCAST impostato.
    • Il filtro pacchetti dell'adattatore miniport ha NDIS_PACKET_TYPE_PROMISCUOUS o NDIS_PACKET_TYPE_ALL_LOCAL impostato.

Un'associazione di protocollo riceve pacchetti di loopback se una delle condizioni seguenti è vera:

  1. L'associazione al protocollo è il mittente originale del pacchetto e NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK è impostato.

  2. L'associazione di protocollo non imposta NDIS_PACKET_TYPE_NO_LOCAL nel filtro pacchetti.

Un'associazione di protocollo non riceverà pacchetti di loopback se una delle condizioni seguenti è vera:

  1. L'associazione di protocollo imposta NDIS_PACKET_TYPE_NO_LOCAL nel filtro di pacchetti e non è il mittente originale del pacchetto.

  2. L'associazione di protocollo è il mittente originale, ma NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK non è impostato nel parametro SendFlags in una chiamata alla funzione NdisSendNetBufferLists.

La figura seguente illustra il flusso di logica dell'algoritmo di loopback.

diagramma di flusso che mostra il flusso di logica dell'algoritmo di loopback.