Hyper-V 拡張可能スイッチ ネットワーク アダプターの概要
Hyper-V 拡張可能スイッチは、さまざまな種類の仮想または物理ネットワーク アダプターからの接続をサポートします。 これらの種類のネットワーク アダプターへの接続は、拡張可能なスイッチ ポートを介して行われます。 ポートは、仮想ネットワーク アダプター接続が確立される前に作成され、ネットワーク アダプター接続が切断された後に削除されます。
たとえば、Hyper-V 子パーティションが起動されると、拡張可能スイッチ インターフェイスは、仮想マシン (VM) ネットワーク アダプターがゲスト オペレーティング システム内で公開される前にポートを作成します。 VM ネットワーク アダプターが公開および列挙されると、拡張可能スイッチ インターフェイスによって、VM ネットワーク アダプターと拡張可能スイッチ ポートの間にネットワーク接続が作成されます。 子パーティションが停止している場合、拡張可能スイッチ インターフェイスは最初にネットワーク接続を削除してから、拡張可能スイッチ ポートを削除します。
Hyper-V 拡張可能スイッチは、次の種類の仮想ネットワーク アダプターからの接続をサポートしています。
外部ネットワーク アダプター
これは、Hyper-V 親パーティションで実行される管理オペレーティング システムで公開される拡張可能スイッチ ネットワーク アダプターです。 各拡張可能スイッチは、1 つの外部ネットワーク アダプター接続のみをサポートします。
外部ネットワーク アダプターは、ホストで使用可能な物理ネットワーク インターフェイスへの接続を提供します。 外部ネットワーク アダプターには、Hyper-V 親パーティションとすべての子パーティションからアクセスできます。
この種類のネットワーク アダプターの詳細については、「外部ネットワーク アダプター」を参照してください。
内部ネットワーク アダプター
これは、Hyper-V 親パーティションで実行される管理オペレーティング システムで公開される拡張可能スイッチ ネットワーク アダプターです。 各拡張可能スイッチは、1 つの内部ネットワーク アダプター接続のみをサポートします。
内部ネットワーク アダプターは、管理オペレーティング システムで実行されるプロセスの拡張可能スイッチへのアクセスを提供します。 これにより、これらのプロセスで拡張可能スイッチ経由でパケットを送受信できます。
この種類のネットワーク アダプターの詳細については、「内部ネットワーク アダプター」を参照してください。
仮想マシン (VM) ネットワーク アダプター
これは、Hyper-V 子パーティションで実行されるゲスト オペレーティング システムで公開される拡張可能スイッチ ネットワーク アダプターです。
注 Hyper-V では、子パーティションは VM とも呼ばれます。
VM ネットワーク アダプターでサポートされている仮想化の種類は次のとおりです。
VM ネットワーク アダプターは、ネットワーク アダプター (統合ネットワーク アダプター) の統合仮想化である可能性があります。 この場合、VM で実行されるネットワーク仮想サービス クライアント (NetVSC) によって、この仮想ネットワーク アダプターが公開されます。 NetVSC は、VM バス (VMBus) 経由で拡張可能スイッチ ポートとの間でパケットを転送します。
VM ネットワーク アダプターは、物理ネットワーク アダプターのエミュレートされた仮想化 (エミュレートされたネットワーク アダプター) である可能性があります。 この場合、VM ネットワーク アダプターは Intel ネットワーク アダプターを模倣し、ハードウェア エミュレーションを使用して拡張可能スイッチ ポートとの間でパケットを転送します。
この種類のネットワーク アダプターの詳細については、「仮想マシン ネットワーク アダプター」を参照してください。
拡張可能スイッチ ネットワーク アダプター接続は、次の拡張可能スイッチ OID 要求を通じて作成、更新、および削除されます。
OID_SWITCH_NIC_CREATE
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートへのネットワーク アダプター接続の作成について拡張可能スイッチ拡張機能に通知するOID_SWITCH_NIC_CREATE の OID セット要求を発行します。 ポートは、OID_SWITCH_PORT_CREATE の OID セット要求を使用して以前に作成されている必要があります。
OID_SWITCH_NIC_CREATE 要求は、新しい拡張可能スイッチ ネットワーク アダプター接続が起動され、指定されたポートでパケット トラフィックが間もなく発生し始める可能性があることを拡張機能に通知するだけです。
拡張機能は、OID 要求の STATUS_DATA_NOT_ACCEPTED を返すことによって、作成通知を拒否できます。 たとえば、拡張機能がネットワーク アダプター接続に使用されるポートで構成されたポリシーを満たすことができない場合、拡張機能は作成通知を拒否する必要があります。
拡張機能が作成通知を受け入れる場合は、OID 要求を拡張可能スイッチ ドライバー スタックに転送する必要があります。 拡張機能は、この OID 要求の完了状態を監視して、基になる拡張機能が作成通知を拒否したかどうかを判断します。
ネットワーク アダプター接続が作成されると、NDIS_SWITCH_NIC_INDEX 値が割り当てられます。 このインデックス値は、拡張可能スイッチ ポート上のネットワーク アダプター接続を識別します。 外部、内部、および VM ネットワーク アダプターへの接続には、NDIS_SWITCH_DEFAULT_NIC_INDEX のNDIS_SWITCH_NIC_INDEX 値が割り当てられます。 外部ネットワーク アダプターにバインドされている各物理ネットワーク アダプターまたは仮想ネットワーク アダプターには、次の方法で NDIS_SWITCH_NIC_INDEX 値が割り当てられます。
物理ネットワーク アダプターまたは仮想ネットワーク アダプターが外部ネットワーク アダプターに直接バインドされている場合は、1 の NDIS_SWITCH_NIC_INDEX 値が割り当てられます。
物理ネットワーク アダプターが拡張可能スイッチ チームの一部である場合は、1 以上の NDIS_SWITCH_NIC_INDEX 値が割り当てられます。 拡張可能スイッチ チームは、1 つ以上の物理ネットワーク アダプターのチームが拡張可能スイッチ外部ネットワーク アダプターにバインドされる構成です。
物理ネットワーク アダプターを外部ネットワーク アダプターにバインドできるさまざまな構成の詳細については、「物理ネットワーク アダプター構成の種類」を参照してください。
NDIS_SWITCH_NIC_INDEX 値の詳細については、「ネットワーク アダプターのインデックス値」を参照してください。
注: 拡張機能は、拡張可能スイッチのプロトコル エッジが OID_SWITCH_NIC_CONNECT の OID セット要求を発行するまで、ネットワーク アダプター接続経由でパケットを生成または転送できません。
OID_SWITCH_NIC_CONNECT
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ネットワーク アダプター接続が完全に動作していることを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_NIC_CONNECT の OID セット要求を発行します。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
NDIS_STATUS_SUCCESS で OID 要求が完了すると、ネットワーク アダプター接続と拡張可能スイッチ ポートが完全に動作します。 ネットワーク アダプター接続がこの状態の場合、拡張機能は次の操作を実行できます。
ポートのネットワーク アダプター接続にパケット トラフィックを生成または転送します。
ソース ポートとしてポートを使用する拡張可能スイッチ OID または状態表示を発行します。
ReferenceSwitchNic を呼び出して、ネットワーク アダプター接続の参照カウンターをインクリメントします。 参照カウンターの値が 0 以外の場合、拡張可能スイッチ インターフェイスはネットワーク アダプター接続を切断しません。
OID_SWITCH_NIC_UPDATED
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ネットワーク アダプターのパラメーターが更新されたことを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_NIC_UPDATED の OID セット要求を発行します。 OID は、既に接続されていて、まだ切断プロセスを開始していない NIC に対してのみ発行されます。 これらのランタイム構成の変更には、NicFriendlyName、MTU、NetCfgInstanceId、PermanentMacAddress、VMMacAddress、CurrentMacAddress、および VFAssigned を含めることができます。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
OID_SWITCH_NIC_DISCONNECT
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ネットワーク アダプター接続が切断されていることを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_NIC_DISCONNECT の OID セット要求を発行します。 接続が完全に切断されると、拡張可能スイッチのプロトコル エッジは、OID_SWITCH_NIC_DELETE の OID セット要求を発行します。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
拡張機能は、この OID 要求を転送した後、ネットワーク アダプター接続が切断されているポートにパケットを生成したり転送したりできなくなります。 また、拡張機能は、ネットワーク アダプター接続の ReferenceSwitchNic を呼び出すことができなくなります。
OID_SWITCH_NIC_DELETE
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ネットワーク アダプター接続が切れ、切断されていることを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_NIC_DELETE の OID セット要求を発行します。 この OID 要求は、OID_SWITCH_NIC_DISCONNECT の OID セット要求が以前に発行されたネットワーク接続に対してのみ発行されます。
注: 拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
この OID 要求が完了すると、拡張可能スイッチのプロトコル エッジは、ネットワーク アダプター接続に使用されたポートの削除プロセスを開始する OID_SWITCH_PORT_TEARDOWN の OID セット要求を発行します。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
拡張可能スイッチ インターフェイスは、作成された各ネットワーク アダプター接続の参照カウンターを維持します。 参照カウンターの値が 0 以外の場合、ネットワーク アダプター接続は削除されません。 このインターフェイスには、拡張可能スイッチ ネットワーク アダプター接続の参照カウンターをインクリメントまたはデクリメントするための次のハンドラー関数が用意されています。
ReferenceSwitchNic
拡張可能スイッチ拡張機能は、この関数を呼び出して、ネットワーク アダプター接続の参照カウンターをインクリメントします。 参照カウンターには 0 以外の値がありますが、拡張可能スイッチ インターフェイスはネットワーク アダプター接続を削除しません。
拡張機能は、次の操作を実行する前に ReferenceSwitchNic を呼び出す必要があります。
拡張可能スイッチ ドライバー スタックを基になる外部アダプターに OID_SWITCH_NIC_REQUEST 要求を転送します。
NDIS_STATUS_SWITCH_NIC_STATUS 状態インジケーターを、基になる外部アダプターから拡張可能スイッチ ドライバー スタックに転送します。
注: 拡張機能は、その接続の OID_SWITCH_NIC_DISCONNECT の OID セット要求を受信した後、ネットワーク アダプター接続のReferenceSwitchNic を呼び出してはなりません。
DereferenceSwitchNic
拡張可能スイッチ拡張機能は、この関数を呼び出して、ポートの参照カウンターをデクリメントします。
拡張機能が ReferenceSwitchNic を呼び出す場合は、DereferenceSwitchNic を呼び出す前に OID_SWITCH_NIC_REQUEST または NDIS_STATUS_SWITCH_NIC_STATUS 表示が完了していなければなりません。