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:
Il tipo di supporto dell'adattatore miniport sottostante è NdisMedium802_3 o NdisMedium802_5.
Una delle tre condizioni seguenti è soddisfatta:
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.
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.
Il chiamante imposta il flag di NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK nel parametro SendFlags della funzione NdisSendNetBufferLists .
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:
L'associazione del protocollo è il mittente originale del pacchetto e NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK è impostato.
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:
L'associazione del protocollo imposta NDIS_PACKET_TYPE_NO_LOCAL nel filtro dei pacchetti e non è il mittente originale per il pacchetto.
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.