次の方法で共有


NDIS パケットのループ バック

NblFlags メンバー (NET_BUFFER_LIST 構造体内) の NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET フラグが設定されている場合、パケットはループバック パケットです。 プロトコル ドライバーとフィルター ドライバーは、このフラグをチェックして、パケットがループバック パケットであるかどうかを判断できます。

次の 3 つの条件がすべて満たされている場合、NDIS はパケットをループバックします。

  1. 基盤のミニポート アダプター メディア タイプが NdisMedium802_3 または NdisMedium802_5 である。

  2. 次の 3 つの条件のいずれかが満たされる。

    1. プロトコル バインドが、パケット フィルターを指定するよう OID_GEN_CURRENT_PACKET_FILTER OID で NDIS_PACKET_TYPE_PROMISCUOUS 設定を設定し (また、Windows 8 以降では、同じ OID で NDIS_PACKET_TYPE_NO_LOCAL を設定せず)、次のいずれかが当てはまる。

      • ミニポート アダプターに複数のバインドがある。
      • ミニポート アダプターにアタッチされているフィルター モジュールが 1 つあり、そのフィルター モジュールは受信ハンドラーを登録している。
    2. プロトコル バインディングが、パケット フィルターを指定するよう OID_GEN_CURRENT_PACKET_FILTER 設定で NDIS_PACKET_TYPE_ALL_LOCAL を設定し、次のいずれかが当てはまる。

      • ミニポート アダプターに複数のバインドがある。
      • ミニポート アダプターにアタッチされているフィルター モジュールが 1 つあり、そのフィルター モジュールは受信ハンドラーを登録している。
    3. 呼び出し元が、SendFlags パラメーター (NdisSendNetBufferLists 関数) で NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK を設定する。

  3. パケットが、ミニポート アダプターの OID_GEN_CURRENT_PACKET_FILTER OID で設定されたパケット フィルターによって決定されたとおりに許容される。 次はその例です。

    • パケットが直接パケットの場合、パケット内の宛先アドレスはミニポート アダプターの MAC アドレスと一致する必要があります。
    • パケットがマルチキャスト パケットの場合、パケット フィルターが NDIS_PACKET_TYPE_ALL_MULTICAST に設定されているか、宛先アドレスがミニポート アダプターのマルチキャスト アドレス リストのマルチキャスト アドレスのいずれかと一致し、パケット フィルターが NDIS_PACKET_TYPE_MULTICAST に設定されていることが必要です。
    • パケットがブロードキャスト パケットの場合、ミニポート アダプターのパケット フィルターは NDIS_PACKET_TYPE_BROADCAST に設定されていることが必要です。
    • ミニポート アダプターのパケット フィルターは、NDIS_PACKET_TYPE_PROMISCUOUS 設定か NDIS_PACKET_TYPE_ALL_LOCAL に設定されています。

プロトコル バインディングは、次のいずれかが該当する場合にループバック パケットを受信します。

  1. プロトコル バインディングはパケットの元のセンダーであり、NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK が設定されます。

  2. プロトコル バインドは、パケット フィルターで NDIS_PACKET_TYPE_NO_LOCAL を設定しません。

次のいずれかが該当する場合、プロトコル バインディングはループバック パケットを受信しません。

  1. プロトコル バインドは、パケット フィルターで NDIS_PACKET_TYPE_NO_LOCAL を設定し、それはパケットの元のセンダーではありません。

  2. プロトコル バインディングは元のセンダーですが、NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK は SendFlags パラメーターでNdisSendNetBufferLists 関数への呼び出しにおいて設定されません。

次の図は、ループバック アルゴリズムのロジック フローを示しています。

Flowchart that shows the loopback algorithm logic flow.