Sourcecode Fortschritt


  • Mod

    version = "0.0.2.149 - Rev: 989"

    Netzwerk-Ausgaben weiter verfeinert, dass man IPs, MACs, TCP flags klar erkennt, bei connections nur noch die ID anstelle der längeren und bedeutungslosen Adresse. Man kann nun auch Empfang und Senden von Paketen besser erkennen.

    Dank an MrX für die Unterstützung bei der Einleitung der Umgestaltung der Ausgabe!

    Man erkennt nun auch merkwürdige Adressierungen klar, z.B. den nicht funktionierenden DHCP Ablauf in qemu oder wenn Nachzügler-Pakete an offenbar zu rasch (ohne time_wait) gelöschte Verbindungen geschickt werden. 😉


  • Mod

    version = "0.0.2.150 - Rev: 990"

    SEQ und ACK Nummern in Host-Format umgewandelt zum Speichern, Rechnen und als Parameter

    Anmerkung:
    qemu version, bitte router MAC in network.h anpassen an eigene Daten.



  • Version 0.0.2.151:

    - IP_t als Typ für IPs geschaffen (union, Zugriff auf Integer-Repräsentation mit .iIP, auf die uint8t[4]-repräsentation mit .IP). (Fukanos Tipp).
    - USB-Ausgabe gekürzt
    - Bugfix in Floppy-Motorsteuerung: Motor wird wieder ausgestellt, nachdem ein Screenshot erstellt wurde
    - Heap besser mit Mutexen geschützt
    - F12 als Alias für PrintScreen bei Screenshots (-> Bessere Kompatibilität mit Emulatoren)
    - Hack für Qemu verbessert: MAC des Qemu-Gateways statt des externen Gateways angegeben (Ehenkes Tipp)


  • Mod

    version = "0.0.2.152 - Rev: 992"

    - qemu IP/MAC statisch in arp cache hinzugefügt
    - Korrektur in ethernet.c für _NETWORK_DIAGNOSIS_
    - Ausgabe bei arp_sendRequest für gesuchte IP
    - DHCP_Discover gestrichen bei qemu (wirklich?), dafür 10.0.2.15 eingestellt in network.h
    - beep off


  • Mod

    Tipp für Testumgebung qemu (von taljeth):
    **-net dump,file=xyz.pcap (hinterher mit wireshark öffnen)
    **
    aktueller qemu batch:

    qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -localtime -net user -net dump,file=netdump.pcap
    

    Eigene Erfahrungen: Bridge TAP/LAN macht wenig Sinn, gibt Probleme mit -net user. Ohne -net user geht es nicht, dann bleibt alles stecken nach dem ersten Senden, keine Antwort an PrettyOS.


  • Mod

    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.h

    Mit 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. 🙄


  • Mod

    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.


  • Mod

    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


  • Mod

    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!


  • Mod

    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. 🙂

    Literatur: http://www.systems.ethz.ch/education/past-courses/fs10/operating-systems-and-networks/material/TCP-Spec.pdf


  • Mod

    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


  • Mod

    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)


  • Mod

    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!


  • Mod

    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)


  • Mod

    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


  • Mod

    version = "0.0.2.166 - Rev: 1007" (??)

    Codevereinfachungen in tcp.c


  • Mod

    version = "0.0.2.167 - Rev: 1007"

    SND.WND, RCV.WND. SEG.WND verwendet.

    Aktuell:

    Vorgabe:
    const uint16_t STARTWINDOWS = 8192; // Wert des Empfangspuffers

    Reduktion 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.


Anmelden zum Antworten