Verwaltung von Net Ring-Elementen
Befolgen Sie die Anleitung in diesem Thema, um Ihre NET_RING-Strukturen und deren Elemente während der Netzwerkdatenübertragung zu verwalten. Die Regeln in diesem Thema beschreiben, welche Member der Net Ring-Elemente Clienttreiber je nach Datenpfadszenario ändern können, sowie allgemeine Informationen, die Clienttreiber für diese Strukturen berücksichtigen sollten.
Wichtig
Clienttreiber sollten diese Anweisungen in allen Entwicklungsphasen einhalten. Wenn ein Clienttreiber diese Anweisungen beim Testen mit driver verifier nicht einhält, meldet driver verifier einen Verstoß und löst eine Fehlerprüfung auf dem zu testden Gerät aus.
NET_RING
Wenn die übergeordnete Paketwarteschlange des NET_RING gestartet wird, werden alle Indizes im Ring mit 0 initialisiert.
In der folgenden Tabelle wird beschrieben, welche Member des Net Rings von Clienttreibern geändert werden können.
Feld | Der Clienttreiber darf geändert werden. |
---|---|
OSReserved1 | Nein |
ElementStride | Nein |
Sizeinbytes | Nein |
ElementIndexMask | Nein |
Endindex | Nein |
OSReserved0 | Nein |
OSReserved2 | Nein |
BeginIndex | Ja (erforderlich) |
NextIndex | Ja (optional) Hinweis: Das Framework liest NextIndex nie. |
Entwurf | Ja (optional) Hinweis: Das Framework liest nie Scratch. |
Buffer | Nein |
Clienttreiber dürfen keine schreibgeschützten Member dieser Struktur ändern und dürfen während eines Aufrufs von EvtPacketQueueAdvance niemals BeginIndex über EndIndex hinaus erhöhen.
Weitere Informationen zum Indexbesitz in Netzringen finden Sie unter Einführung in Netzringe.
NET_PACKET
Die Felder in einem NET_PACKET sind empfindlich auf die verschiedenen Kontexte, in denen der Datenpfad ausgeführt wird. Ob das Feld Ignorieren des Pakets festgelegt ist und ob der Treiber das Paket empfängt (Rx) oder das Paket übermittelt (Tx), ändert den Regelsatz, der auf das Paket angewendet wird.
Die folgende Tabelle enthält Anweisungen für Treiber in jedem Szenario.
Rx oder Tx | Feld ignorieren wird festgelegt durch... | Notizen |
---|---|---|
Rx | Clienttreiber |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Während Rx-Vorgängen unterliegt das Feld Layout der NET_PACKET den folgenden Regeln:
- Alle Felder mit Ausnahme von Reserviert0 müssen vom Clienttreiber initialisiert werden.
- Wenn Layer2Type auf NetPacketLayer2TypeEthernet festgelegt ist, muss Layer2HeaderLengthmindestens 14 sein.
- Wenn Layer2Type auf NetPacketLayer2TypeNull festgelegt ist, muss Layer2HeaderLength auf 0 festgelegt werden.
- Wenn Layer3Type ein IPv4-Typ ist, muss Layer3HeaderLengthmindestens 20 sein .
- Wenn Layer3Type ein IPv6-Typ ist, muss Layer3HeaderLengthmindestens 40 sein .
- Wenn Layer4Type auf TCP festgelegt ist, muss Layer4HeaderLengthmindestens 40 sein .
- Wenn Layer4Type auf Udp festgelegt ist, muss Layer4HeaderLength8 oder höher sein.
- Die Ebenentypfelder müssen innerhalb des entsprechenden Enumerationsbereichs liegen.
Layout wird während Tx nicht verwendet.
NET_FRAGMENT
NET_FRAGMENT Feldregeln hängen davon ab, ob der Treiber empfängt oder sendet und ob die Fragmentpuffer vom Treiber oder vom Framework an die Pakete angefügt werden.
Rx oder Tx | Notizen |
---|---|
Rx |
|
Tx |
|