Verwalten von erweiterbaren Switch-Laufzeitdaten für Hyper-V

In diesem Thema werden Speicher- und Wiederherstellungsvorgänge für Erweiterbare Hyper-V-Switcherweiterungen beschrieben. Diese Vorgänge ermöglichen es einer Erweiterung, Laufzeitdaten für einzelne erweiterbare Switch-Netzwerkadapter (NICs) zu speichern und wiederherzustellen. Diese Vorgänge werden ausgeführt, wenn eine untergeordnete Hyper-V-Partition mit einer Netzwerkadapterverbindung mit einem erweiterbaren Switchport angehalten oder gestartet wird.

Speichern von erweiterbaren Switch-Laufzeitdaten für Hyper-V

In diesem Abschnitt wird der Vorgang beschrieben, mit dem eine erweiterbare Swicherweiterung Hyper-V Laufzeitdaten für einzelne Netzwerkadapter (NICs) speichern kann. Dieser Vorgang wird ausgeführt, wenn eine untergeordnete Hyper-V-Partition mit einer Netzwerkadapterverbindung mit einem erweiterbaren Switchport beendet wird oder der Status gespeichert wird.

Behandeln der OID_SWITCH_NIC_SAVE-Anforderung

Wenn eine untergeordnete Hyper-V-Partition mit einer Netzwerkadapterverbindung mit einem erweiterbaren Switchport beendet oder der Status gespeichert wird, wird die erweiterbare Switchschnittstelle Hyper-V benachrichtigt. Dies bewirkt, dass das Protokoll-Edge des erweiterbaren Switchs eine OID-Methodenanforderung (Object Identifier) von OID_SWITCH_NIC_SAVE abwärts des erweiterbaren Switchtreiberstapels ausstellt. Wenn eine erweiterbare Switcherweiterung diese OID-Anforderung empfängt, kann sie ihre Laufzeitdaten für die angegebene Netzwerkadapterverbindung speichern, die an die untergeordnete Partition angefügt ist.

Das Informationspuffer-Element der NDIS_OID_REQUEST-Struktur für die OID_SWITCH_NIC_SAVE-Anfrage enthält einen Zeiger zu einer NDIS_SWITCH_NIC_SAVE_STATE-Struktur. Diese Struktur wird vom Protokoll-Edge des erweiterbaren Switches zugewiesen und wie folgt initialisiert:

  • Das Header-Element wird initialisiert, um den aktuellen Typ und die Überarbeitung der NDIS_SWITCH_NIC_SAVE_STATE-Struktur zu enthalten. Die Größe wird auf die vollständige Puffergröße festgelegt.

  • Das PortId-Element enthält den eindeutigen Bezeichner des erweiterbaren Switchports, für den der Speichervorgang ausgeführt wird.

Wenn sie die OID_SWITCH_NIC_SAVE-Methodenanforderung empfängt, führt die Erweiterung folgende Aktionen aus:

  1. Die Erweiterung liest das PortId-Element der NDIS_SWITCH_NIC_SAVE_STATE-Struktur.

  2. Wenn die Erweiterung Laufzeitdaten enthält, die für die angegebene NIC gespeichert werden sollen, speichert sie ihre Daten innerhalb der NDIS_SWITCH_NIC_SAVE_STATE-Struktur, beginnend mit SaveDataOffset Bytes vom Anfang der Struktur. Die Erweiterung schließt dann die OID-Methodenanforderung mit NDIS_STATUS_SUCCESS ab.

  3. Wenn die NDIS_SWITCH_NIC_SAVE_STATE-Struktur keinen ausreichenden Puffer zum Speichern des Laufzeitzustands bereitstellt, legt die Erweiterung die Byneeded-Feld der Methodenstruktur auf NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 plus die Menge des Puffers fest, der zum Speichern der Daten erforderlich ist, und schließt das OID mit NDIS_STATUS_BUFFER_TOO_SHORT ab. Das OID wird mit der erforderlichen Größe erneut ausgestellt.

  4. Wenn die Erweiterung keine Laufzeitdaten zum Speichern für die angegebene NIC enthält, muss sie NdisFOidRequest aufrufen. Dadurch wird die OID-Methodenanforderung an zugrunde liegende Treiber im erweiterbaren Switchtreiberstapel weitergeleitet. Weitere Informationen zu diesem Verfahren finden Sie unter Filtern von OID-Anforderungen in einem NDIS-Filtertreiber.

