Hyper-V 拡張可能スイッチ実行時データの管理

このトピックでは、Hyper-V 拡張可能スイッチ拡張機能の保存および復元オペレーションについて説明します。 これらのオペレーションにより、拡張機能は、個々の拡張可能スイッチ ネットワーク アダプター (NIC) の実行時データを保存および復元できます。 これらのオペレーションは、拡張可能スイッチ ポートへのネットワーク アダプター接続を持つ Hyper-V 子パーティションが停止または開始されるときに実行されます。

Hyper-V 拡張可能スイッチの実行時データの保存

このセクションでは、Hyper-V 拡張可能スイッチ拡張機能が個々のネットワーク アダプター (NIC) の実行時データを保存するのためのオペレーションについて説明します。 このオペレーションは、拡張可能スイッチ ポートへのネットワーク アダプター接続を持つ Hyper-V 子パーティションが停止している場合、またはその状態が保存されている場合に実行されます。

OID_SWITCH_NIC_SAVE 要求の処理

拡張可能スイッチ ポートへのネットワーク アダプター接続を持つ Hyper-V 子パーティションが停止するか、その状態が保存されると、Hyper-V 拡張可能スイッチ インターフェイスに通知されます。 これにより、拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ドライバー スタックにオブジェクト識別子 (OID) メソッド要求 OID_SWITCH_NIC_SAVE を発行します。 拡張可能スイッチ拡張機能は、この OID 要求を受信すると、子パーティションにアタッチされている指定されたネットワーク アダプター接続の実行時データを保存できます。

InformationBuffer メンバー (NDIS_OID_REQUEST 構造体内。OID_SWITCH_NIC_SAVE 要求用) には NDIS_SWITCH_NIC_SAVE_STATE 構造体へのポインターが含まれます。 この構造体は、拡張可能スイッチのプロトコル エッジによって割り当てられ、次の方法で初期化されます。

  • Header メンバーは、現在の型 (NDIS_SWITCH_NIC_SAVE_STATE 構造体の改訂版) を含むように初期化されます。 サイズは、フル バッファー サイズに設定されます。

  • PortId メンバーには、保存オペレーションが実行されている拡張可能スイッチ ポートの一意の識別子が含まれています。

OID_SWITCH_NIC_SAVE メソッド要求を受け取ると、拡張機能は次の処理を行います。

  1. 拡張機能は、PortId メンバー (NDIS_SWITCH_NIC_SAVE_STATE 構造体内) を読み取ります。

  2. 指定した NIC に保存する実行時データが拡張機能に含まれている場合、そのデータは、NDIS_SWITCH_NIC_SAVE_STATE 構造体 (SaveDataOffset バイトで開始) 内に保存されます。 拡張機能は、NDIS_STATUS_SUCCESS を使用して OID メソッド要求を完了します。

  3. NDIS_SWITCH_NIC_SAVE_STATE 構造体が実行時状態を保持するのに十分なバッファーを提供しない場合、拡張機能はメソッド構造体の BytesNeeded フィールドを NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 と、保存データを保持するために必要なバッファーの量を設定し、NDIS_STATUS_BUFFER_TOO_SHORT により OID を完了します。 OID は、必要なサイズで再発行されます。

  4. 拡張機能は、指定した NIC において保存する実行時データを持たない場合、NdisFOidRequest を呼び出す必要があります。 これにより、OID メソッド要求が拡張可能スイッチ ドライバー スタック内の基盤のドライバーに転送されます。 この手順の詳細については、「NDIS フィルター ドライバーでの OID 要求のフィルターリング」を参照してください。

保存する実行時ポート データを拡張機能が持つ場合は、実行時ポート データを NDIS_SWITCH_NIC_SAVE_STATE 構造体に保存するときに、次のガイドラインに従う必要があります。

  1. 拡張機能は、ドライバーを一意に識別する GUID 値に ExtensionId メンバーを設定します。

  2. 拡張機能は、ExtensionFriendlyName メンバーをドライバーの名前に設定します。

    注: NDIS_SWITCH_EXTENSION_FRIENDLYNAME データ型は IF_COUNTED_STRING 構造体によって定義されます。 この構造体で定義されている文字列は、null で終わる必要はありません。 ただし、文字列の長さは、この構造体の Length メンバーで設定する必要があります。 文字列が NULL で終わる場合、Length メンバーに終端の NULL 文字を含めてはなりません。

  3. 保存された実行時データにフィーチャクラスが関連付けられている場合、拡張機能は、クラスを一意に識別する GUID を使用して FeatureClassId を設定します。

    注: 保存された実行時データに機能クラスが関連付けられていない場合、拡張機能によって FeatureClassId が 0 に設定されます。

  4. 拡張機能は、実行時データを SaveData メンバーにコピーし、SaveDataSize メンバーを実行時データのサイズ (バイト単位) に設定します。

