Hyper-V 拡張可能スイッチ送信および受信フラグ
注: このページは、 Hyper-V 拡張可能スイッチの概要 と ハイブリッド転送 に関する情報と図を理解していることを前提とします。
Hyper-V 拡張可能スイッチのデータ パスを通過するパケット トラフィックは、次の方法で拡張機能によって取得されます。
拡張機能は、 FilterSendNetBufferLists 関数が呼び出されたときに 、イングレス データ パスからパケットを 取得します。 拡張機能は、 NdisFSendNetBufferLists を呼び出 すことによって、イングレス データ パス上の基になる拡張機能にパケットを転送します。 拡張機能のフィルター処理と転送は、 NdisFSendNetBufferListsComplete を呼び出すことによって、イングレス データ パスからパケットをドロップすることもできます。
拡張機能は、 FilterReceiveNetBufferLists 関数が呼び出されたときに 、出力 データ パスからパケットを 取得します。 拡張機能は、 NdisFIndicateReceiveNetBufferLists を呼び出 すことによって、出力データ パス上の上にある拡張機能にパケットを転送します。 拡張機能のフィルター処理と転送は、 NdisFReturnNetBufferLists を呼び出すことによって、出力データ パスからパケットをドロップすることもできます。
FilterSendNetBufferLists または NdisFSendNetBufferLists の SendFlags パラメーターに次のフラグを設定できます。
NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE
このフラグが設定されている場合、 NET_BUFFER_LIST 構造のリンクされたリスト内のすべてのパケットは、同じ Hyper-V 拡張可能スイッチのソース ポートから送信されます。
NDIS が FilterSendNetBufferLists を呼び出すとき、拡張可能スイッチ拡張可能インターフェイスが同じソース ポートから複数のパケットをグループ化している場合、このフラグが設定されます。 最適なパフォーマンスを得るための拡張機能では、このグループ化を維持し、 NdisFSendNetBufferLists を呼び出 すときにこのフラグを設定する必要があります。 拡張機能がリスト内の他のパケットと同じソース ポートを使用している場合、拡張機能は、 NET_BUFFER_LIST 構造のリンクされたリストに送信元または複製されたパケットを追加することもできます。
注:NET_BUFFER_LIST 構造体のリンクされたリスト内の各パケットが同じソース ポートを使用する場合、拡張機能は、送信要求の完了時に NdisFSendNetBufferListsComplete の SendCompleteFlags パラメーターに NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE フラグを設定する必要があります。
NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
このフラグが設定されている場合、 NET_BUFFER_LIST 構造体のリンクされたリスト内のすべてのパケットは、同じ拡張可能スイッチの宛先ポートに転送されます。
転送拡張機能は、各パケットの宛先ポートを決定した後にイングレス データ パスで転送する NET_BUFFER_LIST 構造のリンクされたリストに対して、このフラグを使用できます。 このフラグは、パケットをエグレス データ パスに転送する前に、拡張可能スイッチの基になるミニポート エッジによって使用および削除されます。
拡張機能のキャプチャとフィルター処理では、このフラグを使用できません。
注: 転送拡張機能は、NVGRE 以外のパケットのパケットの宛先ポートのみを決定します。 パケットが NVGRE パケットの場合、Hyper-V ネットワーク仮想化 (HNV) コンポーネントによってパケットの宛先ポートが決定され、パケットが転送されます。 詳細については、 ハイブリッド転送を参照してください。
最適なパフォーマンスを得るために、リンク リスト内のすべてのパケットを同じ宛先ポートに転送する場合は、転送拡張機能でこのフラグを設定する必要があります。 このフラグを設定することで、拡張機能は、リンクリスト内のすべてのパケットが拡張可能スイッチ転送コンテキストで同じ宛先ポート要素を持っていることを確認しています。
注: 転送拡張機能では、複数の宛先ポートを持つパケットのリンクされたリストに対してこのフラグを設定しないでください。
FilterReceiveNetBufferLists または NdisFIndicateReceiveNetBufferLists の ReceiveFlags パラメーターに次のフラグを設定できます。
NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE
このフラグが設定されている場合、 NET_BUFFER_LIST 構造のリンクされたリスト内のすべてのパケットは、同じ Hyper-V 拡張可能スイッチのソース ポートから送信されます。
NDIS が FilterReceiveNetBufferLists を呼び出すと、拡張可能スイッチが同じソース ポートから複数のパケットをグループ化している場合、このフラグが設定されます。 最適なパフォーマンスを得るための拡張機能では、このグループ化を維持し、 NdisMIndicateReceiveNetBufferLists を呼び出 すときにこのフラグを設定する必要があります。 パケットがリスト内の他のパケットと同じソース ポートを保有している場合、拡張機能は、 NET_BUFFER_LIST 構造のリンクされたリストに送信元または複製されたパケットも追加する必要があります。
注:NET_BUFFER_LIST 構造体のリンクされたリスト内の各パケットが同じソース ポートを使用する場合、拡張機能は、受信要求が完了したときに FilterReturnNetBufferLists の ReturnFlags パラメーターに NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE フラグを設定する必要があります。 この拡張機能は、 NdisFReturnNetBufferLists を呼び出して、生成または複製されなかったパケットを返す場合、 ReturnFlags パラメーターでこのフラグを設定する必要があります。
NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP
このフラグが設定されている場合、 NET_BUFFER_LIST 構造体のリンクされたリスト内のすべてのパケットは、同じ拡張可能スイッチの宛先ポートに転送されます。
NDIS が FilterReceiveNetBufferLists を呼び出すと、拡張可能スイッチが同じ宛先ポートを持つ複数のパケットをグループ化している場合、このフラグが設定されます。 最適なパフォーマンスを得るための拡張機能では、このグループ化を維持し、 NdisMIndicateReceiveNetBufferLists を呼び出 すときにこのフラグを設定する必要があります。 パケットがリスト内の他のパケットと同じ宛先ポートを保有している場合、拡張機能は、 NET_BUFFER_LIST 構造のリンクされたリストに送信元または複製されたパケットも追加する必要があります。
注: 拡張機能が NdisFIndicateReceiveNetBufferLists を呼び出すときは、 ReceiveFlags パラメーターに NDIS_RECEIVE_FLAGS_RESOURCES フラグを設定しないでください。 拡張可能スイッチ インターフェイスは、このフラグを無視し、 FilterReturnNetBufferLists を呼び出 すことによって受信通知を完了します。