Condividi tramite


Gestione dei dati di runtime del commutatore estendibile Hyper-V

In questo argomento vengono descritte le operazioni di salvataggio e ripristino per le estensioni del commutatore estendibili Hyper-V. Queste operazioni consentono a un'estensione di salvare e ripristinare i dati di runtime per singole schede di rete di commutatori estendibili. Queste operazioni vengono eseguite quando viene arrestata o avviata una partizione figlio Hyper-V con una connessione della scheda di rete a una porta commutatore estendibile.

Salvataggio dei dati di runtime del commutatore estendibile Hyper-V

In questa sezione viene descritta l'operazione in base alla quale un'estensione del commutatore estendibile Hyper-V può salvare i dati di runtime per singole schede di rete.This section describe the operation by which a Hyper-V Extensible Switch extension can save run-time data for individual network adapters (NIC). Questa operazione viene eseguita quando viene arrestata una partizione figlio Hyper-V con una connessione della scheda di rete a una porta commutatore estendibile o il relativo stato viene salvato.

Gestione della richiesta di OID_SWITCH_NIC_SAVE

Quando una partizione figlio Hyper-V con una connessione di scheda di rete a una porta commutatore estendibile viene arrestata o il relativo stato viene salvato, l'interfaccia del commutatore estendibile Hyper-V riceve una notifica. In questo modo il bordo del protocollo dell'opzione estendibile emette una richiesta di metodo OID (Object Identifier) di OID_SWITCH_NIC_SAVE verso il basso lo stack di driver del commutatore estendibile. Quando un'estensione del commutatore estendibile riceve questa richiesta OID, può salvare i dati di runtime per la connessione alla scheda di rete specificata collegata alla partizione figlio.

Il membro InformationBuffer della struttura NDIS_OID_REQUEST per la richiesta di OID_SWITCH_NIC_SAVE contiene un puntatore a una struttura NDIS_SWITCH_NIC_SAVE_STATE. Questa struttura viene allocata dal bordo del protocollo del commutatore estendibile e inizializzata nel modo seguente:

  • Il membro Header viene inizializzato per contenere il tipo corrente, revisione della struttura NDIS_SWITCH_NIC_SAVE_STATE . Le dimensioni sono impostate sulle dimensioni del buffer completo.

  • Il membro PortId contiene l'identificatore univoco della porta del commutatore estendibile per cui viene eseguita l'operazione di salvataggio.

Quando riceve la richiesta del metodo OID_SWITCH_NIC_SAVE , l'estensione esegue le operazioni seguenti:

  1. L'estensione legge il membro PortId della struttura NDIS_SWITCH_NIC_SAVE_STATE .

  2. Se l'estensione dispone di dati di runtime da salvare per la scheda di interfaccia di rete specificata, salva i dati all'interno della struttura NDIS_SWITCH_NIC_SAVE_STATE a partire da SaveDataOffset byte dall'inizio della struttura. L'estensione completa quindi la richiesta del metodo OID con NDIS_STATUS_SUCCESS.

  3. Se la struttura NDIS_SWITCH_NIC_SAVE_STATE non fornisce un buffer sufficiente per contenere lo stato di runtime, l'estensione imposta il campo BytesNeededed della struttura del metodo su NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 più la quantità di buffer necessaria per contenere i dati di salvataggio e completa l'OID con NDIS_STATUS_BUFFER_TOO_SHORT. L'OID verrà rimesso con le dimensioni necessarie.

  4. Se l'estensione non dispone di dati di runtime da salvare per la scheda di interfaccia di rete specificata, deve chiamare NdisFOidRequest. In questo modo la richiesta del metodo OID viene inoltrata ai driver sottostanti nello stack di driver del commutatore estendibile. Per altre informazioni su questa procedura, vedere Filtro delle richieste OID in un driver di filtro NDIS.

Se l'estensione dispone di dati di porta di runtime da salvare, è necessario seguire queste linee guida quando salva i dati delle porte di runtime all'interno della struttura NDIS_SWITCH_NIC_SAVE_STATE:

  1. L'estensione imposta il membro ExtensionId sul valore GUID che identifica in modo univoco il driver.

  2. L'estensione imposta il membro ExtensionFriendlyName sul nome del driver.

    Nota Il tipo di dati NDIS_SWITCH_EXTENSION_FRIENDLYNAME è definito dalla struttura IF_COUNTED_STRING . Una stringa definita da questa struttura non deve essere terminata con null. Tuttavia, la lunghezza della stringa deve essere impostata nel membro Length di questa struttura. Se la stringa è con terminazione NULL, il membro Length non deve includere il carattere NULL di terminazione.

  3. Se una classe di funzionalità è associata ai dati di runtime salvati, l'estensione imposta FeatureClassId con il GUID che identifica in modo univoco la classe.

    Nota Se una classe di funzionalità non è associata ai dati di runtime salvati, l'estensione imposta FeatureClassId su zero.

  4. L'estensione copia i dati di runtime nel membro SaveData e imposta il membro SaveDataSize sulle dimensioni, in byte, dei dati di runtime.