Wenn die Erweiterung Laufzeitportdaten enthält, die gespeichert werden sollen, müssen sie die folgenden Richtlinien befolgen, wenn sie Laufzeitportdaten innerhalb der NDIS_SWITCH_NIC_SAVE_STATE Struktur speichert:

  1. Die Erweiterung legt das ExtensionId-Element auf den GUID-Wert fest, der den Treiber eindeutig identifiziert.

  2. Die Erweiterung legt das ExtensionFriendlyName-Element auf den Namen des Treibers fest.

    Hinweis: Der NDIS_SWITCH_EXTENSION_FRIENDLYNAME Datentyp ist typdefiniert durch die IF_COUNTED_STRING-Struktur . Eine durch diese Struktur definierte Zeichenfolge muss nicht null beendet werden. Die Länge der Zeichenfolge muss jedoch im Length-Element dieser Struktur festgelegt werden. Wenn die Zeichenfolge NULL-beendet ist, darf das Length-Element nicht das endende NULL-Zeichen enthalten.

  3. Wenn eine Featureklasse den gespeicherten Laufzeitdaten zugeordnet ist, legt die Erweiterung die FeatureClassId mit der GUID fest, die die Klasse eindeutig identifiziert.

    Hinweis: Wenn eine Featureklasse nicht den gespeicherten Laufzeitdaten zugeordnet ist, legt die Erweiterung die FeatureClassId auf Null fest.

  4. Die Erweiterung kopiert die Laufzeitdaten in das SaveData-Element und legt das SaveDataSize-Element auf die Größe der Laufzeitdaten in Bytes fest.

Hinweis: Die Erweiterung darf die Header - oder PortId-Elemente der NDIS_SWITCH_NIC_SAVE_STATE-Struktur nicht ändern.

OID-Methodenanforderungen von OID_SWITCH_NIC_SAVE werden letztendlich vom zugrunde liegenden Miniport-Edge des erweiterbaren Schalters behandelt. Sobald diese OID-Methodenanforderung über den erweiterbaren Schaltertreiberstapel an den Miniporttreiber weitergeleitet wurde, schließt der Miniporttreiber die OID-Anforderung mit NDIS_STATUS_SUCCESS ab. Dadurch wird das Protokoll-Edge des erweiterbaren Switches benachrichtigt, dass alle Erweiterungen im erweiterbaren Switchtreiberstapel für Laufzeitportdaten abgefragt wurden. Das Protokoll-Edge des erweiterbaren Schalters gibt dann eine OID-Setanforderung von OID_SWITCH_NIC_SAVE_COMPLETE aus, um den Speichervorgang abzuschließen.

Behandeln der OID_SWITCH_NIC_SAVE_COMPLETE-Anforderung

Wenn eine untergeordnete Hyper-V-Partition, die über eine Netzwerkadapterverbindung zu einem erweiterbaren Switch-Port verfügt, angehalten wird oder ihr Status gespeichert wird, wird die erweiterbare Switch-Schnittstelle Hyper-V benachrichtigt. Dies bewirkt, dass das Protokoll-Edge des erweiterbaren Switchs eine OID-Methodenanforderung (Object Identifier) von OID_SWITCH_NIC_SAVE abwärts des erweiterbaren Switchtreiberstapels ausstellt.

Wenn jede erweiterbare Switch-Erweiterung Hyper-V ihre Laufzeitdaten gespeichert hat, benachrichtigt der Protokoll-Edge des erweiterbaren Switches zugrunde liegende Erweiterungen, dass der Speichervorgang abgeschlossen ist. Der Protokoll-Edge bewirkt dies, indem eine OID-Set-Anforderung von OID_SWITCH_NIC_SAVE_COMPLETE den erweiterbaren Switchtreiberstapel ausgibt.

