フィルター拡張機能

Hyper-V 拡張可能スイッチ フィルター拡張機能は、パケットを検査、変更し、拡張可能スイッチのデータ パスに挿入できます。 拡張機能は、拡張可能なスイッチ ポートとスイッチ ポリシーの設定に基づいて、パケットをドロップするか、1 つ以上の宛先ポートへの配信を除外できます。

フィルタリング拡張機能は、入力データ パスの内線番号をキャプチャした後、および、出力データ パスの転送拡張機能の後に呼び出されます。 これらのデータ パスの詳細については、「 Hyper-V 拡張可能スイッチのデータ パス」を参照してください。

フィルタリング拡張機能は、イングレス データ パスで取得されたパケットに対して次の操作を実行できます。

  • パケットトラフィックをフィルタリングして、拡張可能スイッチを介したパケット配信のカスタムポートまたはスイッチポリシーを適用します。 フィルター拡張機能は、イングレス データ パス内のパケットをフィルタリングする場合、パケットの発信元である送信元ポートと、ネットワーク アダプター接続のみに基づいて、フィルタリング規則を適用できます。 この情報は、パケットの NET_BUFFER_LIST 構造体の帯域外 (OOB) データに格納され、NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して取得できます。

    注: イングレス データ パス上で取得されたパケットには宛先ポートが含まれていません。 宛先ポートに基づくパケットのフィルタリングは、エグレス データ パスで取得されたパケットでのみ実行できます。

    カスタム ポリシーは、独立系ソフトウェア ベンダー (ISV) によって定義されます。 これらのタイプのポリシーのプロパティ設定は、Hyper-V WMI 管理レイヤーによって管理されます。 転送拡張機能は、OID_SWITCH_PORT_PROPERTY_UPDATEOID_SWITCH_PROPERTY_UPDATE のオブジェクト識別子 (OID) 要求を通じて、このプロパティ設定で構成されます。

    カスタム拡張ポートまたはスイッチ ポリシーの詳細については、「Hyper-V 拡張可能スイッチ ポリシーの管理」を参照してください。

    注: 転送拡張機能のみが、拡張可能スイッチを介したパケット配信に標準ポート ポリシーを適用できます。

  • 新規、変更、または複製されたパケットを入力データ パスに挿入します。

    詳細については、「Hyper-V 拡張可能スイッチの送受信操作」を参照してください。

フィルタリング拡張機能は、エグレスデータ パスで取得されたパケットに対して次の操作を実行できます。

  • パケットトラフィックをフィルタリングして、拡張可能スイッチを介したパケット配信のカスタムポートまたはスイッチポリシーを適用します。 フィルター拡張機能は、エグレス データ パス内のパケットをフィルター処理するときに、パケットの送信元ポートまたは宛先ポートに基づいて、フィルター処理規則を適用することができます。 宛先ポート データは、パケットの NET_BUFFER_LIST 構造体の OOB データに格納されます。 拡張機能は、 GetNetBufferListDestinations 関数を呼び出すことで、この情報を取得します。

  • 1 つ以上の拡張可能なスイッチ宛先ポートへのパケットの配信を除外します。 これにより、フィルタリング拡張機能が、拡張可能なスイッチ ポートへのパケットの配信を除外することができます。

    拡張可能スイッチ ポートへのパケット配信を除外する方法の詳細は、「拡張可能スイッチ宛先ポートへのパケット配信の除外」を参照してください。

  • エグレス データ パスを上るパケットの転送を延期することで、1 つ以上の宛先ポートへのトラフィック フローを管理します。

    たとえば、サービス品質 (QoS) 機能をサポートするフィルター拡張機能では、NdisFSendNetBufferLists をすぐに呼び出して、優先順位の高い値で指定されたパケットを転送できます。 トラフィック フローによっては、拡張機能が、後で、優先度の低いパケットを転送したい場合があります。

  • パケット データを修正します。 フィルター処理拡張機能がパケット内のデータを変更する必要がある場合は、ポート宛先を保持せずに、まず、パケットを複製する必要があります。 その後、拡張機能は、変更されたパケットを、イングレス データ パスに挿入する必要があります。 これにより、基になる拡張機能は、変更されたパケットにポリシーを適用でき、転送拡張機能はポート宛先を追加できます。

    詳細については、「パケット トラフィックの複製」を参照してください。

