次の方法で共有


パケットの拡張可能スイッチのソース ポート データの変更

Hyper-V 拡張可能スイッチのソース ポートは、NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO構造体の SourcePortId メンバーによって指定されます。 この構造体は、パケットの NET_BUFFER_LIST 構造体の帯域外 (OOB) 転送コンテキストに含まれています。 このコンテキストの詳細については、「Hyper-V 拡張可能スイッチ転送コンテキストの」を参照してください。

拡張可能スイッチ拡張機能は、パケットの送信元ポート識別子を変更するために、次のガイドラインに従う必要があります。

  • 拡張可能スイッチ拡張機能は、パケットのソース ポートを変更する SetNetBufferListSource を呼び出す必要があります。 拡張機能は、NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO構造体の SourcePortId メンバーを直接変更することはできません。

  • 拡張機能がパケットを作成または複製する場合は、NdisAllocateNetBufferList を呼び出した後に AllocateNetBufferListForwardingContext 関数を呼び出す必要があります。 この関数は、パケットの情報を転送するために使用される OOB データの拡張可能スイッチ コンテキスト領域を割り当てます。

    拡張機能が AllocateNetBufferListForwardingContext を呼び出すと、 SourcePortId メンバーは NDIS_SWITCH_DEFAULT_PORT_IDに設定されます。 これは、パケットが拡張可能スイッチ ポートに到着するのではなく、拡張機能から送信されたことを指定します。

    NDIS_SWITCH_DEFAULT_PORT_IDのソース ポートを持つパケットは、拡張可能スイッチ拡張データ パスによって特権と信頼として扱われます。 このようなトラフィックは、他のソース ポートからのパケットに適用されるポリシーに従うべきではありません。 たとえば、 NDIS_SWITCH_DEFAULT_PORT_IDのソース ポート識別子を持つパケットは、拡張可能スイッチの基になるミニポート エッジによって適用される組み込みの拡張可能スイッチ ポリシーをバイパスします。 これらのポリシーには、アクセス制御リスト (ACL) とサービス品質 (QoS) が含まれます。

    拡張機能がパケット トラフィックを発信する場合は、 NDIS_SWITCH_DEFAULT_PORT_ID の送信元ポートを慎重かつ慎重に使用する必要があります。 ほとんどの場合、拡張機能は、拡張可能スイッチのアクティブなポートにソース ポート識別子を変更する必要があります。 これにより、そのポートのポリシーをパケットに適用できます。

    ただし、拡張機能が発信元のパケットに NDIS_SWITCH_DEFAULT_PORT_ID のソース ポートを使用する必要がある場合があります。 たとえば、拡張機能が物理ネットワークまたは仮想ネットワーク上の宛先に送信する必要がある制御パケットを生成する場合は、ソース ポート識別子 にNDIS_SWITCH_DEFAULT_PORT_ID を使用する必要があります。 これにより、拡張可能スイッチ ドライバー スタック内の基になる拡張機能によってパケットがフィルター処理および拒否されないようにします。