手記 このページでは、「 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 Network Virtualization (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 を呼び出すことによって受信通知を完了します。