Sdílet prostřednictvím


Správa dat Hyper-V rozšiřitelných přepínačů Run-Time

Toto téma popisuje operace ukládání a obnovení pro rozšíření Hyper-V rozšiřitelných přepínačů. Tyto operace umožňují rozšíření ukládat a obnovovat data za běhu pro jednotlivé rozšiřitelné síťové adaptéry(NIC). Tyto operace se provádějí, když se zastaví nebo spustí podřízený oddíl Hyper-V, který má připojení síťového adaptéru k rozšiřitelnému portu přepínače.

Ukládání dat rozšiřitelného přepínače Hyper-V Run-Time

Tato část popisuje operaci, pomocí které rozšíření pro přepínač Hyper-V může uložit data za běhu pro jednotlivé síťové adaptéry (NIC). Tato operace se provádí, když se zastaví podřízený oddíl Hyper-V s připojením síťového adaptéru k portu rozšiřitelného přepínače nebo když se ukládá jeho stav.

Zpracování požadavku OID_SWITCH_NIC_SAVE

Když se zastaví Hyper-V podřízený oddíl s připojením síťového adaptéru k rozšiřitelnému portu přepínače nebo se uloží jeho stav, zobrazí se oznámení Hyper-V rozšiřitelné rozhraní přepínače. To způsobí, že protokolová hrana rozšiřitelného přepínače vydá požadavek na metodu identifikátoru objektu (OID) OID_SWITCH_NIC_SAVE dolů po zásobníku rozšiřitelného ovladače přepínače. Když rozšíření rozšiřitelného přepínače obdrží tento požadavek OID, může uložit data za běhu pro zadané připojení síťového adaptéru připojeného k podřízeném oddílu.

Člen InformationBuffer struktury NDIS_OID_REQUEST pro požadavek OID_SWITCH_NIC_SAVE obsahuje ukazatel na NDIS_SWITCH_NIC_SAVE_STATE strukturu. Tato struktura je přidělena hraničním protokolem rozšiřitelného přepínače a inicializována následujícím způsobem:

  • Člen hlavička je inicializován k tomu, aby obsahoval aktuální typ a revizi struktury NDIS_SWITCH_NIC_SAVE_STATE. Velikost je nastavena na maximální velikost vyrovnávací paměti.

  • Člen PortId obsahuje jedinečný identifikátor rozšiřitelného portu přepínače, pro který se provádí operace ukládání.

Když obdrží požadavek na metodu OID_SWITCH_NIC_SAVE , rozšíření provede následující kroky:

  1. Rozšíření načte člena PortId ze struktury NDIS_SWITCH_NIC_SAVE_STATE.

  2. Pokud má rozšíření běhová data, která je třeba uložit pro zadanou síťovou kartu, uloží svoje data ve struktuře NDIS_SWITCH_NIC_SAVE_STATE počínaje SaveDataOffset bajty od začátku struktury. Rozšíření pak dokončí požadavek metody OID s NDIS_STATUS_SUCCESS.

  3. Pokud struktura NDIS_SWITCH_NIC_SAVE_STATE neposkytuje dostatečnou vyrovnávací paměť pro uložení stavu modulu runtime, rozšíření nastaví pole metody struktury BytesNeeded na NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 plus množství vyrovnávací paměti potřebné k uložení dat a dokončí identifikátor OID s NDIS_STATUS_BUFFER_TOO_SHORT. OID bude znovu vydán s požadovanou velikostí.

  4. Pokud rozšíření nemá za běhu data k uložení pro zadanou síťovou kartu, musí volat NdisFOidRequest. Tím se požadavek metody OID předá podkladovým ovladačům v rozšiřitelném zásobníku ovladačů přepínače. Další informace o tomto postupu naleznete v tématu Filtrování požadavků OID v ovladači filtru NDIS.

Pokud má rozšíření data portu za běhu, která se mají uložit, musí při ukládání dat portů za běhu ve struktuře NDIS_SWITCH_NIC_SAVE_STATE postupovat podle těchto pokynů:

  1. Rozšíření nastaví člen ExtensionId na hodnotu GUID, která jednoznačně identifikuje ovladač.

  2. Rozšíření nastaví člen ExtensionFriendlyName na název ovladače.

    Poznámka Datový typ NDIS_SWITCH_EXTENSION_FRIENDLYNAME je definován strukturou IF_COUNTED_STRING . Řetězec definovaný touto strukturou nemusí být ukončen s hodnotou null. Délka řetězce však musí být nastavena ve členu Délka této struktury. Pokud je řetězec ukončen s hodnotou NULL, člen délka nesmí obsahovat ukončující znak NULL.

  3. Pokud je třída prvků přidružena k uloženým datům za běhu, rozšíření nastaví FeatureClassId na GUID, který jedinečně identifikuje třídu.

    Poznámka Pokud třída funkce není přidružena k uloženým datům za běhu, rozšíření nastaví FeatureClassId na nulu.

  4. Rozšíření zkopíruje data za běhu do člena SaveData a nastaví člen SaveDataSize na velikost v bajtech dat za běhu.

