Esclusione del recapito dei pacchetti alle porte di destinazione del commutatore estendibile

Questo argomento descrive in che modo le estensioni del commutatore estendibile Hyper-V possono 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 altre informazioni su questo contesto, vedere Contesto di inoltro del commutatore estendibile Hyper-V.

Nota Questa pagina presuppone che si abbia familiarità con le informazioni e i diagrammi in Panoramica del commutatore estendibile Hyper-V e dell'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 switch estendibile. Per altre informazioni sulle estensioni, vedere Estensioni del commutatore estendibile Hyper-V.

L'applicazione di filtri e l'inoltro delle estensioni possono escludere il recapito dei pacchetti ottenuti nei percorsi di dati in ingresso o in uscita del commutatore estendibile. 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 dati di uscita del commutatore estendibile, 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 di uno. Questo metodo consente di recapitare il pacchetto a tali porte il cui valore IsExcluded è impostato su zero.

    Nota I pacchetti ottenuti nel percorso dati in ingresso non contengono porte di destinazione. Questi dati sono disponibili solo dopo che l'opzione estendibile inoltra il pacchetto verso l'alto il percorso dei dati in uscita.

Dopo che l'estensione ha modificato il valore IsExcluded della porta di destinazione, deve inoltrare il pacchetto nel percorso dei dati in uscita alle estensioni overlying. Tuttavia, se i dati IsExcluded per tutte le porte di destinazione del pacchetto sono impostati su uno, l'estensione deve eliminare il pacchetto completando l'indicazione di ricezione del pacchetto anziché inoltrarla.

Nota Dopo che un'estensione ha impostato il valore IsExcluded della porta di destinazione su uno, le estensioni in uscita nel percorso dati in uscita non possono modificare questo valore su zero.

Nota L'acquisizione delle estensioni non può 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 dei pacchetti alle porte commutatori estendibili:

  • Nel percorso dati di ingresso del commutatore estendibile, il filtro e l'inoltro delle estensioni possono escludere il recapito dei pacchetti in base a criteri per la porta o i dati di origine 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 usando 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, l'inoltro delle estensioni determina le porte di destinazione di un pacchetto e aggiunge 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 dell'opzione estendibile in uscita, i filtri e l'inoltro delle estensioni possono escludere il recapito del pacchetto in base ai criteri. 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:

    1. 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 membro NumDestinations della struttura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY contiene un valore pari a zero, il pacchetto non contiene dati per le porte di destinazione.

  1. L'estensione esclude il recapito dei pacchetti a una porta commutatore estendibile impostando il membro IsExcluded 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.

  2. Se l'estensione esclude il recapito a una o a tutte le porte di destinazione in un pacchetto, è necessario 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 del commutatore 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 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 del commutatore, vedere Percorso dati commutatore estendibile Hyper-V.