注: 拡張機能は、Header メンバーや PortId メンバー (NDIS_SWITCH_NIC_SAVE_STATE 構造体内) を変更することはできません。

OID_SWITCH_NIC_SAVE の OID メソッド要求は、最終的には拡張可能スイッチの基盤のミニポート エッジによって処理されます。 この OID メソッド要求が拡張可能スイッチ ドライバー スタックを介してミニポート ドライバーに転送されると、ミニポート ドライバーは、NDIS_STATUS_SUCCESS で OID 要求を完了します。 これにより、拡張可能スイッチ ドライバー スタック内のすべての拡張機能に対して実行時ポート データのクエリが実行されたことが、拡張可能スイッチのプロトコル エッジに通知されます。 その後、拡張可能スイッチのプロトコル エッジは、OID 設定要求 OID_SWITCH_NIC_SAVE_COMPLETE を発行して保存オペレーションを完了します。

OID_SWITCH_NIC_SAVE_COMPLETE 要求の処理

拡張可能スイッチ ポートへのネットワーク アダプター接続を持つ Hyper-V 子パーティションが停止するか、その状態が保存されると、Hyper-V 拡張可能スイッチ インターフェイスに通知されます。 これにより、拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ドライバー スタックにオブジェクト識別子 (OID) メソッド要求 OID_SWITCH_NIC_SAVE を発行します。

すべての Hyper-V 拡張可能スイッチ拡張機能が実行時データを保存すると、拡張可能スイッチのプロトコル エッジは、保存オペレーションが完了したことを基盤の拡張機能に通知します。 プロトコル エッジは、拡張可能スイッチ ドライバー スタックに OID 設定要求 OID_SWITCH_NIC_SAVE_COMPLETE を発行することによって行います。

注: 拡張可能スイッチ ネットワーク アダプター接続において実行時保存オペレーションが開始されると、同じネットワーク アダプター接続の別の保存オペレーションは、OID_SWITCH_NIC_SAVE_COMPLETE 要求が発行されるまで実行されません。 ただし、この間に他のネットワーク アダプター接続の保存オペレーションが発生する可能性があります。

InformationBuffer メンバー (NDIS_OID_REQUEST 構造体内。OID_SWITCH_NIC_SAVE_COMPLETE 要求用) には NDIS_SWITCH_NIC_SAVE_STATE 構造へのポインターが含まれます。 この構造体は、拡張可能スイッチのプロトコル エッジによって割り当てられます。

OID 設定要求 OID_SWITCH_NIC_SAVE_COMPLETE を受信すると、拡張機能は次のガイドラインに従う必要があります。

  • 拡張機能は、OID 要求に関連付けられている NDIS_SWITCH_NIC_SAVE_STATE 構造体を変更することはできません。

  • 拡張機能は NdisFOidRequest を呼び出して、拡張可能スイッチ拡張スタックを介してこの OID 要求を転送する必要があります。 拡張機能は OID 要求を失敗してはなりません。

    注: 拡張機能は、この OID 要求の完了状態を監視することになります。 拡張機能は、保存オペレーションが正常に完了したかどうかを検出するためにこれを行います。

OID メソッド要求 OID_SWITCH_NIC_SAVE_COMPLETE は、最終的には拡張可能スイッチの基盤のミニポート エッジによって処理されます。 この OID メソッド要求は、ミニポート エッジによって受信されると、NDIS_STATUS_SUCCESS を使用して OID 要求を完了します。 これにより、拡張可能スイッチ ドライバー スタック内のすべての拡張機能が保存オペレーションを完了したことが、拡張可能スイッチのプロトコル エッジに通知されます。

Hyper-V 拡張可能スイッチの実行時データの復元

