Sourcecode Fortschritt
-
version = "0.0.2.153 - Rev: 993"
- struct zur Speicherung von Daten während des Empfangs über die verschiedenen Protokolle hinweg eingebaut (bisher gesammelt: senderMAC, senderIP).
- ACHTUNG: Änderung in network.hMit Qemu wurde bisher kein vollständiges DHCP erreicht, was selbst bei Hardware ohne Probleme verlief.
EDIT: diese version macht auch mit Test-PC Probleme. Ursache wird ermittelt.
-
version = "0.0.2.154 - Rev: 994"
- DHCP Request wieder auf BROADCAST Flag umgerüstet (nur damit läuft der Test-PC).
Committed wurde die Qemu-Version.
-
version = "0.0.2.154 - Rev: 995"
Wir verzichten nun in Qemu auf das DHCP Discover (network.c). Damit erhalten wir von lästigen DHCP-Paketen freie und wirklich interessante Wireshark-Protokolle (pcap), die man direkt mit wireshark aus dem Internet als Vergleich zu eigenen Versuchen öffnen kann.
Hier ein Beispiel mit strg+w (Handshake mit Homepage) und strg+x (Daten laden, Verbindung ordnungsgemäß schließen). Hier wirkt vor allem der Host zusätzlich mit, so dass wir davon lernen können, wie man es richtig macht.
http://www.henkessoft.de/OS_Dev/wireshark_captions/rev.995_netdump.pcap
Es kam letzt die Frage auf, ob 00-12-12-12-12-12 eine gültige MAC-Adresse ist (The first 3 byte of each MAC address are assigned to a specific vendor.). Sie ist es in der Tat:
http://www.base64online.com/mac_address.php?mac=00%3A12%3A12
Mac address: 00:12:12 Vendor: Plus PLUS Corporation
-
Version 0.0.2.155:
- Floppytreiber: Dump-Funktion implementiert, Configure-Kommando genutzt, IRQ-Timeout bei Calibrate gesenkt, Reset gemäß Spezifikation implementiert.
- Bugfix: BL2 übergibt korrekte mmap-Länge an Kernel -> Keine Reboot-Probleme mehr.
- Code angepasst, sodass keine Compilerfehler beim kompilieren mit -O2 oder -O3 kommen.
- DHCP: Redundanten Code in Funktion ausgelagert.
- Kleinigkeiten
-
Version 0.0.2.156:
- Netzwerk-API implementiert -> Userprogramme im Netzwerk mit TCP sind jetzt möglich
- starwars.ELF als erstes Netzwerk-Userprogramm hinzugefügt
-
version = "0.0.2.157 - Rev: 998"
- Fehler (Parameterreihenfolge) berichtigt in tcp_usend
- user program "browser.elf" beispielhaft erstellt (Zugriff auf Homepage ehenkes), um tcp_usend (kernel) aus dem user-land mittels syscall zu testen. Funktioniert nun prächtig!
-
version = "0.0.2.158 - Rev: 999"
- strg+i, strg+w, strg+x entfernt.
- tcp..h/c: Nutzung von TCB entsprechend RFC 793 testweise für Active Open begonnen.
Active open klappt noch.
-
version = "0.0.2.159 - Rev: 1000" und
version = "0.0.2.160 - Rev: 1001"Weiterentwicklung bei tcp.h/c gemäßt rfc 793.
Problem: SEQs und ACKs beim Datentausch auf auf FIN offenbar noch falsch.
Letzte korrekte Rev: 999
-
version = "0.0.2.161 - Rev: 1002"
Problem bei tcp.c:
Mischung aus Rev. 1001 und rollback zu Rev. 999. Nun kann man systematisch den Logikfehler im Ablauf suchen.
Ein Fehler war die Verwechslung zwischen length und tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
Die -4 wird bis jetzt nicht verstanden!!!Die passive open Seite läuft leider nicht ok (Test-PC, strg+b, telnet: open geht, send blabla <--- ACK-Problem)
-
version = "0.0.2.162 - Rev: 1003"
Wesentliche Fehler beseitigt in tcp.c:
- kein Erhöhen der SND.NXT beim Empfang bei ESTABLISHED (die +1 gilt nur für den 3-way-handshake)
- dafür Erhöhen der SND.NXT beim eigenen Senden ^^Unklar nach wie vor:
uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
Problem: passive open noch nicht in Ordnung!
-
version = "0.0.2.163 - Rev: 1004"
Nun gelingt auch passive open mit anschließendem Datentausch:
Hierbei Test-PC verwenden, dafür #define QEMU_HACK auskommentieren.
Für telnet (PrettyOS als Server) unbedingt #define _NETWORK_DATA_ aktivieren, damit man die ankommenden Daten sieht. Hier müsste jemand ein telnet-Server-Programm schreiben im user-land von PrettyOS.
-
Version 0.0.2.164:
- Funktion zum verschieben von Elementen zwischen Ringen implementiert: Scheduler verursacht weniger Speicherallokationen/Deallokationen
- Code aufgeräumt, Änderung an dummy.c reverted.
- rtl8139_eeprom.c/h gelöscht, da kein konkreter Anwendungszweck vorhanden (wurde ohne klaren Zweck mit Rev. 708 von bheide hinzugefügt)
-
version = "0.0.2.165 - Rev: 1006"
static bool IsSegmentAcceptable (tcpPacket_t* tcp, tcpConnection_t* connection, uint16_t tcpDatalength) hinzugefügt und im TCP-Datenempfang eingesetzt, um eingehende Pakete zu prüfen.
beep ausgeschaltet
-
version = "0.0.2.166 - Rev: 1007" (??)
Codevereinfachungen in tcp.c
-
version = "0.0.2.167 - Rev: 1007"
SND.WND, RCV.WND. SEG.WND verwendet.
Aktuell:
Vorgabe:
const uint16_t STARTWINDOWS = 8192; // Wert des EmpfangspuffersReduktion des Empfangspuffers nach Empfang (vor tcp_send):
connection->tcb.SND.WND -= tcpDataLength;
connection->tcb.SEG.WND = connection->tcb.SND.WND;Wiederherstellung des Empfangspuffers (mach tcp_send):
connection->tcb.SND.WND = STARTWINDOWS; // Simuliert Weitergabe der Daten an user-App, z.B. unseren Browser.
-
version = "0.0.2.168 - Rev: 1008"
TCP: kleine Verbesserungen
-
version = "0.0.2.169 - Rev: 1009"
Funktion tcp_receive(...) wurde intern komplett umgebaut. Die erste Ordnungspriorität haben nun die Zustände (states) und nicht mehr die Flags.
Damit lässt sich das Modul besser mit den Plänen in http://www.medianet.kent.edu/techreports/TR2005-07-22-tcp-EFSM.pdf vergleichen.Tests: browser , starwars (beides active open) und telnet-server (passive open, zur Zeit nur mit Hardware testbar) gehen noch.
-
version = "0.0.2.170 - Rev: 1010"
Verbesserungen in tcp.c
-
version = "0.0.2.171 - Rev: 1011"
Verbesserungen tcp.c und network.h (nun kann einfacher zwischen Qemu und Hardware umgestellt werden)
Anmerkungen :
Will man Qemu als telnet-Server verwenden: _NETWORK_DATA_ aktivieren in os.h, damit die Daten angezeigt werden (vielleicht hat dies auch noch einen Seiteneffekt).Mit Qemu/TAP klappt es leider noch nicht korrekt. Es bleibt beim SYN (telnet) - SYN,ACK (PrettyOS) hängen.
-
version = "0.0.2.172 - Rev: 1012"
Farbschemata weiter angepasst, z.B. textColor(WHITE) durch textColor(TEXT) usw.