Freigeben über


Zurückschleifen von NDIS-Paketen

Wenn das NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET-Flag im NblFlags-Member der NET_BUFFER_LIST-Struktur festgelegt ist, ist das Paket ein Loopbackpaket. Protokolltreiber und Filtertreiber können dieses Flag überprüfen, um festzustellen, ob es sich bei einem Paket um ein Loopbackpaket handelt.

NDIS schleift Pakete zurück, wenn alle der folgenden drei Bedingungen erfüllt sind:

  1. Der zugrunde liegende Miniportadaptermedientyp ist NdisMedium802_3 oder NdisMedium802_5.

  2. Eine der folgenden drei Bedingungen ist erfüllt:

    1. Eine Protokollbindung legt die NDIS_PACKET_TYPE_PROMISCUOUS Einstellung mit der OID_GEN_CURRENT_PACKET_FILTER OID fest, um den Paketfilter anzugeben (und für Windows 8 und höher nicht NDIS_PACKET_TYPE_NO_LOCAL in derselben OID festgelegt), und einer der folgenden Werte ist richtig:

      • Es gibt mehr als eine Bindung an den Miniportadapter.
      • An den Miniportadapter ist ein Filtermodul angefügt, und das Filtermodul registrierte einen Empfangshandler.
    2. Eine Protokollbindung legt die NDIS_PACKET_TYPE_ALL_LOCAL Einstellung mit der OID_GEN_CURRENT_PACKET_FILTER OID fest, um den Paketfilter anzugeben, und einer der folgenden Ist wahr.

      • Es gibt mehr als eine Bindung an den Miniportadapter.
      • An den Miniportadapter ist ein Filtermodul angefügt, und das Filtermodul registrierte einen Empfangshandler.
    3. Der Aufrufer legt das NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK-Flag im SendFlags-Parameter der NdisSendNetBufferLists-Funktion fest.

  3. Das Paket ist akzeptabel, wie durch den Paketfiltersatz mit der OID_GEN_CURRENT_PACKET_FILTER OID für den Miniportadapter bestimmt wird. Hier einige Beispiele:

    • Wenn es sich bei dem Paket um ein direktes Paket handelt, muss die Zieladresse im Paket mit der MAC-Adresse des Miniportadapters übereinstimmen.
    • Wenn es sich bei dem Paket um ein Multicastpaket handelt, muss für den Paketfilter NDIS_PACKET_TYPE_ALL_MULTICAST festgelegt sein, oder die Zieladresse entspricht einer der Multicastadressen in der Multicastadressenliste des Miniportadapters, und der Paketfilter hat NDIS_PACKET_TYPE_MULTICAST festgelegt.
    • Wenn es sich bei dem Paket um ein Broadcastpaket handelt, muss für den Paketfilter des Miniportadapters NDIS_PACKET_TYPE_BROADCAST festgelegt sein.
    • Der Paketfilter des Miniportadapters ist NDIS_PACKET_TYPE_PROMISCUOUS oder NDIS_PACKET_TYPE_ALL_LOCAL festgelegt.

Eine Protokollbindung empfängt Loopbackpakete, wenn eines der folgenden Punkte zutrifft:

  1. Die Protokollbindung ist der ursprüngliche Absender des Pakets, und NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK festgelegt ist.

  2. Die Protokollbindung legt nicht NDIS_PACKET_TYPE_NO_LOCAL im Paketfilter fest.

Eine Protokollbindung empfängt keine Loopbackpakete, wenn eines der folgenden Punkte zutrifft:

  1. Die Protokollbindung legt NDIS_PACKET_TYPE_NO_LOCAL im Paketfilter fest und ist nicht der ursprüngliche Absender für das Paket.

  2. Die Protokollbindung ist der ursprüngliche Absender, aber NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK nicht im SendFlags-Parameter in einem Aufruf der NdisSendNetBufferLists-Funktion festgelegt wird.

Die folgende Abbildung zeigt den Logikfluss des Loopback-Algorithmus.

Flussdiagramm, das den Logikfluss des Loopbackalgorithmus zeigt.