Poznámka Rozšíření nesmí měnit členy header nebo PortId struktury NDIS_SWITCH_NIC_SAVE_STATE .

Požadavky na metodu OID OID_SWITCH_NIC_SAVE jsou nakonec zpracovávány podkladovým rozhraním miniportu rozšiřitelného přepínače. Jakmile se tento požadavek na metodu OID přepošle ovladači miniportu prostřednictvím zásobníku ovladačů rozšiřitelného přepínače, ovladač miniportu tento požadavek OID dokončí s hodnotou NDIS_STATUS_SUCCESS. Tímto se upozorňuje okraj protokolu rozšiřitelného přepínače, že byla dotazována všechna rozšíření v zásobníku ovladačů rozšiřitelného přepínače na běhová data portů. Hrana protokolu rozšiřitelného přepínače pak vydá požadavek sady identifikátorů OID_SWITCH_NIC_SAVE_COMPLETE k dokončení operace uložení.

Zpracování požadavku OID_SWITCH_NIC_SAVE_COMPLETE

Pokud je pozastaven podřízený oddíl Hyper-V, který má připojení síťového adaptéru k rozšiřitelnému portu přepínače, nebo pokud je ukládán jeho stav, je rozhraní rozšiřitelného přepínače Hyper-V informováno. To způsobí, že hrana protokolu rozšiřitelného přepínače vydá požadavek metody identifikátoru objektu (OID) OID_SWITCH_NIC_SAVE dolů po zásobníku ovladače rozšiřitelného přepínače.

Když každé rozšíření rozšiřitelného přepínače Hyper-V uložilo data za běhu, protokolový okraj rozšiřitelného přepínače oznámí podkladovým rozšířením, že operace uložení byla dokončena. Hrana protokolu to dělá tak, že provede požadavek sady OID OID_SWITCH_NIC_SAVE_COMPLETE v rozšiřitelném zásobníku ovladače přepínače.

Poznámka Při spuštění běhové operace ukládání pro připojení rozšiřitelného přepínače síťového adaptéru nebude provedeno další uložení pro stejné připojení síťového adaptéru, dokud není vydán požadavek OID_SWITCH_NIC_SAVE_COMPLETE. Během této doby však mohou probíhat operace ukládání pro jiná připojení síťových adaptérů.

Člen InformationBuffer struktury NDIS_OID_REQUEST pro požadavek OID_SWITCH_NIC_SAVE_COMPLETE obsahuje ukazatel na NDIS_SWITCH_NIC_SAVE_STATE strukturu. Tato struktura je přidělena okrajovým protokolem rozšiřitelného přepínače.

Když obdrží požadavek sady identifikátorů OID OID_SWITCH_NIC_SAVE_COMPLETE, musí rozšíření postupovat podle těchto pokynů:

  • Rozšíření nesmí upravovat strukturu NDIS_SWITCH_NIC_SAVE_STATE, která je přidružená k požadavku OID.

  • Rozšíření musí zavolat NdisFOidRequest, aby předalo tento požadavek OID prostřednictvím zásobníku rozšiřitelného přepínače. Rozšíření nesmí selhat v požadavku OID.

    Poznámka Rozšíření by mělo monitorovat stav dokončení tohoto požadavku OID. Rozšíření to provede, aby zjistilo, jestli se operace uložení úspěšně dokončila.

Požadavky na metodu OID OID_SWITCH_NIC_SAVE_COMPLETE jsou nakonec zpracovány podkladovým miniportovým rozhraním rozšiřitelného přepínače. Jakmile rozhraní miniportu obdrží tento požadavek metody OID, dokončí požadavek OID s NDIS_STATUS_SUCCESS. To upozorňuje hranu protokolu rozšiřitelného přepínače, že všechna rozšíření ve stacku ovladačů rozšiřitelného přepínače dokončila operaci uložení.

Obnovení dat Hyper-V rozšiřitelného přepínače Run-Time