Nota L'estensione non deve modificare i membri Header o PortId della struttura NDIS_SWITCH_NIC_SAVE_STATE .

Le richieste di metodo OID di OID_SWITCH_NIC_SAVE vengono infine gestite dal bordo miniport sottostante del commutatore estendibile. Dopo che questa richiesta di metodo OID è stata inoltrata al driver miniport tramite lo stack di driver del commutatore estendibile, il driver miniport completa la richiesta OID con NDIS_STATUS_SUCCESS. In questo modo viene informato il bordo del protocollo del commutatore estendibile che tutte le estensioni nello stack di driver del commutatore estendibile sono state sottoposte a query per i dati delle porte di runtime. Il bordo del protocollo dell'opzione estendibile invia quindi una richiesta di set OID di OID_SWITCH_NIC_SAVE_COMPLETE per completare l'operazione di salvataggio.

Gestione della richiesta di OID_SWITCH_NIC_SAVE_COMPLETE

Quando una partizione figlio Hyper-V con una connessione scheda di rete a una porta commutatore estendibile viene sospesa o il relativo stato viene salvato, l'interfaccia del commutatore estendibile Hyper-V riceve una notifica. In questo modo il bordo del protocollo dell'opzione estendibile emette una richiesta di metodo OID (Object Identifier) di OID_SWITCH_NIC_SAVE verso il basso lo stack di driver del commutatore estendibile.

Quando ogni estensione del commutatore estendibile Hyper-V ha salvato i dati di runtime, il bordo del protocollo del commutatore estendibile notifica alle estensioni sottostanti che l'operazione di salvataggio è stata completata. Il bordo del protocollo esegue questa operazione inviando una richiesta di set OID di OID_SWITCH_NIC_SAVE_COMPLETE verso il basso lo stack di driver del commutatore estendibile.

Nota Quando viene avviata un'operazione di salvataggio in fase di esecuzione per una connessione alla scheda di rete del commutatore estendibile, un'altra operazione di salvataggio per la stessa connessione alla scheda di rete non verrà eseguita fino a quando non viene eseguita la richiesta di OID_SWITCH_NIC_SAVE_COMPLETE . Tuttavia, le operazioni di salvataggio per altre connessioni alla scheda di rete potrebbero verificarsi durante questo periodo.

Il membro InformationBuffer della struttura NDIS_OID_REQUEST per la richiesta di OID_SWITCH_NIC_SAVE_COMPLETE contiene un puntatore a una struttura NDIS_SWITCH_NIC_SAVE_STATE. Questa struttura viene allocata dal bordo del protocollo del commutatore estendibile.

Quando riceve la richiesta di set OID di OID_SWITCH_NIC_SAVE_COMPLETE, l'estensione deve seguire queste linee guida:

  • L'estensione non deve modificare la struttura NDIS_SWITCH_NIC_SAVE_STATE associata alla richiesta OID.

  • L'estensione deve chiamare NdisFOidRequest per inoltrare questa richiesta OID tramite lo stack di estensioni del commutatore estendibile. L'estensione non deve avere esito negativo sulla richiesta OID.

    Nota L'estensione deve monitorare lo stato di completamento di questa richiesta OID. L'estensione esegue questa operazione per rilevare se l'operazione di salvataggio è stata completata correttamente.

Le richieste di metodo OID di OID_SWITCH_NIC_SAVE_COMPLETE vengono infine gestite dal bordo miniport sottostante del commutatore estendibile. Dopo che questa richiesta del metodo OID è stata ricevuta dal bordo miniport, completa la richiesta OID con NDIS_STATUS_SUCCESS. In questo modo viene informato il bordo del protocollo del commutatore estendibile che tutte le estensioni nello stack di driver del commutatore estendibile hanno completato l'operazione di salvataggio.

Ripristino dei dati di runtime del commutatore estendibile Hyper-V

