Hyper-V 拡張可能スイッチ転送コンテキスト データの種類

Hyper-V 拡張可能スイッチのデータ パスを走査する各パケットの NET_BUFFER_LIST 構造体には、帯域外 (OOB) データが含まれています。 このデータは、パケットが生成された送信元ポートと、パケット配信用の 1 つ以上の宛先ポートを指定します。 この OOB データは、 拡張可能スイッチ転送コンテキストと呼ばれます。

パケットの NET_BUFFER_LIST 構造内の拡張可能スイッチ転送コンテキストにアクセスするために、次のデータ型が宣言されています。

NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO
これは、パケットの転送特性を含む 64 ビット共用体です。 このデータには、パケットの送信元の送信元ポートとネットワーク アダプター接続の識別子が含まれます。 このデータには、宛先ポート アレイで使用できる未使用の要素の数も含まれます。

拡張可能スイッチ拡張機能は、 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用してこのデータにアクセスできます。

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY
この構造体は、パケットの宛先ポート配列を定義します。 この配列内の各要素は、 NDIS_SWITCH_PORT_DESTINATION 構造体として書式設定されます。

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 構造体には、要素の合計数の現在の数と配列内の使用される要素の数を指定するメンバーが含まれています。

拡張可能スイッチ拡張機能は、 GetNetBufferListDestinations 関数を 呼び出すことによって、この配列を 取得できます。 ドライバーが複数の宛先ポートを持つパケットの配列内の要素を追加または変更する場合は、 UpdateNetBufferListDestinations 関数を呼び出す必要があります。 この関数は、パケットの転送コンテキストで宛先ポート配列にこれらの変更をコミットします。

注: 宛先ポートが 1 つだけのパケットへの変更をコミットするには、ドライバーが AddNetBufferListDestination 関数を呼び出す方が効率的です。

NDIS_SWITCH_PORT_DESTINATION
この構造体は、パケットの宛先ポートを定義します。 単一の宛先ポートを持つパケットの場合、宛先ポート配列には 1 つの NDIS_SWITCH_PORT_DESTINATION 要素しかありません。 複数の宛先ポートを持つパケットの場合、配列にはこれらの要素が 1 つ以上存在します。

拡張可能スイッチ拡張機能は、 GetNetBufferListDestinations を呼び出してパケットの宛先ポート配列を取得した後、 NDIS_SWITCH_PORT_DESTINATION_AT_ARRAY_INDEX マクロを使用して配列内の個々の要素にアクセスできます。