Sourcecode Fortschritt



  • 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


  • Mod

    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.


  • Mod

    version = "0.0.2.170 - Rev: 1010"

    Verbesserungen in tcp.c


  • Mod

    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.


  • Mod

    version = "0.0.2.172 - Rev: 1012"

    Farbschemata weiter angepasst, z.B. textColor(WHITE) durch textColor(TEXT) usw.


  • Mod

    version = "0.0.2.173 - Rev: 1013"

    #define _TCP_NETWORK_DATA_ geschaffen. Damit klappt dann auch der telnet-Server Hardwaretest. Offensichtlich ein Zeitproblem, bei Hardware nicht erstaunlich.


  • Mod

    version = "0.0.2.174 - Rev: 1014"

    Einige Fehler bei passive open in tcp.c behoben.
    tcp_data_Längenberechnung noch falsch. 🙄


  • Mod

    version = "0.0.2.175 - Rev: 1015"

    lastPacket erweitert, um die verbleibenden Datenlängen auf den einzelnen Stufen zu ermitteln

    Kette bei uns:

    EthernetRecv(buffer->adapter, (ethernet_t*)buffer->data, buffer->length);               // network.c
    EthernetRecv(network_adapter_t* adapter, ethernet_t* eth, uint32_t length){...}         // ethernet.c
    
    if ((eth->type_len[0] == 0x08) && (eth->type_len[1] == 0x00)) // IPv4                   // ethernet.c
    {
         ipv4_received(adapter, (void*)(eth+1), length-sizeof(ethernet_t));
    }
    
    ipv4_received(struct network_adapter* adapter, ipv4Packet_t* packet, uint32_t length)   // ipv4.c
    
    tcp_receive(adapter, (void*)(packet+1), packet->sourceIP, length-sizeof(ipv4Packet_t)); // ipv4.c
    uint32_t tcpDataLength = -4 /* CRC ? */ + length - (tcp->dataOffset << 2);            // tcp.c
    

    Die -4 könnte die CRC sein, wenn diese im Paket noch dabei ist.
    TODO: das ganze verbleibende TCP-Paket zeigen in PrettyOS (in wireshark sieht man hinter den tcp-Daten nichts)


Anmelden zum Antworten