次の方法で共有


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

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 を使用する必要があります。 こうすることで、拡張可能スイッチ ドライバー スタック内の基になる拡張機能によってパケットがフィルター処理されたり拒否されたりしないようにします。