次の方法で共有


物理ネットワーク アダプターへのパケットの転送

注: このページでは、ユーザーが次のページの情報と図について理解していることを前提としています。

このページでは、Hyper-V 拡張可能スイッチ転送拡張機能が基になる物理アダプターにパケットの要求を転送する方法について説明します。 複数の下位物理アダプターに、拡張可能スイッチ外部ネットワーク アダプターをバインドできます。

たとえば、拡張可能スイッチの外部ネットワーク アダプターを、NDIS マルチプレクサー (MUX) 中間ドライバーの仮想ミニポート エッジにバインドできます。 MUX 中間ドライバー自体を、ホスト上の 1 つ以上の物理ネットワークのチームにバインドできます。 この構成は拡張可能スイッチ チームと呼ばれています。 拡張可能なスイッチ チームの詳細については、「物理ネットワーク アダプター構成の種類」を参照してください。

この構成では、拡張可能スイッチの拡張機能は、拡張可能なスイッチ チーム内のすべてのネットワーク アダプターに公開されます。 これにより、拡張可能スイッチ ドライバー スタック内の転送拡張機能は、チーム内の個々のネットワーク アダプターの構成と使用に関して管理することができます。 たとえば、拡張機能では、送信パケットを個々のアダプターに転送することで、チーム経由の負荷分散フェールオーバー (LBFO) ソリューションのサポートを提供できます。 このような拡張機能は、「チーミング プロバイダー」として知られています。 チーミング プロバイダーの詳細については、「チーミング プロバイダー拡張機能」を参照してください。

転送拡張機能が拡張可能スイッチ ドライバー スタックにインストールされ、有効になっている場合、パケットが NVGRE パケットでない限り、拡張可能スイッチ入力データ パスで取得する各パケットの転送決定を行う役割を担います。 (NVGRE パケットの詳細については、「ハイブリッド転送」を参照してください)。これらの転送の決定に基づいて、拡張機能は、パケットの NET_BUFFER_LIST 構造の帯域外 (OOB) データに宛先ポートを追加できます。 パケットが、拡張可能スイッチ データ パスのトラバーサルを完了すると、拡張可能スイッチ インターフェイスは、指定された宛先ポートにパケットを配信します。

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

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

注: パフォーマンスを向上させるために、転送拡張機能は GetNetBufferListDestinations の代わりに GrowNetBufferListDestinations 関数を呼び出し、NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体へのポインターを取得できます。 この拡張機能は、宛先ポートのパケットの OOB データに追加の配列要素が必要であると判断した場合にこれを行います。 詳細については、「パケットへの拡張可能スイッチ宛先ポート データの追加」を参照してください。

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 配列内の各要素は、宛先ポートを定義し、NDIS_SWITCH_PORT_DESTINATION 構造体としてフォーマットされます。 この構造体には次のメンバーが含まれます。

  • PortId メンバーには、拡張可能スイッチの宛先ポートを指定する値が含まれています。

  • NicIndex メンバーは、PortId メンバーが指定した拡張可能スイッチ ポートに接続されるネットワーク アダプターのインデックスを指定します。

    これらのインデックス値の詳細は、「ネットワーク アダプターのインデックス値」を参照してください。

宛先ポートを拡張可能スイッチ外部ネットワーク アダプターに接続する場合、拡張機能は、送信要求を転送する基となる物理ネットワーク アダプターのインデックスを指定できます。 たとえば、拡張機能は、拡張可能なスイッチ チームを介して LBFO サポートの「チーミング プロバイダー」として動作する可能性があります。 これにより、拡張機能は、チームのさまざまなアダプターに送信要求を転送することで、トラフィックのオーバーヘッドを分散できます。

転送拡張機能は、NDIS_SWITCH_PORT_DESTINATION 構造を追加または変更して、基になる物理ネットワーク アダプターに送信要求を転送する場合、次のガイドラインに従う必要があります。

  • PortId メンバーが外部ネットワーク アダプターが接続される拡張可能スイッチ ポートを指定する場合、拡張機能は NicIndex メンバーを、次のいずれかのインデックス値に設定する必要があります。

    • 外部ネットワーク アダプターにバインドされている物理ネットワーク アダプターが 1 つだけの場合、拡張機能は NicIndex メンバーを NDIS_SWITCH_DEFAULT_NIC_INDEX または 1 に設定する必要があります。

    • 複数の物理ネットワーク アダプターが外部ネットワーク アダプターにバインドされるとき、拡張機能は NicIndex メンバーを、拡張可能スイッチ チーム内の宛先ネットワーク アダプターの 0 以外のインデックス値に設定する必要があります。

    注:PortId メンバーが、外部ネットワーク アダプターが接続されている拡張可能スイッチ ポートを指定されていない場合、拡張機能は NicIndex メンバーを NDIS_SWITCH_DEFAULT_NIC_INDEX に設定する必要があります。

  • 拡張機能は、パケットのすべての宛先ポートを追加した後、NdisFSendNetBufferLists を呼び出して、イングレス データ パス上で、パケットを転送する必要があります。

宛先ポートをパケットに追加する方法の詳細については、「パケットを Hyper-V 拡張可能スイッチ ポートに転送する」を参照してください。

このデータ パスの詳細については、「Hyper-V 拡張可能スイッチのデータ パス」を参照してください。