Ciclo di pacchetti NDIS

Se il flag di 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.

I cicli NDIS tornano ai pacchetti se vengono soddisfatte tutte le tre condizioni seguenti:

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

  2. Una delle tre condizioni seguenti è soddisfatta:

    1. Un'associazione di protocollo imposta l'impostazione NDIS_PACKET_TYPE_PROMISCUOUS con l'OID OID_GEN_CURRENT_PACKET_FILTER per specificare il filtro dei pacchetti (e, per Windows 8 e versioni successive, non è stato impostato NDIS_PACKET_TYPE_NO_LOCAL nello stesso OID) e uno dei seguenti è true:

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

      • C'è più di un'associazione all'adattatore miniport.
      • Esiste 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 di NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK nel parametro SendFlags della funzione NdisSendNetBufferLists .

  3. Il pacchetto è accettabile come determinato dal filtro dei pacchetti impostato con l'OID OID_GEN_CURRENT_PACKET_FILTER per l'adattatore miniport. Di seguito vengono 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 dei pacchetti deve avere NDIS_PACKET_TYPE_ALL_MULTICAST impostato o l'indirizzo di destinazione corrisponde a uno degli indirizzi multicast nell'elenco indirizzi multicast dell'adattatore miniport e il filtro del pacchetto ha NDIS_PACKET_TYPE_MULTICAST impostato.
    • Se il pacchetto è un pacchetto di trasmissione, il filtro del pacchetto dell'adattatore miniport deve avere NDIS_PACKET_TYPE_BROADCAST impostato.
    • Il filtro del pacchetto dell'adattatore miniport ha NDIS_PACKET_TYPE_PROMISCUOUS o NDIS_PACKET_TYPE_ALL_LOCAL impostato.

Un'associazione di protocollo riceve pacchetti di loopback se uno dei seguenti è true:

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

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

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

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

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

Nella figura seguente viene illustrato il flusso di logica dell'algoritmo di loopback.

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