Sourcecode Fortschritt


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


  • Mod

    version = "0.0.2.168 - Rev: 1008"

    TCP: kleine Verbesserungen


Anmelden zum Antworten