拡張可能スイッチ ポートへのネットワーク アダプター接続を持つ Hyper-V 子パーティションが停止から回復されると、Hyper-V 拡張可能スイッチ インターフェイスに通知されます。 これにより、拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ドライバー スタックにオブジェクト識別子 (OID) 設定要求 OID_SWITCH_NIC_RESTORE を発行します。 拡張機能は、この OID 要求を受信すると、子パーティションで使用される拡張可能スイッチ ポートの実行時データを復元できます。

InformationBuffer メンバー (NDIS_OID_REQUEST 構造体内。OID_SWITCH_NIC_RESTORE 要求用) には NDIS_SWITCH_NIC_SAVE_STATE 構造へのポインターが含まれます。 この構造体は、拡張可能スイッチのプロトコル エッジによって割り当てられます。

OID 設定要求 OID_SWITCH_NIC_RESTORE を受信すると、拡張可能スイッチ拡張機能は、最初に実行時データを所有しているかどうかを判断する必要があります。 拡張機能は、自身を識別するために使用する GUID 値に、ExtensionId メンバー (NDIS_SWITCH_NIC_SAVE_STATE 構造体内) の値を比較することによって、これを行います。

拡張機能は、拡張可能スイッチ NIC の実行時データを所有している場合、次の方法でこのデータを復元します。

  1. 拡張機能は、SaveData メンバーでの実行時データをドライバー割り当てストレージにコピーします。

    注:PortId メンバー (NDIS_SWITCH_NIC_SAVE_STATE 構造体) の値は、実行時データが保存された時点の PortId 値とは異なる場合があります。 これは、あるホストから別のホストへのライブ マイグレーション中に実行時データが保存された場合に発生する可能性があります。 ただし、拡張可能スイッチ NIC の構成は、ライブ マイグレーション中に保持されます。 これにより拡張機能は、新しい PortId 値を使用して、拡張可能スイッチ NIC に実行時データを復元できます。

  2. 拡張機能は、NDIS_STATUS_SUCCESS を使用して OID 設定要求を完了します。

拡張機能は、保存する指定された実行時データを所有していない場合、NdisFOidRequest を呼び出します。 これにより、OID 設定要求が拡張可能スイッチ ドライバー スタック内の基盤のドライバーに転送されます。 この場合、拡張機能は、OID 要求に関連付けられている NDIS_SWITCH_NIC_SAVE_STATE 構造体を変更することはできません。 OID 要求を転送する方法の詳細については、「NDIS フィルター ドライバーでの OID 要求のフィルターリング」を参照してください。

OID 設定要求 OID_SWITCH_NIC_RESTORE が NDIS_STATUS_SUCCESS で完了した場合、拡張可能スイッチのプロトコル エッジは別の OID 設定要求を発行します。 この新しい OID 設定要求を受信すると、拡張機能は次のいずれかを実行できます。

  • 拡張機能は、新しい OID 要求の実行時データを所有している場合、NDIS_SWITCH_NIC_SAVE_STATE 構造体内の追加の実行時データを復元します。 拡張機能は、NDIS_STATUS_SUCCESS を使用して OID 要求を完了します。

  • 新しい OID 要求の実行時データを所有していない場合、拡張機能は NdisFOidRequest を呼び出して、この OID 設定要求を基盤のドライバーに転送します。

OID_SWITCH_NIC_RESTORE_COMPLETE
拡張可能スイッチ インターフェイスは、拡張可能スイッチ ネットワーク アダプターの実行時データの復元操作の完了時に、この OID を発行する拡張可能スイッチのプロトコル エッジに知らせます。

この OID 要求は、指定された拡張可能スイッチ NIC に対してのみ復元オペレーションが完了したことを拡張機能に通知します。

この OID 要求の詳細については、「OID_SWITCH_NIC_RESTORE_COMPLETE」を参照してください。

注:OID_SWITCH_NIC_RESTORE 設定要求が拡張可能スイッチのミニポート エッジにより受信された場合、NDIS_STATUS_SUCCESS を使って OID 要求が完了されます。 これにより、拡張スイッチのプロトコル エッジに、実行時データを所有する拡張機能がないことが通知されます。 この場合、拡張可能スイッチ インターフェイスは、最初に実行時ポート データを保存した拡張機能の ExtensionId および PortId のメンバー値を文書化するイベントをログに記録します。