Traffico di pacchetti di origine

Questo argomento descrive il modo in cui le estensioni Hyper-V hanno origine nuovi pacchetti e li inseriscono nel percorso dati di commutatore estendibile.

Nota Questa pagina presuppone che si abbia familiarità con le informazioni e i diagrammi in Panoramica del commutatore estendibile Hyper-V e dell'inoltroibrido.

Nota Nell'interfaccia del commutatore estendibile i driver di filtro NDIS sono noti come estensioni di commutatori estendibili e lo stack di driver è noto come stack di driver di commutatore estendibile. Per altre informazioni sulle estensioni, vedere Estensioni di commutatori estendibili Hyper-V.

Le estensioni del commutatore estendibile possono inserire solo nuovi pacchetti nel percorso dati in ingresso estendibile. Ciò garantisce che l'interfaccia del commutatore estendibile possa filtrare e inoltrare correttamente questi pacchetti. Le estensioni devono seguire queste linee guida per inserire nuovi pacchetti nel percorso dati in ingresso:

  • L'estensione deve innanzitutto allocare una struttura NET_BUFFER_LIST per un nuovo pacchetto.

  • Dopo che l'estensione alloca una struttura NET_BUFFER_LIST per un nuovo pacchetto, deve chiamare la funzione del gestore AllocateNetBufferListForwardingContext per allocare il contesto di inoltro del commutatore estendibile per il pacchetto.

    Il contesto di inoltro risiede nei dati fuori banda (OOB) del pacchetto. Contiene informazioni di inoltro per il pacchetto, ad esempio la porta di origine e una matrice di una o più porte di destinazione.

    Per altre informazioni sul contesto di inoltro, vedere Contesto di inoltro estendibile Hyper-V.

  • Dopo che l'estensione chiama AllocateNetBufferListForwardingContext, la porta di origine per il pacchetto verrà impostata su NDIS_SWITCH_DEFAULT_PORT_ID. Un pacchetto con un identificatore di porta di origine di NDIS_SWITCH_DEFAULT_PORT_ID è attendibile e ignora i criteri di porta di commutatore estendibili, ad esempio elenchi di controllo di accesso (ACL) e qualità del servizio (QoS).

    L'estensione può voler che il pacchetto venga considerato come se sia stato generato da una determinata porta. In questo modo, i criteri per la porta devono essere applicati al pacchetto. L'estensione chiama SetNetBufferListSource per modificare la porta di origine per il pacchetto.

    Tuttavia, potrebbero verificarsi situazioni in cui l'estensione potrebbe voler assegnare l'identificatore della porta di origine del pacchetto a NDIS_SWITCH_DEFAULT_PORT_ID. Ad esempio, l'estensione potrebbe voler impostare l'identificatore della porta di origine su NDIS_SWITCH_DEFAULT_PORT_ID per i pacchetti di controllo proprietari inviati a un dispositivo nella rete esterna.

  • Se l'estensione di inoltro invia un nuovo pacchetto nel percorso dati in ingresso, deve determinare le porte di destinazione per il pacchetto. Per altre informazioni su questa procedura, vedere Aggiunta dei dati della porta di destinazione estendibile a un pacchetto.

    Nota Un'estensione di acquisizione o filtro non può aggiungere nuove porte di destinazione al nuovo pacchetto.

  • Quando l'estensione crea un nuovo pacchetto, i dati del pacchetto si trovano in locale o attendibile, memoria nel sistema operativo padre della partizione padre Hyper-V. Questa memoria non è accessibile dalla partizione figlio. Pertanto, è considerato "sicuro" dagli aggiornamenti non sincronizzati dal sistema operativo guest in esecuzione in tale partizione.

    L'estensione deve ottenere l'unione NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO per il nuovo pacchetto usando la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL . L'estensione deve impostare il membro IsPacketDataSafe su TRUE. Questo specifica che tutti i dati del pacchetto si trovano in memoria attendibile.

  • Quando l'estensione chiama NdisFSendNetBufferLists per inserire il pacchetto nel percorso dati in ingresso, deve impostare il parametro Flags con le impostazioni del flag di commutatore estendibili appropriate. Per altre informazioni su queste impostazioni di flag, vedere Invio e ricezione di flag estendibili Hyper-V.

  • Quando NDIS chiama la funzione FilterSendNetBufferListsComplete dell'estensione per completare la richiesta di invio del nuovo pacchetto, l'estensione deve chiamare FreeNetBufferListForwardingContext per liberare il contesto di inoltro allocato. L'estensione deve eseguire questa operazione prima di liberare o riutilizzare la struttura di NET_BUFFER_LIST per il pacchetto.

Per altre informazioni sui percorsi di dati di ingresso e uscita estendibili, vedere Percorso dati estendibile di commutatore estendibile Hyper-V.