次の方法で共有


Hyper-V 拡張可能スイッチ ポートへのパケットの転送

このページでは、Hyper-V 拡張可能スイッチ転送拡張機能で 1 つ以上のポートにパケットを転送する方法について説明します。 この種類の拡張機能では、拡張可能スイッチの外部ネットワーク アダプターに接続されている個々のネットワーク アダプターにパケットを転送することもできます。

注: 拡張可能スイッチ ポートにパケットを転送できるのは、拡張可能スイッチ転送拡張機能、または拡張可能スイッチ自体のみです。

注: このページは、Hyper-V 拡張可能スイッチの概要ハイブリッド転送に関する情報と図を理解していることを前提とします。

注: 拡張可能スイッチ インターフェイスで、NDIS フィルター ドライバーは 拡張可能スイッチ拡張機能 と呼ばれ、ドライバー スタックは 拡張可能スイッチ ドライバー スタック と呼ばれます。 拡張機能の詳細は、「Hyper-V 拡張可能スイッチ拡張機能」を参照してください。

転送拡張機能が拡張可能スイッチ ドライバー スタックにインストールされており、それが有効になっている場合は、拡張可能スイッチのイングレス データ パスで取得する各パケットの転送の決定を行う必要があります。 これらの転送の決定に基づいて、拡張機能は、パケットの NET_BUFFER_LIST 構造空がの帯域外 (OOB) データの宛先ポート配列に宛先ポートを追加します。 パケットが、拡張可能スイッチ データ パスのトラバーサルを完了すると、拡張可能スイッチ インターフェイスは、指定された宛先ポートにパケットを配信します。

: 転送拡張機能がインストールされていないか有効になっていない場合、拡張可能スイッチは、入力データ パスから取得したパケットの転送を決定します。 スイッチは、パケットを拡張可能なスイッチ出力データ パスに転送する前に、パケットの NET_BUFFER_LIST 構造の OOB データに宛先ポートを追加します。

注: パケットが NVGRE パケットの場合、転送拡張機能は、宛先ポート配列に宛先ポートを追加できます。 ただし、拡張可能スイッチ Hyper-V ネットワーク仮想化 (HNV) コンポーネントは、宛先ポートを決定してパケットを転送する役割を担います。 詳細については、「ハイブリッド転送」を参照してください。

転送拡張機能は、イングレス データ パスから取得したパケットにのみ、ポート宛先を追加できます。 パケットがエグレス データ パスに転送された後、フィルター処理と転送拡張機能によって、拡張可能なスイッチ ポートへのパケット配信を除外できます。 詳細は、「拡張可能スイッチの宛先ポートへのパケット配信の除外」を参照してください。

パケットの NET_BUFFER_LIST 構造体の OOB データ内では、宛先ポートのデータは NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体に含まれています。 配列内の各要素は宛先ポートを定義し、NDIS_SWITCH_PORT_DESTINATION 構造体として書式設定されます。

転送拡張機能は、次の Hyper-V 拡張可能スイッチ ハンドラー関数を呼び出して、NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体とその NDIS_SWITCH_PORT_DESTINATION 要素を管理することができます。

AddNetBufferListDestination
この関数では、パケットの OOB データの NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体に 1 つの宛先ポートが追加されます。

GetNetBufferListDestinations
この関数では、パケットの OOB データ内の NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体へのポインターが返されます。

GrowNetBufferListDestinations
この関数では、パケットの OOB データの NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体に、1 つの宛先ポートが追加されます。

UpdateNetBufferListDestinations
この関数は、パケットの 1 つ以上の宛先ポートを追加または除外するために拡張機能が行った変更をコミットします。 これらの変更は、パケットの OOB データの NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体にコミットされます。

転送拡張機能の FilterSendNetBufferLists 関数が呼び出されると、NetBufferList パラメーターには、NET_BUFFER_LIST 構造体のリンク リストへのポインターが含まれます。 これらの構造体は、それぞれ、イングレス データ パスから取得されたパケットを指定します。

この一覧の各 NET_BUFFER_LIST 構造ごとに、転送拡張機能は次の手順に従ってパケットの宛先ポートを追加します。

  1. この拡張機能はさまざまなタイプの基準に基づいて、パケットの転送を決定します。 これらの基準には、次のものが含まれます。

    • パケットの送信元ポートおよびネットワーク アダプター接続に基づくポリシー条件。 転送拡張機能は、NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して、この情報を取得します。

    • パケットのペイロード データに基づいた、拡張可能スイッチ ポートのポリシー基準。 たとえば、拡張可能スイッチ ポートのポリシーには、IP バージョン 4 (IPv4) パケットのみの配信を許可するフィルターが含まれる場合があります。

    注: パケットが NVGRE パケットの場合、パケットの転送は、拡張可能スイッチの HNV コンポーネントが担当します。 ただし、転送拡張機能では、イングレス パスとエグレス パスに独自のポリシー基準を適用できます。 詳細については、「ハイブリッド転送」を参照してください。

  2. 拡張機能は、パケットを 1 つ以上の拡張可能なスイッチ ポートに転送できると判断した場合は、パケットの OOB データに宛先ポートを追加する必要があります。 この手順の詳細については、拡張可能スイッチの宛先ポート データをパケットに追加するをご覧ください。

    注: パケットが NVGRE パケットの場合、宛先ポートを追加するための転送拡張機能は必要ありません。 詳細については、「ハイブリッド転送」を参照してください。

  3. 拡張スイッチ ポートにパケットを転送できないと拡張機能が判断した場合は、パケットをドロップする必要があります。

    注: パケットが NVGRE パケットの場合は当てはまりません。 詳細については、「ハイブリッド転送」を参照してください。

  4. 拡張機能がパケットの宛先ポートを 1 つ以上追加した場合は、NdisFSendNetBufferLists を呼び出してエグレス データ パスでパケットを転送する必要があります。

    注: パケットが NVGRE パケットの場合、パケットの転送は、拡張可能スイッチの HNV コンポーネントが担当します。 詳細については、「ハイブリッド転送」を参照してください。

拡張可能スイッチのイングレスおよびエグレス データ パスの詳細については、Hyper-V 拡張可能スイッチのデータ パスを参照してください。