Quando una partizione figlio Hyper-V con una connessione di scheda di rete a una porta commutatore estendibile viene ripresa da una pausa, l'interfaccia del commutatore estendibile Hyper-V riceve una notifica. In questo modo il bordo del protocollo del commutatore estendibile emette una richiesta di set di identificatori di oggetto (OID) di OID_SWITCH_NIC_RESTORE verso il basso lo stack di driver del commutatore estendibile. Quando un'estensione riceve questa richiesta OID, può ripristinare i dati di runtime per la porta del commutatore estendibile usata dalla partizione figlio.

Il membro InformationBuffer della struttura NDIS_OID_REQUEST per la richiesta di OID_SWITCH_NIC_RESTORE contiene un puntatore a una struttura NDIS_SWITCH_NIC_SAVE_STATE. Questa struttura viene allocata dal bordo del protocollo del commutatore estendibile.

Quando riceve la richiesta di set OID di OID_SWITCH_NIC_RESTORE, l'estensione dell'opzione estendibile deve prima determinare se è proprietaria dei dati di runtime. L'estensione esegue questa operazione confrontando il valore del membro ExtensionId della struttura NDIS_SWITCH_NIC_SAVE_STATE con il valore GUID usato dall'estensione per identificarsi.

Se l'estensione è proprietaria dei dati di runtime per una scheda di interfaccia di rete estendibile, i dati vengono ripristinati nel modo seguente:

  1. L'estensione copia i dati di runtime nel membro SaveData nell'archiviazione allocata dal driver.

    Nota Il valore del membro PortId della struttura NDIS_SWITCH_NIC_SAVE_STATE può essere diverso dal valore PortId al momento del salvataggio dei dati in fase di esecuzione. Ciò può verificarsi se i dati in fase di esecuzione sono stati salvati durante una migrazione in tempo reale da un host a un altro. Tuttavia, la configurazione della scheda di interfaccia di rete del commutatore estendibile viene mantenuta durante la migrazione in tempo reale. Ciò consente all'estensione di ripristinare i dati di runtime nella scheda di interfaccia di rete dell'opzione estendibile usando il nuovo valore PortId .

  2. L'estensione completa la richiesta di set OID con NDIS_STATUS_SUCCESS.

Se l'estensione non possiede i dati di runtime specificati da salvare, l'estensione chiama NdisFOidRequest. In questo modo, la richiesta del set OID viene inoltrata ai driver sottostanti nello stack di driver del commutatore estendibile. In questo caso, l'estensione non deve modificare la struttura NDIS_SWITCH_NIC_SAVE_STATE associata alla richiesta OID. Per altre informazioni su come inoltrare le richieste OID, vedere Filtro delle richieste OID in un driver di filtro NDIS.

Se la richiesta di set OID di OID_SWITCH_NIC_RESTORE viene completata con NDIS_STATUS_SUCCESS, il bordo del protocollo del commutatore estendibile emette un'altra richiesta di set OID. Quando riceve questa nuova richiesta di set OID, l'estensione può eseguire una delle operazioni seguenti:

  • Se possiede i dati di runtime nella nuova richiesta OID, l'estensione ripristina i dati di runtime aggiuntivi all'interno della struttura NDIS_SWITCH_NIC_SAVE_STATE. L'estensione completa quindi la richiesta OID con NDIS_STATUS_SUCCESS.

  • Se non possiede i dati di runtime nella nuova richiesta OID, l'estensione chiama NdisFOidRequest per inoltrare la richiesta di set OID ai driver sottostanti.

OID_SWITCH_NIC_RESTORE_COMPLETE
L'interfaccia del commutatore estendibile segnala il bordo del protocollo del commutatore estendibile per rilasciare questo OID al completamento dell'operazione di ripristino dei dati di runtime per una scheda di rete del commutatore estendibile.

Questa richiesta OID notifica all'estensione che l'operazione di ripristino è stata completata solo per una scheda di interfaccia di rete estendibile specificata.

Per altre informazioni su questa richiesta OID, vedere OID_SWITCH_NIC_RESTORE_COMPLETE.

Nota Se la richiesta set di OID_SWITCH_NIC_RESTORE viene ricevuta dal bordo miniport del commutatore estendibile, completa la richiesta OID con NDIS_STATUS_SUCCESS. In questo modo viene informato il bordo del protocollo del commutatore estendibile che nessuna estensione è proprietaria dei dati di runtime. In questo caso, l'interfaccia del commutatore estendibile registra un evento che documenta i valori dei membri ExtensionId e PortId per l'estensione che ha originariamente salvato i dati della porta di runtime.