OID 要求と NDIS 状態の表示を検査するだけでなく、フィルター拡張機能では次の操作を実行できます。

  • 拡張可能なスイッチ ポートまたはネットワーク アダプター接続の作成を拒否するには、該当する拡張可能スイッチ OID のSTATUS_DATA_NOT_ACCEPTEDを返します。 たとえば、フィルター拡張機能は、ドライバーが OID_SWITCH_PORT_CREATE の OID セット要求を受信したときに STATUS_DATA_NOT_ACCEPTED を返すことで、ポート作成要求を拒否できます。

    注: フィルター拡張機能では、ポートやネットワーク アダプター接続の作成や削除は行われません。 拡張可能スイッチのプロトコル エッジは、OID を発行して、ポートまたはネットワーク アダプター接続の作成または削除について基になるフィルター ドライバーに通知します。 詳細については、「Hyper-V拡張可能スイッチのポートとネットワーク アダプターの状態」を参照してください。

  • 拡張可能スイッチまたはポートポリシーの追加または更新を拒否するには、該当する拡張可能スイッチ OID のSTATUS_DATA_NOT_ACCEPTED を返します。 たとえば、フィルター拡張機能は、拡張機能が OID_SWITCH_PORT_PROPERTY_ADD の OID セット要求を受信したときに STATUS_DATA_NOT_ACCEPTED を返すことで、ポート ポリシーの追加を拒否できます。

    拡張可能スイッチ ポリシーの詳細については、「Hyper-V 拡張可能スイッチ ポリシーの管理」を参照してください。

フィルター拡張機能には、次の要件があります。

  • フィルター拡張機能は、拡張可能なスイッチ インターフェイスをサポートする NDIS フィルター ドライバーとして開発する必要があります。

    フィルター ドライバーの詳細は、「NDIS フィルター ドライバー」を参照してください。

    フィルター拡張機能を記述する方法の詳細は、「Hyper-V 拡張可能スイッチ拡張機能の記述」を参照してください。

    注: Windows フィルター プラットフォーム (WFP) には、インボックス拡張可能スイッチフィルター拡張機能 (Wfplwfs.sys) が用意されています。 この拡張機能を使用すると、WFP フィルターまたはコールアウト ドライバーは、Hyper-V 拡張可能スイッチのデータ パスに沿ってパケットをインターセプトできます。 これにより、フィルターまたはコールアウト ドライバーで、WFP の管理関数とシステム関数を使用して、パケットを検査または変更できるようになります。 WFP の概要については、「Windows フィルタリング プラットフォーム」を参照してください。

  • フィルター拡張機能の INF ファイルでは、変更フィルター ドライバーとしてドライバーをインストールする必要があります。 NDIS 監視フィルター ドライバーは、拡張可能なスイッチ ドライバー スタックにインストールできません。

    フィルター ドライバーの変更の詳細については、「フィルター ドライバーの種類」を参照してください。

    フィルター ドライバーを変更するための INF 要件の詳細については、「フィルター ドライバーを変更するための INF ファイルの構成」を参照してください。

  • フィルター ドライバーの INF ファイルの FilterClass 値を、ms_switch_filter に設定する必要があります。 詳細については、「Hyper-V 拡張可能スイッチ拡張機能の INF 要件」を参照してください。

  • 任意の数のフィルター拡張機能をバインドし、拡張可能なスイッチのインスタンスごとに、ドライバー スタックで有効にすることができます。 既定では、複数のフィルター拡張機能は、インストールされた日時に基づいて順序付けられます。 たとえば、複数のフィルター拡張機能は、拡張可能なスイッチ ドライバー スタックに階層化され、最後にインストールされた拡張機能がスタック内の他のフィルター拡張機能の上に階層化されます。

    拡張可能なスイッチ インスタンスでバインドして有効になった後、拡張可能スイッチ ドライバー スタック内のフィルター拡張機能の階層化を並べ替えることができます。 詳細については、「Hyper-V 拡張可能スイッチ拡張機能の並べ替え」を参照してください。