Hinweis: Wenn ein Laufzeitspeichervorgang für eine erweiterbare Switch-Netzwerkadapterverbindung gestartet wird, wird ein weiterer Speichervorgang für dieselbe Netzwerkadapterverbindung erst ausgeführt, wenn die OID_SWITCH_NIC_SAVE_COMPLETE-Anforderung ausgegeben wird. Speichervorgänge für andere Netzwerkadapterverbindungen können jedoch während dieser Zeit auftreten.

Das Informationspuffer-Element der NDIS_OID_REQUEST-Struktur für die OID_SWITCH_NIC_SAVE-Anfrage enthält einen Zeiger zu einer NDIS_SWITCH_NIC_SAVE_STATE-Struktur. Diese Struktur wird vom Protokollrand des erweiterbaren Switches zugewiesen.

Wenn sie die OID-Set-Anforderung von OID_SWITCH_NIC_SAVE_COMPLETE empfängt, muss die Erweiterung die folgenden Richtlinien befolgen:

  • Die Erweiterung darf die NDIS_SWITCH_NIC_SAVE_STATE-Struktur, die der OID-Anforderung zugeordnet ist, nicht ändern.

  • Die Erweiterung muss NdisFOidRequest aufrufen, um diese OID-Anforderung über den erweiterungsfähigen Switcherweiterungsstapel weiterzuleiten. Die Erweiterung darf die OID-Anforderung nicht fehlschlagen.

    Hinweis: Die Erweiterung sollte den Abschlussstatus dieser OID-Anforderung überwachen. Die Erweiterung erkennt dadurch, ob der Speichervorgang erfolgreich abgeschlossen wurde.

OID-Methodenanforderungen von OID_SWITCH_NIC_SAVE_COMPLETE werden letztendlich vom zugrunde liegenden Miniport-Edge des erweiterbaren Schalters behandelt. Sobald diese OID-Methodenanforderung vom Miniportrand empfangen wurde, wird die OID-Anforderung mit NDIS_STATUS_SUCCESS abgeschlossen. Dadurch wird der Protokollrand des erweiterbaren Switches benachrichtigt, dass alle Erweiterungen im erweiterbaren Switchtreiberstapel den Speichervorgang abgeschlossen haben.

Wiederherstellen von erweiterbaren Switch-Laufzeitdaten Hyper-V

Wenn eine untergeordnete Hyper-V-Partition, die über eine Netzwerkadapterverbindung zu einem erweiterbaren Switch-Port verfügt, ach einer Pause fortgesetzt wird, wird die erweiterbare Switch-Schnittstelle Hyper-V benachrichtigt. Dies bewirkt, dass die Protokollkante des erweiterbaren Switches eine Anforderung zum Festlegen der Objektkennung (OID) von OID_SWITCH_NIC_SAVE abwärts des erweiterbaren Switchtreiberstapels ausstellt. Wenn eine Erweiterung diese OID-Anforderung empfängt, kann sie ihre Laufzeitdaten für den erweiterbaren Switchport wiederherstellen, der von der untergeordneten Partition verwendet wird.

Das Informationspuffer-Element der NDIS_OID_REQUEST-Struktur für die OID_SWITCH_NIC_RESTORE-Anfrage enthält einen Zeiger zu einer NDIS_SWITCH_NIC_SAVE_STATE-Struktur. Diese Struktur wird vom Protokollrand des erweiterbaren Switches zugewiesen.

Wenn sie die OID-Set-Anforderung von OID_SWITCH_NIC_RESTORE empfängt, muss die erweiterbare Switcherweiterung zuerst bestimmen, ob sie die Laufzeitdaten besitzt. Die Erweiterung führt dies aus, indem der Wert des ExtensionId-Elements der NDIS_SWITCH_NIC_SAVE_STATE-Struktur mit dem GUID-Wert verglichen wird, den die Erweiterung zum Identifizieren selbst verwendet.

