NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 共用体 (ndis.h)
NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO共用体は、1 つ以上の Hyper-V 拡張可能スイッチ ポートにパケットを転送するための情報を指定します。
この情報は、パケットの NET_BUFFER_LIST 構造の帯域外 (OOB) データに含まれています。
構文
typedef union _NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO {
UINT64 AsUINT64;
struct {
UINT32 NumAvailableDestinations : 16;
UINT32 SourcePortId : 16;
UINT32 SourceNicIndex : 8;
UINT32 NativeForwardingRequired : 1;
#if ...
UINT32 Reserved1 : 1;
#else
UINT32 Reserved1 : 2;
#endif
UINT32 IsPacketDataSafe : 1;
UINT32 SafePacketDataSize : 12;
UINT32 IsPacketDataUncached : 1;
UINT32 IsSafePacketDataUncached : 1;
UINT32 Reserved2 : 7;
};
} NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO, *PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO;
メンバー
AsUINT64
完全な 64 ビット NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 値。
NumAvailableDestinations
NET_BUFFER_LIST構造体内の未使用の拡張可能スイッチ宛先ポート要素の数を指定する 値。 詳細については、「解説」を参照してください。
SourcePortId
NET_BUFFER_LISTの送信元のソース拡張可能スイッチ ポートの識別子。
SourceNicIndex
SourcePortId メンバーによって指定された拡張可能スイッチ ポートに接続されているソース ネットワーク アダプターのインデックスを指定する UINT32 値。
このインデックス値の詳細については、「 ネットワーク アダプターのインデックス値」を参照してください。
NativeForwardingRequired
このメンバーが TRUE に設定されている場合、パケットは NVGRE パケットであり、Hyper-V 拡張可能スイッチの Hyper-V ネットワーク仮想化 (HNV) コンポーネントはこのパケットを転送します。 詳細については、「 ハイブリッド転送」を参照してください。
このフラグは、どの拡張機能によって書き込まれてはなりません。
Reserved1
このメンバーは、NDIS で将来使用するために予約されています。
このメンバーは、NDIS で将来使用するために予約されています。
IsPacketDataSafe
このメンバーが TRUE に設定されている場合、すべてのパケット データは信頼されたホスト メモリから取得されます。
SafePacketDataSize
信頼されたホスト メモリにあるパケット データ内の連続するバイト数を示す 値です。 この値は、パケット データの先頭からのバイト単位です。 SafePacketDataSize 値の後の残りのパケット データ (存在する場合) は、Hyper-V 子パーティションと親パーティションによってアクセスされる信頼されていない共有メモリに配置されます。
詳細については、「解説」を参照してください。
IsPacketDataUncached
このフラグが設定されていない場合、パケット データ全体がキャッシュされます。 設定されている場合、データの一部または全部はキャッシュ されません 。 設定すると、IsSafePacketDataUncached フィールドをチェックして、少なくとも SafePacketData 部分がキャッシュされているかどうかを確認します。
IsSafePacketDataUncached
IsPacketDataUncached フラグが設定されている場合、このフィールドはパケットの SafePacketData 部分がキャッシュされているかどうかを示します。 キャッシュされるバイト数については、 SafePacketDataSize フィールドを参照してください。
Reserved2
このメンバーは、NDIS で将来使用するために予約されています。
注釈
拡張可能スイッチ拡張機能では、NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して、NET_BUFFER_LIST構造体内のNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO共用体にアクセスできます。
NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO共用体の NumAvailableDestinations メンバーは、NET_BUFFER_LIST構造体内の未使用の拡張可能スイッチ宛先ポート要素の数を指定します。 各拡張可能スイッチの宛先ポートは、NET_BUFFER_LIST構造体のNDIS_SWITCH_FORWARDING_DESTINATION_ARRAY構造体内のNDIS_SWITCH_PORT_DESTINATION要素によって指定されます。 拡張可能スイッチ拡張機能は GetNetBufferListDestinations を呼び出して、NET_BUFFER_LIST構造体の現在のNDIS_SWITCH_FORWARDING_DESTINATION_ARRAYを取得します。
NativeForwardingRequired メンバーは、パケットが NVGRE パケットであるかどうかを指定します。 TRUE の場合、パケットは NVGRE パケットであり、転送拡張機能はパケットの転送先ポート配列を決定しませんが、配列内の宛先ポートを追加または除外できます。 詳細については、「 ハイブリッド転送」を参照してください。
IsPacketDataUncached フラグは、拡張可能スイッチ拡張機能がパケット データの一部または全部がキャッシュされているかどうかを判断するのに役立ちます。 このフラグが設定されている場合、データの一部またはすべてがキャッシュ されず 、 IsSafePacketDataUncached フラグは、安全なパケット データ 部分がキャッシュされているかどうかを拡張機能に通知します。 安全なパケット データがキャッシュされる場合、 SafePacketDataSize メンバーはキャッシュされるバイト数を指定します。
SafePacketDataSize は、Hyper-V 親パーティションの親オペレーティング システム内のローカルまたは 信頼されたメモリにあるパケット データのサイズを指定します。 このメモリには、子パーティションからアクセスできません。 そのため、そのパーティションで実行されているゲスト オペレーティング システムによって同期されていない更新プログラムから "安全" と見なされます。
拡張可能スイッチ拡張機能でパケット データを検査するために、より信頼できる領域が必要な場合は、次の手順に従う必要があります。
- 拡張機能は、NET_BUFFER_LISTとNET_BUFFER構造体を割り当てることによって、パケットのNET_BUFFER_LIST構造を複製する必要があります。 次に、この拡張機能は NdisCopyFromNetBufferToNetBuffer を呼び出して、パケットの NET_BUFFER 構造を複製します。 この関数が正常に完了すると、パケットのデータが信頼されたメモリにコピーされます。
- 拡張機能は CopyNetBufferListInfo を呼び出して、パケットの OOB データを複製されたパケットにコピーする必要があります。
- 元のパケットが複製された後、拡張機能は、 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して、複製されたパケット内の NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 共用体を取得する必要があります。 拡張機能では 、IsPacketDataSafe メンバーを TRUE に設定する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.30 以降でサポートされています。 |
Header | ndis.h (Ndis.h を含む) |
こちらもご覧ください
NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY