Senden von Ethernet-Frames
Der Windows TCP/IP-Transport unterstützt eine Reihe von Anforderungen für das Senden von Ethernet-Frames. Jeder Treiber (z. B. ein MUX-Zwischentreiber oder Filtertreiber), der Sendeanforderungen von überlastenden Treibern ändert, muss die Anforderungen unterstützen, die der TCP/IP-Transport implementiert.
Hinweis Wenn ein Treiber in einem Treiberstapel diese Anforderungen nicht erfüllt, können sich zugrunde liegende Miniporttreiber, MUX-Zwischentreiber und Filtertreiber unvorhersehbar verhalten.
Für Ethernet-Sendeanforderungen müssen Treiber die folgenden Anforderungen unterstützen:
Wenn ein Treiber eine Sendeanforderung erstellt, sollte der Treiber eine NET_BUFFER_LIST-Struktur für die Ethernet-Frames zuweisen. Das NetBufferListInfo-Element in jeder NET_BUFFER_LIST-Struktur muss die Out-of-Band-Daten (OOB) enthalten, die für die jeweilige Verwendung erforderlich sind. Die OOB-Daten gelten für alle NET_BUFFER Strukturen, die einer NET_BUFFER_LIST-Struktur zugeordnet sind.
Wenn ein Treiber eine Sendeanforderung erstellt, sollte der Treiber mindestens eine NET_BUFFER-Strukturen für die Ethernet-Frames zuordnen und diese Strukturen mit der NET_BUFFER_LIST-Struktur verknüpfen. Jede NET_BUFFER-Struktur, die mit einer NET_BUFFER_LIST-Struktur verknüpft ist, beschreibt einen einzelnen Ethernet-Frame. Der Treiber kann mehrere NET_BUFFER_LIST Strukturen in einer Sendeanforderung verketten.
Alle NET_BUFFER Strukturen, die einer NET_BUFFER_LIST-Struktur zugeordnet sind, müssen denselben Ethernet-Frametyp und die gleiche IP-Protokollversion (IPv4 oder IPv6) aufweisen.
Alle NET_BUFFER Strukturen, die einer NET_BUFFER_LIST-Struktur zugeordnet sind, müssen die gleichen Quell- und Ziel-MAC-Adressen aufweisen.
Wenn ein Treiber TCP- oder UDP-Frames sendet, müssen alle NET_BUFFER Strukturen, die einer NET_BUFFER_LIST-Struktur zugeordnet sind, derselben TCP- oder UDP-Verbindung zugeordnet sein. Hinweis Gemäß den folgenden Anforderungen können übertragene Ethernet-Frames aufgeteilt werden. Das heißt, mehrere Speicherdeskriptorlisten (Memory Descriptor Lists, MDLs) können einer NET_BUFFER-Struktur in einer Sendeanforderung zugeordnet werden.
Teilen Sie den MAC-Header des Ethernet-Sendeframes nicht auf mehrere MDLs auf. Behandeln Sie das VLAN-Flag (Virtual LAN) (oder Priority), falls vorhanden, als Teil des MAC-Headers. Daher muss sich dieses Flag in derselben MDL wie der rest des MAC-Headers befinden.
Wenn ein Treiber die Glieder in der MDL-Kette in einer NET_BUFFER-Struktur oder die NET_BUFFER-Kette in einer NET_BUFFER_LIST-Struktur ändert, muss der Treiber die Links zur ursprünglichen Konfiguration wiederherstellen, bevor er den Besitz des NET_BUFFER_LIST an einen überliegenden Treiber zurückgibt. Treiber sind jedoch nicht erforderlich, um die Verbindungen zwischen NET_BUFFER_LIST Strukturen wiederherzustellen.