Esclusione del recapito di pacchetti alle porte di destinazione del commutatore estendibile
In questo argomento viene descritto come Hyper-V estensioni del commutatore estendibile può escludere il recapito dei pacchetti alle porte commutatori estendibili. Le porte di destinazione per un pacchetto vengono specificate all'interno del contesto di inoltro fuori banda (OOB) all'interno della struttura di NET_BUFFER_LIST del pacchetto. Per ulteriori informazioni su questo contesto, vedere contesto di inoltro dello switch estensibile Hyper-V.
Nota Questa pagina presuppone che si abbia familiarità con le informazioni e i diagrammi in Panoramica del commutatore estendibile Hyper-V e inoltro ibrido.
Nota Nell'interfaccia del commutatore estendibile, i driver di filtro NDIS sono noti come estensioni del commutatore estendibile e lo stack di driver è noto come stack di driver del commutatore estendibile. Per ulteriori informazioni sulle estensioni, consultare Hyper-V estensioni dello switch estensibile.
I filtri e le estensioni di inoltro possono escludere il recapito dei pacchetti ottenuti nei percorsi di dati in ingresso o in uscita estendibili. L'esclusione del recapito dei pacchetti può essere eseguita nei modi seguenti:
L'estensione può eliminare il pacchetto completando la richiesta o l'indicazione del pacchetto. Ciò esclude il recapito di un pacchetto a qualsiasi porta del commutatore estendibile. Questo metodo può essere usato nei pacchetti con una o più porte di destinazione.
Per i pacchetti ottenuti nel percorso dati di ingresso del commutatore estendibile, l'estensione completa la richiesta di invio del pacchetto chiamando NdisFSendNetBufferListsComplete.
Per i pacchetti ottenuti nel percorso dei dati del commutatore estensibile in uscita, l'estensione completa l'indicazione di ricezione del pacchetto chiamando NdisFReturnNetBufferLists.
Per i pacchetti ottenuti nel percorso dati in uscita con più porte di destinazione, l'estensione può escludere il recapito dei pacchetti modificando i dati per una o più porte di destinazione. L'estensione esegue questa operazione impostando il membro IsExcluded della struttura NDIS_SWITCH_PORT_DESTINATION della porta di destinazione su un valore pari a uno. Questo metodo consente di recapitare il pacchetto a tali porte il cui valore IsExcluded è impostato su zero.
Nota Pacchetti ottenuti nel percorso dati in ingresso non contengono porte di destinazione. Questi dati sono disponibili solo dopo che il commutatore estendibile inoltra il pacchetto nel percorso di uscita dei dati.
Dopo che l'estensione ha modificato il valore IsExcluded della porta di destinazione, è necessario inoltrare il pacchetto nel percorso dei dati in uscita alle estensioni sovrastanti. Tuttavia, se i dati IsExcluded per tutte le porte di destinazione del pacchetto sono impostati su uno, l'estensione dovrebbe scartare il pacchetto completando l'indicazione di ricezione del pacchetto anziché inoltrare il pacchetto.
Nota Dopo che un'estensione del percorso dati ha impostato il valore IsExcluded della porta di destinazione su uno, le estensioni sovrapposte nella direzione di uscita non possono modificare questo valore su zero.
Nota Le estensioni di acquisizione non possono escludere il recapito dei pacchetti alle porte commutatori estendibili.
I filtri e l'inoltro delle estensioni devono seguire queste linee guida per escludere il recapito di pacchetti alle porte commutatori estendibili:
Nel percorso dati in ingresso dell'interruttore estendibile, le estensioni di filtro e inoltro possono escludere la consegna dei pacchetti in base a criteri di policy relativi alla porta sorgente o ai dati di un pacchetto.
Le informazioni sulla porta di origine vengono archiviate nell'unione NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO nei dati OOB della struttura NET_BUFFER_LIST del pacchetto. L'estensione ottiene i dati utilizzando la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL.
Se l'estensione esclude il recapito di un pacchetto ottenuto dal percorso dati in ingresso, deve eliminare il pacchetto completando la richiesta di invio del pacchetto.
Nel percorso dati di ingresso del commutatore estendibile, le estensioni di inoltro determinano le porte di destinazione di un pacchetto e aggiungono queste informazioni ai dati OOB del pacchetto. In base ai criteri applicati dall'estensione, può escludere il recapito dei pacchetti a una porta non aggiungendo le informazioni sulla porta di destinazione ai dati OOB.
Per altre informazioni su questa procedura, vedere Aggiunta di dati della porta di destinazione del commutatore estendibile a un pacchetto.
Nel percorso dati in uscita dello switch estensibile, le estensioni di filtraggio e inoltro possono escludere la consegna del pacchetto in base ai criteri di policy. Ad esempio, le estensioni di filtro possono escludere il recapito dei pacchetti in base ai criteri per le porte di origine o di destinazione di un pacchetto.
Le estensioni escludono il recapito di un pacchetto alle porte di destinazione seguendo questa procedura:
L'estensione ottiene le porte di destinazione del pacchetto chiamando GetNetBufferListDestinations. Se la chiamata restituisce NDIS_STATUS_SUCCESS, il parametro Destinations contiene un puntatore a una struttura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Questa struttura specifica le porte di destinazione del commutatore estendibile del pacchetto. Ogni porta di destinazione viene formattata come struttura NDIS_SWITCH_PORT_DESTINATION.
Nota Se il NumDestinations membro della struttura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY contiene un valore pari a zero, il pacchetto non dispone di dati per le porte di destinazione.
L'estensione esclude il recapito di pacchetti a una porta switch estendibile impostando il IsExcluded membro della struttura NDIS_SWITCH_PORT_DESTINATION della porta di destinazione su un valore pari a uno.
Nota Se l'estensione esclude il recapito del pacchetto a tutte le porte di destinazione, l'estensione deve eliminare il pacchetto completando l'indicazione di ricezione del pacchetto.
Se l'estensione esclude il recapito a una o a tutte le porte di destinazione in un pacchetto, deve eseguire le operazioni seguenti:
L'estensione deve chiamare UpdateNetBufferListDestinations per eseguire il commit di queste modifiche ai dati OOB del pacchetto.
L'estensione deve chiamare ReportFilteredNetBufferLists. Quando questa funzione viene chiamata, l'interfaccia dell'opzione estendibile incrementa i contatori e registra gli eventi per il pacchetto escluso. L'estensione deve effettuare questa chiamata prima di inoltrare il pacchetto nel percorso dei dati del commutatore estendibile da cui ha ottenuto il pacchetto.
Analogamente, se l'estensione completa la richiesta di invio di pacchetti o l'indicazione di escludere il recapito a tutte le porte per il pacchetto, deve anche chiamare ReportFilteredNetBufferLists.
Nota L'estensione può creare un elenco collegato di strutture di NET_BUFFER_LIST per i pacchetti esclusi dall'estensione. Quando l'estensione chiama ReportFilteredNetBufferLists, imposta il parametro NetBufferLists su un puntatore all'elenco collegato.
Per altre informazioni sui percorsi dati di ingresso e uscita estendibili, vedere Hyper-V Percorso dati commutatore estendibile.