次の方法で共有


拡張可能スイッチのデータ パスのパケット管理ガイドライン

このトピックでは、拡張可能スイッチのデータ パス Hyper-V 取得したパケットを管理するために拡張可能スイッチ拡張機能が従う必要があるガイドラインについて説明します。

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

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

拡張機能は、拡張可能スイッチのデータ パスのパケット管理に関する次のガイドラインに従う必要があります。

  • パケットを発信する拡張機能は 、NdisFSendNetBufferLists を呼び出して、イングレス データ パスで送信要求を開始する必要があります。 これは、拡張可能スイッチを介したパケットの適切な転送を可能にするために、この方法で行う必要があります。

  • キャプチャ拡張機能では、拡張可能スイッチのイングレスおよびエグレス データ パスのパケットを監視できます。 ただし、この種類の拡張機能は常にパケットを転送する必要があり、パケットをドロップしてはなりません。 また、キャプチャ拡張機能は、パケットを転送する前にパケット データを変更してはなりません。

  • 拡張可能スイッチのイングレスデータパスにおいて、フィルターと転送の拡張機能で次のことができます。

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

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

    • 転送拡張機能では、パケット トラフィックをフィルター処理し、拡張可能スイッチを介したパケット配信用にカスタムおよび標準のポートまたはスイッチ ポリシーを適用できます。 転送拡張機能は、イングレス データ パス内のパケットをフィルター処理するときに、転送拡張機能がパケットに割り当てる送信元ポートと宛先ポートに基づいてフィルター規則を適用します。

  • 拡張可能スイッチのエグレスデータパスでは、拡張機能がフィルター処理や転送を行うことで以下のことができます。

    • フィルター拡張機能では、パケット トラフィックをフィルター処理し、拡張可能スイッチを介したパケット配信用のカスタム ポートまたはスイッチ ポリシーのみを適用できます。 フィルター拡張機能は、エグレス データ パス内のパケットをフィルター処理するときに、パケットの宛先ポートのみに基づいてフィルター処理規則を適用できます。

      宛先ポート データは、パケットのNET_BUFFER_LIST構造の OOB データ 格納されます。 拡張機能は 、GetNetBufferListDestinations 関数を呼び出してこの情報を取得します。

    • 転送拡張機能では、パケット トラフィックをフィルター処理し、拡張可能スイッチを介したパケット配信用にカスタムおよび標準のポートまたはスイッチ ポリシーを適用できます。 転送拡張機能は、エグレス データ パス内のパケットをフィルター処理するときに、パケットの送信元または宛先ポートに基づいてフィルター処理規則を適用できます。

    • パケットに適用されるポリシーに基づいて、フィルタリングまたは転送拡張機能は、1 つ以上の宛先へのパケットの配信を除外できます。 この手順の詳細については、「 拡張可能スイッチ宛先ポートへのパケット配信の除外」を参照してください。

      パケットに適用されるポリシーに基づいて、転送拡張機能は 1 つ以上の宛先へのパケットの配信を除外できます。 詳細については、「ハイブリッド転送 を参照してください。

  • 拡張可能スイッチエグレス データ パスでは、フィルタリングおよび転送拡張機能で次の操作を行わないでください。

    • エグレス データ パスでパケットを転送する前に、パケット データを変更します。

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

      転送拡張機能がパケット内のデータを変更する必要がある場合は、ポート宛先を割り当てる前に、最初にパケットを複製する必要があります。 パケットが変更され、ポート宛先が割り当てられた後、拡張機能は変更されたパケットをイングレス データ パスに挿入する必要があります。

      詳細については、パケット トラフィックのクローンを参照してください。

      手記 拡張機能がエグレス データ パスで取得されたパケットを複製した場合、パケット データを変更せず、元の宛先ポート データを保持している場合にのみ、新しいパケットをエグレス データ パスに挿入できます。

    • パケットを転送する前に、宛先ポートをパケットに追加します。

      手記 転送拡張機能では、イングレス データ パスで取得されたパケットに宛先ポートを追加できます。

    • エグレス データ パスに新しいデータ パケットまたは複製されたデータ パケットを挿入します。

  • 標準 NDIS データ パスでは、拡張可能スイッチ以外の OOB データは、多くの場合、パケットが送信または受信として示されているかどうかに応じて異なる形式を持っています。 たとえば、 NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO OOB データは、送受信固有の構造体の和集合です。

    拡張可能スイッチのデータ パスでは、送信と受信の両方で、すべてのパケットが拡張ドライバー スタックを通過します。 このため、パケット内NET_BUFFER_LIST 構造体の非拡張スイッチの OOB データは、ドライバースタックを流れる間、送信形式または受信形式のどちらかになります。

    この OOB データの形式は、パケットが拡張可能スイッチに到着したソース拡張可能スイッチ ポートによって異なります。 ソース ポートが外部ネットワーク アダプターに接続されている場合、拡張可能スイッチ以外の OOB データは受信形式になります。 その他のポートの場合、この OOB データは送信形式になります。

    手記 拡張機能がパケットの NET_BUFFER_LIST 構造を複製する場合、OOB データを追加または変更する場合は、拡張可能でないスイッチ OOB データを考慮する必要があります。 拡張機能は CopyNetBufferListInfo を呼び出して、拡張可能スイッチのデータ パスに関連付けられている OOB データをソース パケットから複製されたパケットにコピーする必要があります。 この関数は、データが複製されたパケットにコピーされるときに、OOB の送受信形式を維持します。

  • 拡張機能がエグレス データ パスのイングレスからパケットをドロップする場合は、 ReportFilteredNetBufferLists を呼び出す必要があります。 この関数が呼び出されると、拡張可能スイッチ インターフェイスはカウンターをインクリメントし、破棄または除外されたパケットのイベントをログに記録します。