| Zeile 50: | Zeile 50: | ||
</c> | </c> | ||
| − | Die Deskriptoren sind an 256-Bytes-Grenzen auszurichten und bilden einen Ring, dessen Ende durch das Setzen von Bit 30 des command-Felds indiziert wird. In dieses Feld werden | + | Die Deskriptoren sind an 256-Bytes-Grenzen auszurichten und bilden einen Ring, dessen Ende durch das Setzen von Bit 30 des command-Felds indiziert wird. In dieses Feld werden außerdem die Länge des Puffers (Bits 0-15) so wie das OWN-Bit (Bit 31) geschrieben. Die Sende- bzw. Empfangspuffer können maximal 64 KiB groß sein (allerdings kann die Karte höchstens 16 KiB große Pakete empfangen), ihre physische Adresse wird in low_buf und high_buf gespeichert. Die Puffer sind an 8-Bytes-Grenzen auszurichten. |
Die Karte verfügt über drei Ringe von je maximal 1024 Deskriptoren, einen Empfangsring, einen Sendering mit normaler und einen Sendering mit hoher Priorität (letzterer ist analog zum normalen Sendering anzusteuern; im Folgenden wird nur auf den normalen Sendering eingegangen). | Die Karte verfügt über drei Ringe von je maximal 1024 Deskriptoren, einen Empfangsring, einen Sendering mit normaler und einen Sendering mit hoher Priorität (letzterer ist analog zum normalen Sendering anzusteuern; im Folgenden wird nur auf den normalen Sendering eingegangen). | ||
| Zeile 75: | Zeile 75: | ||
Um ein Paket zu senden, sind zunächst die Parameter im command-Feld des Sendedeskriptors zu setzen. Hierbei sind das OWN-Bit, Bits 28 und 29 zu setzen und die Länge des Pakets in Bits 0-15 zu schreiben. Durch das Schreiben von Bit 6 in das Transmit-Priority-Polling-Register wird der Karte das Vorliegen eines zu sendenen Pakets mitgeteilt. | Um ein Paket zu senden, sind zunächst die Parameter im command-Feld des Sendedeskriptors zu setzen. Hierbei sind das OWN-Bit, Bits 28 und 29 zu setzen und die Länge des Pakets in Bits 0-15 zu schreiben. Durch das Schreiben von Bit 6 in das Transmit-Priority-Polling-Register wird der Karte das Vorliegen eines zu sendenen Pakets mitgeteilt. | ||
| + | |||
| + | RTL8168 und RTL8169 können, um die CPU zu entlasten, die Prüfsummen der wichtigsten Protokolle selbst berechnen. Um diese Funktion zu verwenden, ist das Prüfsummenfeld im Protokollheader zu löschen und stattdessen das entsprechende Bit im command-Feld des Sendedeskriptors zu setzen. Unterstützt werden IPv4 (Bit 18), UDP (Bit 17) und TCP (Bit 16). Neuere Varianten dieser Netzwerkkarte beherrschen auch IPv6. | ||
| + | |||
== Empfangen == | == Empfangen == | ||