Wenn die Erweiterung die Laufzeitdaten für eine erweiterbare Switch-NIC besitzt, werden diese Daten wie folgt wiederhergestellt:

  1. Die Erweiterung kopiert die Laufzeitdaten im SaveData-Element in den vom Treiber zugewiesenen Speicher.

    Hinweis: Der Wert des PortId-Elements der NDIS_SWITCH_NIC_SAVE_STATE-Struktur unterscheidet sich möglicherweise vom PortId-Wert zum Zeitpunkt, zu dem die Laufzeitdaten gespeichert wurden. Dies kann vorkommen, wenn Laufzeitdaten während einer Livemigration von einem Host zu einem anderen gespeichert wurden. Die Konfiguration der erweiterbaren Switch-NIC wird jedoch während der Livemigration beibehalten. Dadurch kann die Erweiterung die Laufzeitdaten mithilfe des neuen PortId-Werts auf die erweiterbare Switch-NIC wiederherstellen.

  2. Die Erweiterung schließt die OID-Setanforderung mit NDIS_STATUS_SUCCESS ab.

Wenn die Erweiterung nicht über die angegebenen Laufzeitdaten verfügt, die gespeichert werden sollen, ruft die Erweiterung NdisFOidRequest auf. Dadurch wird die OID-Methodenanforderung an zugrunde liegende Treiber im erweiterbaren Switchtreiberstapel weitergeleitet. In diesem Fall darf die Erweiterung die mit der OID-Anforderung verknüpfte Struktur NDIS_SWITCH_NIC_SAVE_STATE nicht ändern. Weitere Informationen zum Weiterleiten von OID-Anforderungen finden Sie unter Filtern von OID-Anforderungen in einem NDIS-Filtertreiber.

Wenn die OID-Setanforderung von OID_SWITCH_NIC_RESTORE mit NDIS_STATUS_SUCCESS abgeschlossen ist, gibt der Protokollrand des erweiterbaren Schalters eine weitere OID-Set-Anforderung aus. Wenn sie diese neue OID-Set-Anforderung empfängt, kann die Erweiterung eine der folgenden Aktionen ausführen:

  • Wenn sie die Laufzeitdaten in der neuen OID-Anforderung besitzt, stellt die Erweiterung die zusätzlichen Laufzeitdaten innerhalb der NDIS_SWITCH_NIC_SAVE_STATE-Struktur wieder her. Die Erweiterung schließt dann die OID-Setanforderung mit NDIS_STATUS_SUCCESS ab.

  • Wenn sie nicht über die Laufzeitdaten in der neuen OID-Anforderung verfügt, ruft die Erweiterung NdisFOidRequest auf, um diese OID-Setanforderung an zugrunde liegende Treiber weiterzuleiten.

OID_SWITCH_NIC_RESTORE_COMPLETE
Die erweiterbare Switchschnittstelle signalisiert das Protokoll-Edge des erweiterbaren Switches, um diesen OID nach Abschluss des Wiederherstellungsvorgangs der Laufzeitdaten für einen erweiterbaren Switch-Netzwerkadapter auszustellen.

Diese OID-Anforderung benachrichtigt die Erweiterung, dass der Wiederherstellungsvorgang nur für eine angegebene erweiterbare Switch-NIC abgeschlossen wurde.

Weitere Informationen zu dieser OID-Anforderung finden Sie unter OID_SWITCH_NIC_RESTORE_COMPLETE.

Hinweis: Wenn die OID_SWITCH_NIC_RESTORE-Set-Anforderung vom Miniportrand des erweiterbaren Switches empfangen wird, wird die OID-Anforderung mit NDIS_STATUS_SUCCESS abgeschlossen. Dadurch wird der Protokollrand des erweiterbaren Switches benachrichtigt, dass keine Erweiterung die Laufzeitdaten besitzt. In diesem Fall protokolliert die erweiterbare Switchschnittstelle ein Ereignis, das die ExtensionId - und PortId-Memberwerte für die Erweiterung dokumentiert, die ursprünglich die Laufzeitportdaten gespeichert hat.