フィルター拡張機能
Hyper-V 拡張可能スイッチ フィルター拡張機能は、パケットを検査、変更し、拡張可能スイッチのデータ パスに挿入できます。 拡張機能は、拡張可能なスイッチ ポートとスイッチ ポリシーの設定に基づいて、パケットをドロップするか、1 つ以上の宛先ポートへの配信を除外できます。
フィルタリング拡張機能は、入力データ パスの内線番号をキャプチャした後、および、出力データ パスの転送拡張機能の後に呼び出されます。 これらのデータ パスの詳細については、「 Hyper-V 拡張可能スイッチのデータ パス」を参照してください。
フィルタリング拡張機能は、イングレス データ パスで取得されたパケットに対して次の操作を実行できます。
パケットトラフィックをフィルタリングして、拡張可能スイッチを介したパケット配信のカスタムポートまたはスイッチポリシーを適用します。 フィルター拡張機能は、イングレス データ パス内のパケットをフィルタリングする場合、パケットの発信元である送信元ポートと、ネットワーク アダプター接続のみに基づいて、フィルタリング規則を適用できます。 この情報は、パケットの NET_BUFFER_LIST 構造体の帯域外 (OOB) データに格納され、NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して取得できます。
注: イングレス データ パス上で取得されたパケットには宛先ポートが含まれていません。 宛先ポートに基づくパケットのフィルタリングは、エグレス データ パスで取得されたパケットでのみ実行できます。
カスタム ポリシーは、独立系ソフトウェア ベンダー (ISV) によって定義されます。 これらのタイプのポリシーのプロパティ設定は、Hyper-V WMI 管理レイヤーによって管理されます。 転送拡張機能は、OID_SWITCH_PORT_PROPERTY_UPDATE と OID_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 拡張可能スイッチ拡張機能の並べ替え」を参照してください。