Když se podřízený oddíl Hyper-V, který má připojení síťového adaptéru k rozšiřitelnému portu přepínače, obnoví z pozastavení, je rozhraní rozšiřitelného přepínače Hyper-V upozorněno. To způsobí, že hrana protokolu rozšiřitelného přepínače vydá žádost o nastavení identifikátorů objektu (OID) OID_SWITCH_NIC_RESTORE směrem dolů v zásobníku ovladače rozšiřitelného přepínače. Když rozšíření obdrží tento požadavek OID, může obnovit data za běhu pro rozšiřitelný port přepínače používaný podřízeným oddílem.

Člen InformationBuffer struktury NDIS_OID_REQUEST pro požadavek OID_SWITCH_NIC_RESTORE obsahuje ukazatel na NDIS_SWITCH_NIC_SAVE_STATE strukturu. Tato struktura je přidělena hranicí protokolu rozšiřitelného přepínače.

Když obdrží požadavek na sadu OID OID_SWITCH_NIC_RESTORE, rozšíření přepínače rozšiřitelného musí nejprve určit, zda vlastní běhová data. Toto rozšíření provede porovnáním hodnoty ExtensionId člen struktury NDIS_SWITCH_NIC_SAVE_STATE s hodnotou GUID, kterou rozšíření používá k identifikaci sebe sama.

Pokud rozšíření vlastní běhová data pro rozšiřitelnou síťovou kartu přepínače, obnoví tato data následujícím způsobem:

  1. Rozšíření zkopíruje data za běhu v členu SaveData do úložiště přiděleného ovladačem.

    Poznámka Hodnota PortId člen struktury NDIS_SWITCH_NIC_SAVE_STATE se může lišit od hodnoty PortId v době uložení dat za běhu. K tomu může dojít v případě, že se během migrace za provozu z jednoho hostitele do druhého uložila data za běhu. Během migrace za provozu se však zachová konfigurace síťové karty rozšiřitelného přepínače. Rozšíření umožňuje obnovit data za běhu do síťové karty rozšiřitelného přepínače pomocí nové hodnoty PortId.

  2. Rozšíření dokončí požadavek na nastavení OID s NDIS_STATUS_SUCCESS.

Pokud rozšíření nevlastní zadaná data za běhu, která se mají uložit, rozšíření volá NdisFOidRequest. Tento požadavek sady OID se předává podkladovým ovladačům v rozšiřitelném zásobníku ovladačů přepínače. V tomto případě rozšíření nesmí upravovat strukturu NDIS_SWITCH_NIC_SAVE_STATE, která je přidružená k požadavku OID. Další informace o předávání požadavků OID naleznete v tématu Filtrování požadavků OID v ovladači filtru NDIS.

Pokud je žádost o nastavení OID OID_SWITCH_NIC_RESTORE úspěšně dokončena s NDIS_STATUS_SUCCESS, protokolová hrana rozšiřitelného přepínače vydá další žádost o nastavení OID. Když obdrží tento nový požadavek sady identifikátorů, může rozšíření provést jednu z následujících věcí:

  • Pokud vlastní běhová data v novém požadavku OID, rozšíření obnoví další běhová data v rámci struktury NDIS_SWITCH_NIC_SAVE_STATE. Rozšíření pak dokončí požadavek OID s NDIS_STATUS_SUCCESS.

  • Pokud v novém požadavku OID nevlastní běhová data, rozšíření volá NdisFOidRequest aby předalo daný požadavek OID podkladovým ovladačům.

OID_SWITCH_NIC_RESTORE_COMPLETE
Rozšiřitelné rozhraní přepínače signalizuje protokolovou hranu, aby vydalo tento identifikátor OID při dokončení operace obnovení běhových dat pro síťový adaptér rozšiřitelného přepínače.

Tento požadavek OID oznámí rozšíření, že operace obnovení byla dokončena pouze pro zadanou síťovou kartu rozšiřitelného přepínače.

Další informace o tomto požadavku OID najdete viz OID_SWITCH_NIC_RESTORE_COMPLETE.

Poznámka Pokud je požadavek sady OID_SWITCH_NIC_RESTORE přijat miniportem rozšiřitelného přepínače, dokončí požadavek OID NDIS_STATUS_SUCCESS. Tím se upozorní okraj protokolu rozšiřitelného přepínače, že žádné rozšíření nevlastní data za běhu. Pokud k tomu dojde, rozšiřitelné rozhraní přepínače zaznamená událost, která dokumentuje hodnoty členů ExtensionId a PortId pro rozšíření, které původně uložily data portu za běhu.