Ziel: Netzwerk-Treiber und -Protokolle
-
Durch den Vorstoß von tty im PCI-Scan hat PrettyOS nun Kontakt aufgenommen zum LAN. Man sieht das sehr schön hier: http://www.henkessoft.de/OS_Dev/Bilder/rev115.png
Das ist ein Paket, das mein Printserver (00-c0-02-c6-e5-65) ins LAN abgegeben hat. Adressat waren hier alle. Den Code findet man momentan für RTL8139 in der Datei pci.c.
Wer empfängt, wird auch senden.
Links:
http://lowlevel.brainsware.org/wiki/index.php/Ethernet
http://lowlevel.brainsware.org/wiki/index.php/RTL8139#Empfangen
http://pdf1.alldatasheet.com/datasheet-pdf/view/84677/ETC/RTL8139.html
-
Das ist wirklich heiß! LAN ist ein toller Schritt. Weiter so, tty!
-
Leider hat tty das Thema inzwischen abgebrochen. Da werden wohl nun andere Entwickler ran müssen, wenn das was werden soll. Erster Meilenstien: Antwort auf PING
-
tty hat uns im IRC zugesagt, weiter zu machen.
Seine Netzwerkkarte lieferte einen IRQ 0xFF ab, so dass er nicht testen konnte. Hat da jemand ein Heilmittel?
-
Einige Hardwaretreiber kriegt ihr ja relativ mühelos per CDI. Vermutlich ist es also sinnvoll, sich vor allem auf den TCP/IP-Stack zu konzentrieren.
Was genau verstehst du unter "IRQ abliefern"? Aber 0xFF klingt irgendwie nicht so richtig hilfreich.
-
Ja, das ist richtig. Bin gespannt, ob das wirklich gelingt mit der Übernahme.
Was genau verstehst du unter "IRQ abliefern"? Aber 0xFF klingt irgendwie nicht so richtig hilfreich.
Wir haben im pci-Scan folgende Passage, bei der wir die IRQ Nummer auswerten:
if (pciDev_Array[number].irq!=255) { printf(" IRQ:%d ", pciDev_Array[number].irq); } else // "255 means "unknown" or "no connection" to the interrupt controller" { printf(" IRQ:-- "); }
Ich habe das bisher nicht erlebt auf meinen Test-PC, aber bei tty lieferte die Netzwerkkarte diesen IRQ. Damit erhielt er keinen Interrupt und hörte auf an dem Thema weiter zu entwickeln. Dieser Schwachpunkt bei PCI wurde nicht verstanden und ist folglich auch noch nicht überwunden.
-
@tty: was ergibt lspci -v unter Linux? Umstellung von IRQ im BIOS möglich? wirklich RTL8139? Was kam bei deinen Recherchen in Richtung Advanced Programmable Interrupt Controller (APIC) heraus?
-
IRC-chat:
<ifloop>inform me when tty continues with the network stuff i will support him (if he wants)
Es wäre wirklich toll, wenn wir schrittweise weiter kommen könnten.
Erster Meilenstein: Antwort auf das PING eines Fremdrechners
-
Zuvor muss es gelingen, eine RTL8139 in einer VM zu simulieren.
Mit qemu und openvpn (enthält TAP network devices) ist es mir bisher unter Win XP nicht gelungen.
batch-datei:
qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1F,macaddr=00:12:12:12:12:12 -net user -localtime -usb -usbdevice disk:format=raw:dummy.bin
In Netzwerkverbindungen (Win XP): TAP-Win32 Adapter V9 Verbindung hergestellt
Als IP-Adresse habe ich dort schon die am Router statisch für 00:12:12:12:12:12 eingestellte IP als auch 10.0.2.2 (qemu) probiert.
Ich teste mit Ping <IP>
==> Kein Empfang bei PrettyOS
Ein Grund: EHCI und RTL8139 verwenden beide IRQ 11 (stellt man install... bei EHCI ab, so kommen erstmalig netzwerk-meldungen bei PrettyOS auf qemu)
-
Inzwischen sind wir etwas weiter. Die doppelte Belegung des IRQ habe ich durch Veränderung der Addresse (0x1A anstelle 0x1F) bewirkt.
Nützliche Links:
http://www.cs.usfca.edu/~cruse/cs326/RTL8139_ProgrammersGuide.pdf
http://www.lowlevel.eu/wiki/Ethernet
http://de.wikipedia.org/wiki/Ethernetqemu simuliert die RTL8139, die Verbindung ins LAN erfolgt mittels TAP-Device, auf 10.0.2.2 befindet sich der qemu router.
-
Das Thema "Netzwerk" ist nach längerer Durststrecke nun auf gutem Weg. Der RTL8139 Treiber wurde ergänzt um andere Treiber, z.B. RTL 8168 (noch im Aufbau) und pcnet (für VBox). Bei den Protokollen laufen bisher ethernet, IP, ARP, ICMP. UDP und TCP sind gerade im Ausbau begriffen. DHCP steht auf dem Plan. ehenkes, MrX und cefour arbeiten momentan parallel an diesem Thema. Damit ist der Erfolg gewährleistet.
-
Aus dem Thread http://www.c-plusplus.net/forum/251851
Source Dest Source Dest Packet MAC addr MAC addr IP addr IP addr Description ----------------------------------------------------------------- Client Broadcast 0.0.0.0 255.255.255.255 DHCP Discover DHCPsrvr Broadcast DHCPsrvr 255.255.255.255 DHCP Offer Client Broadcast 0.0.0.0 255.255.255.255 DHCP Request DHCPsrvr Broadcast DHCPsrvr 255.255.255.255 DHCP ACK
So kann DHCP rudimentär ablaufen.
-
TCP- und UDP-Checksum: http://www.c-plusplus.net/forum/251851-13
-
TCP incl. erste Netzwerk-API funktionieren. Beispiel: starwars.elf.
Dieser Thread wird nun geschlossen, da es einen parallelen Thread gibt.