Hyper-V 拡張可能スイッチ ポートの概要
Hyper-V 拡張可能スイッチへの各ネットワーク接続は、ポートによって表されます。 拡張可能スイッチ インターフェイスは、ネットワーク接続が確立される前にポートを作成して構成します。 ネットワーク接続が切断された後、インターフェイスはポートを削除したり、別のネットワーク接続に再利用したりできます。
ネットワーク インターフェイスで構成されているすべての Hyper-V 子パーティションには、拡張可能スイッチのポートが割り当てられます。 Hyper-V 子パーティションが起動されると、拡張可能スイッチ インターフェイスは、仮想マシン (VM) ネットワーク アダプターがゲスト オペレーティング システム内で公開される前にポートを作成します。 VM ネットワーク アダプターが公開および初期化されると、拡張可能スイッチ インターフェイスによって、VM ネットワーク アダプターと拡張可能スイッチ ポートの間にネットワーク接続が作成されます。 子パーティションが停止している場合、拡張可能スイッチ インターフェイスは最初にネットワーク接続を削除してから、拡張可能スイッチ ポートを削除します。
拡張可能スイッチ ポートが作成されると、一意の識別子と名前で構成されます。 作成後、拡張可能スイッチ ポートは、ポート経由のパケット トラフィックの管理のさまざまな属性を定義するポリシーを使用してプロビジョニングできます。 たとえば、標準ポート ポリシーは、仮想 LAN (VLAN) 属性とポート トラフィックのアクセス制限に対して定義できます。 さらに、独立系ソフトウェア ベンダー (ISV) は、個々のポートをプロビジョニングできるカスタム ポリシーを定義できます。 詳細については、「ポート ポリシー」を参照してください。
拡張可能スイッチ ポートは、次の種類で構成されます。
検証ポート
バリデーションポートは、ポート設定の妥当性確認と検証に使用されます。 これらのポートは一時的であり、特定の条件下で作成されます。
たとえば、ネットワーク アクセス用に Hyper-V 子パーティションを作成または再構成すると、拡張可能スイッチ インターフェイスによって検証ポートが作成されます。 インターフェイスはこのポートを使用して、パーティションの仮想マシン (VM) ネットワーク アダプターへのネットワーク接続の設定を確認します。 検証が完了すると、検証ポートが削除され、操作ポートが作成されます。
詳細については、検証ポートに関する記事を参照してください。
操作ポート
拡張可能スイッチ ネットワーク アダプター接続をホストするために、操作ポートが作成されます。 操作ポートが作成されると、ポートの種類が割り当てられます。 このポートの種類は、ポートが作成された後およびポートが切断される前に有効になります。 Hyper-V 子パーティションに割り当てられたポートの場合、操作ポートの種類は、パーティションの実行中および操作中も有効なままです。
詳細については、「操作ポート」を参照してください。
拡張可能スイッチ拡張機能は、次の拡張可能スイッチ オブジェクト識別子 (OID) 要求を通じて、ポートの作成、更新、削除の通知を受け取ります。
OID_SWITCH_PORT_CREATE
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートの作成について拡張可能スイッチ拡張機能に通知するOID_SWITCH_PORT_CREATE の OID セット要求を発行します。
拡張機能は、OID 要求の STATUS_DATA_NOT_ACCEPTED を返すことによって、作成通知を拒否できます。 たとえば、拡張機能が構成済みのポリシーをポートに適用するためにリソースを割り当てることができない場合、拡張機能は作成通知を拒否します。
拡張機能が作成通知を受け入れる場合は、OID 要求を拡張可能スイッチ ドライバー スタックに転送する必要があります。 拡張機能は、この OID 要求の完了状態を監視して、基になる拡張機能がポート作成通知を拒否したかどうかを判断します。
拡張機能は、ネットワーク接続が作成されるまで、新しく作成されたポートにパケットを転送できません。 このプロセスの詳細については、「Hyper-V 拡張可能スイッチ ネットワーク アダプター」を参照してください。
OID_SWITCH_PORT_UPDATED
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートのパラメーターが更新されていることを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_PORT_UPDATED の OID セット要求を発行します。 OID は、既に作成されており、破棄/削除プロセスをまだ開始していないポートに対してのみ発行されます。 現在、PortFriendlyName フィールドのみが作成後に更新される可能性があります。
拡張可能スイッチのプロトコル エッジは、ポートへの以前のネットワーク接続が切断され、ポートへのすべての OID 要求が完了したときに、この OID 要求を発行します。
注: ネットワーク アダプター接続が以前にポートに行われなかった場合は、この OID 要求を発行できます。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
OID_SWITCH_PORT_TEARDOWN
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートが削除されていることを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_PORT_TEARDOWN の OID セット要求を発行します。 拡張可能スイッチのプロトコル エッジは、ポートへの以前のネットワーク接続が切断され、ポートへのすべての OID 要求が完了したときに、この OID 要求を発行します。
注: ネットワーク アダプター接続が以前にポートに行われなかった場合は、この OID 要求を発行できます。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
拡張機能は、この OID 要求を転送した後、削除されているポートの OID 要求を発行できなくなります。
OID_SWITCH_PORT_DELETE
拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートが削除されたことを拡張可能スイッチ拡張機能に通知するために、OID_SWITCH_PORT_DELETE の OID セット要求を発行します。 拡張可能スイッチのプロトコル エッジは、ポートを対象とする OID_SWITCH_PORT_TEARDOWN 要求と OID 要求が完了した後、この OID 要求を発行します。
拡張機能は、この OID セット要求を拡張可能スイッチ ドライバー スタックに常に転送する必要があります。 拡張機能は要求に対処しなくてはなりません。
ネットワーク接続用に作成されるすべての拡張可能スイッチ ポートには、NDIS_SWITCH_DEFAULT_PORT_ID より大きい識別子が割り当てられます。 NDIS_SWITCH_DEFAULT_PORT_ID識別子は保留され、次の方法で使用されます。
パケットの送信元ポート識別子は、その NET_BUFFER_LIST 構造体に関連付けられているパケットの帯域外 (OOB) 転送コンテキストに格納されます。 NDIS_SWITCH_DEFAULT_PORT_ID の送信元ポート識別子は、パケットが拡張可能スイッチポートではなく拡張可能スイッチ拡張機能から送信されたことを指定します。 NDIS_SWITCH_DEFAULT_PORT_ID 送信元ポート識別子を持つパケットは信頼され、アクセス制御リスト (ACL) やサービス品質 (QoS) などの拡張可能スイッチ ポート ポリシーをバイパスします。
拡張機能では、パケットを特定のポートから送信されたかのように扱う必要がある場合があります。 これにより、そのポートのポリシーをパケットに適用できます。 拡張機能は SetNetBufferListSource を呼び出して、パケットのソース ポートを変更します。
ただし、拡張機能がパケットのソース ポート識別子を NDIS_SWITCH_DEFAULT_PORT_ID に割り当てたい場合もあります。 たとえば、拡張機能では、外部ネットワーク上のデバイスに送信される独自の制御パケットの NDIS_SWITCH_DEFAULT_PORT_ID にソース ポート識別子を設定したい場合があります。
転送コンテキストの詳細については、「Hyper-V 拡張可能スイッチ転送コンテキスト」を参照してください。
OID_SWITCH_NIC_REQUEST のオブジェクト識別子 (OID) 要求は、拡張可能スイッチ外部ネットワーク アダプターに発行される OID 要求をカプセル化するために拡張可能スイッチ インターフェイスによって発行されます。 たとえば、ハードウェア オフロード OID 要求は、拡張可能スイッチ ドライバー スタックを発行する前に、インターフェイスによってカプセル化されます。
拡張機能では、拡張可能スイッチ制御パスに要求を転送するために、カプセル化された OID 要求を発行することもできます。 これにより、拡張機能は、基になる物理ネットワーク アダプターの機能を照会または構成できます。
この OID 要求の NDIS_OID_REQUEST 構造体の InformationBuffer メンバー には、NDIS_SWITCH_NIC_OID_REQUEST 構造体へのポインターが含まれています。 SourcePortId メンバーが NDIS_SWITCH_DEFAULT_PORT_ID に設定されている場合は、OID 要求が拡張可能スイッチ インターフェイスによって送信されたことを指定します。 DestinationPortId が NDIS_SWITCH_DEFAULT_PORT_ID に設定されている場合、これは、OID 要求が拡張可能スイッチ ドライバー スタック内の拡張機能による処理の対象であることを指定します。
OID 要求の制御パスの詳細については、「OID 要求の Hyper-V 拡張可能スイッチ制御パス」を参照してください。
NDIS_STATUS_SWITCH_NIC_STATUS の NDIS 状態表示は、拡張可能スイッチの外部ネットワーク アダプターからの状態表示をカプセル化する拡張可能スイッチのミニポート エッジによって発行されます。
拡張機能では、表示を拡張可能スイッチ制御パスに送信するために、カプセル化された NDIS 状態表示を発行することもできます。 これにより、拡張機能は、基になる物理ネットワーク アダプターの報告された機能を変更できます。
この指示の NDIS_STATUS_INDICATION 構造体の StatusBuffer メンバーには、NDIS_SWITCH_NIC_STATUS_INDICATION 構造体へのポインターが含まれています。 SourcePortId メンバーが NDIS_SWITCH_DEFAULT_PORT_ID に設定されている場合、これは、状態表示が拡張可能スイッチ インターフェイスから発生したことを示します。 DestinationPortId が NDIS_SWITCH_DEFAULT_PORT_ID に設定されている場合、これは、OID 要求が拡張可能スイッチ ドライバー スタック内の拡張機能による処理の対象であることを指定します。
NDIS 状態表示の制御パスの詳細については、「NDIS 状態表示の Hyper-V 拡張可能スイッチ制御パス」を参照してください。
拡張可能スイッチ インターフェイスには、作成された各ポートの参照カウンターが含まれます。 参照カウンターの値が 0 以外の場合、ポートは削除されません。 このインターフェイスには、拡張可能スイッチ ポートの参照カウンターをインクリメントまたはデクリメントするための次のハンドラー関数が用意されています。
ReferenceSwitchPort
拡張可能スイッチ拡張機能は、この関数を呼び出して、ポートの参照カウンターをインクリメントします。 参照カウンターには 0 以外の値が設定されていますが、拡張可能スイッチのプロトコル エッジは、拡張可能スイッチ ポートを削除する OID_SWITCH_PORT_DELETE のオブジェクト識別子 (OID) セット要求を発行しません。
拡張機能は、ポートがアクティブな状態である必要がある操作を実行する前に、ReferenceSwitchPort を呼び出す必要があります。 たとえば、拡張機能は、ReferenceSwitchPort を呼び出してから OID_SWITCH_PORT_PROPERTY_ENUM の OID メソッド要求を発行する必要があります。
注: 拡張機能では、ポートの OID_SWITCH_PORT_TEARDOWN の OID セット要求を受信した後でそのポートの ReferenceSwitchPort を呼び出してはなりません。
DereferenceSwitchPort
拡張可能スイッチ拡張機能は、この関数を呼び出して、ポートの参照カウンターをデクリメントします。
拡張機能は、ポートで実行されている操作が完了した後に DereferenceSwitchPort を呼び出す必要があります。 たとえば、拡張機能が OID_SWITCH_PORT_PROPERTY_ENUM 要求を発行する前に ReferenceSwitchPort を呼び出した場合、拡張機能は OID 要求が完了した後で DereferenceSwitchPort を呼び出す必要があります。
注 : NDIS ポートと拡張可能スイッチ ポートは異なるオブジェクトです。 拡張可能スイッチのデータ パスを通過するパケットは常に、 NDIS_DEFAULT_PORT_NUMBER の NDIS ポート番号に割り当てられます。 ただし、パケットの送信元と宛先の拡張可能スイッチのポート番号は、 NDIS_SWITCH_DEFAULT_PORT_ID 以上の値にすることができます。 詳細については、「Hyper-V 拡張可能スイッチのデータ パス」を参照してください。