Sourcecode Fortschritt


  • Mod

    version = "0.0.2.130 - Rev: 968"

    - srand, rand eingebaut für Erzeugung von ISS in tcp.c
    - Extra eine eigene Übungsseite gebaut: http://www.henkessoft.de/OS_Dev/PrettyOS.htm

    if(retchar == 'w') // Create & Bind connection
            {
                connection = tcp_createConnection(); 
                // uint8_t destIP[4] ={94,142,241,111}; // 94.142.241.111 at Port 23, starwars story
                uint8_t destIP[4] = {82,100,220,68};  // www.henkessoft.de Port 80
                memcpy(connection->remoteSocket.IP, destIP, 4);
                connection->remoteSocket.port = 80;
    
                uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
                memcpy(connection->localSocket.IP, sourceIP, 4);
    
                network_adapter_t* adapter = network_getAdapter(sourceIP);
                printf("network adapter: %Xh\n", adapter); // check
                connection->adapter = adapter;
    
                if(adapter)
                {
                    tcp_connect(connection);
                }
                return 0;
            }
            if(retchar == 'x') // send data to the connection
            {
                tcp_send(connection, "GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n", strlen("GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n"), ACK_FLAG, connection->tcb.SND_NXT, connection->tcb.SND_UNA);
                return 0;
            }
    

    Klappt gut!

    HTTP hat natürlich im eigentlichen Kernel nichts verloren. Dies hier in keyboard ist sozusagen ein "Steckbrett".


  • Mod

    version = "0.0.2.131 - Rev: 969"

    - Gateway IP aus DHCP ACK gezogen und bei adpater->... eingehängt.


  • Mod

    version = "0.0.2.132 - Rev: 970"

    - Subnet Mask aus DHCP ACK gezogen und bei adpater->... eingehängt.


  • Mod

    version = "0.0.2.132 - Rev: 970" <--- Simulation mit qemu:
    qemu gestartet mit TAP1/TAP2 unter Windows XP.

    Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.970_INTERNET_HTTP.PNG

    strg+w baut die connection via router zum Internet auf Port 80 (HTTP) auf, strg+x fordert Daten mittels GET ... an.

    DHCP läuft hierbei nicht sauber zum Ende durch (bleibt bei OFFER hängen, wobwi REQUEST gesendet wird, man muss mit TAP1 Aktivierung/Deaktivierung toggeln). Daher sind die HACKs wichtig.

    So wie es aussieht, kann man TCP/IP damit trotz des DHCP-Problems testen.

    qemu batch datei:

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

    Die Emulation mit qemu funktioniert auch mit dem pcnet-Treiber. 🙂
    pcnet anstelle rtl8139

    Noch besser: Da qemu und der HOST zusammen NAT spielen, werden die PrettyOS-Pakete unter der IP des HOST verschickt, sodass man in wireshark jedes Paket sieht: http://www.henkessoft.de/OS_Dev/Bilder/rev.970_INTERNET_HTTP_WIRESHARK.PNG

    PrOS = PrettyOS, web = Website

    Send Recv flags     seq#   ack#    nextseq#    window        
    ---------------------------------------------------------------------------
    
    PrOS web  SYN        0     -                   65535
    web  PrOS SYN ACK    0     1                   65535
    PrOS web  ACK        1     1                   65535 
    
    PrOS web  PSH ACK    1     1        82         65535    GET /OS_Dev/...
    web  PrOS ACK        1    82       248         65535        1. Teil Header
    web  PrOS ACK      248    82       755         65535    OK  2. Teil <!DOCTYPE ...
    PrOS web  ACK       82   755                   64781 
    
    web  PrOS FIN ACK  755    82                   65535  
    PrOS web  ACK       82   756                   64781
    

    Anmerkung: beim ersten Datenpaket vom Webserver steht: TCP segment of a reassembled PDU

    HTTP Protokollschicht:

    GET /OS_Dev/PrettyOS.htm HTTP/1.1
    Host: www.henkessoft.de
    Connection: close
    
    HTTP/1.1 200 OK
    Date: Mon, 20 Jun 2011 19:45:22 GMT
    Server: Apache/2.2.17
    Last-Modified: Sun, 19 Jun 2011 16:32:48 GMT
    ETag: "1e07e25-1fb-4a6132b4e8c00"
    Accept-Ranges: bytes
    Content-Length: 507
    Connection: close
    Content-Type: text/html
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <meta content="text/html;charset=ISO-8859-15"
     http-equiv="Content-Type">
      <title>PrettyOS</title>
    </head>
    <body>
    <h1>Hallo, hier spricht PrettyOS. </h1>
    <h1>Ich wurde in C und Assembler erstellt. </h1>
    <h1>Es gibt eine Community, die mich hingebungsvoll pflegt und weiter
    entwickelt.<br>
    </h1>
    <h1><a href="http://www.c-plusplus.net/forum/f62">http://www.c-plusplus.net/forumf62</a></h1>
    <br>
    </body>
    </html>
    

  • Mod

    version = "0.0.2.133 - Rev: 971"

    - tcp etwas überarbeitet: mehr Ausgaben über connection (addr) und port
    - bei strg+b und strg+w (gemischt) geht noch einiges durcheinander!


  • Mod

    version = "0.0.2.134 - Rev: 972"

    - strg+c: listet alle connections auf
    - tcp kleine änderungen



  • Version 0.0.2.135:

    - Keyboard-Treiber komplett neu geschrieben
    -- Alle Tasten der Tastatur werden nun unterstützt (z.B. war früher der Num-Block unbenutzbar)
    -- Bessere Unterstützung für US-International-Layout (fast vollständig)
    -- Änderungen bei der Bedienung: Screenshots werden mit Print im Speicher angelegt. Drückt man unmittelbar danach f oder u, wird er auf Floppy bzw. USB-Stick gespeichert.
    - Bessere ASCII -> CP437-Übersetzung: Mehr Zeichen darstellbar.
    - Event-System
    - getCursor nimmt nun position_t* (in den die Position geschrieben wird) und gibt void zurück. (Führte vorher zu #PF bei Verwendung als Syscall)
    - Bugfix in list_Delete (führte ggf. zur Zerstörung der Listen)
    - Keysound etwas verbessert: Tonhöhe hängt von gedrückter Taste ab, ESC beendet das Programm.

    Bekannte Probleme:
    - Jedes zweite %-Zeichen wird von der Shell (genauer: printLine/kprintf) verschluckt (Problem existiert schon länger, ist erst jetzt aufgefallen)
    - Unter Qemu 0.14.1 und 0.14.0 senden E0-Tasten kein 0xE0. Sie funktionieren daher nicht.



  • Version 0.0.2.135 - Rev: 974:

    - events.h/c nachgeliefert
    - Bugfix: Rebuild der Userprogramme geht wieder


  • Mod

    Version 0.0.2.136 - Rev: 975

    Experimenteller Zwischenstand mit arp_sendRequest und dem Versuch das Gateway einzutragen, klappt leider nicht (s. wireshark). Ursache unklar.



  • Version 0.0.2.137

    - Berücksichtigung des Subnets beim Senden von Paketen. Problem: ARP-Requests funktionieren nicht
    - Events mit mutex geschützt
    - Für Tests die Funktion network_getFirstAdapter bereitgestellt
    - Kleinigkeiten


  • Mod

    version = "0.0.2.138 - Rev: 977"

    - arp_sendRequest korrigiert
    - arp_waitForReply geändert


  • Mod

    version = "0.0.2.139 - Rev: 978"

    - arp_sendRequest eingebaut in DHCP ACK options
    - qemu HACK dort eingebaut
    aber es läuft noch nicht rund, qemu gar nicht mit TCP wegen der nun fehlenden MAC-Adresse des gateways des externen routers, an den qemu/TAP nicht ran kommt. Da muss wohl ein MAC-HACK her wie vorher.

    In findConnection (tcp.c) ist auch noch ein blöder HACK für passive open im ersten recveive schritt.


  • Mod

    version = "0.0.2.140 - Rev: 979"

    - QEMU_HACK (in network.h zusammen mit externer router MAC definiert) eingebaut in ipv4.c beim Senden
    - tcpConnection_t* findConnectionID(uint32_t ID) neu eingeführt (zur Brückung strg+w und strg+x)
    - QEMU HACK aus DHCP entfernt
    - strg c listet nun incl. ID und Adresse auf


  • Mod

    version = "0.0.2.141 - Rev: 980"

    Fehler behoben in tcp.c bezüglich Übergabe des Ports an findConnection(...)

    Es gibt nun drei Versionen:
    - tcpConnection_t* findConnectionID(uint32_t ID)
    - tcpConnection_t* findConnectionListen(network_adapter_t* adapter)
    - tcpConnection_t* findConnection(uint8_t IP[4], uint16_t port, network_adapter_t* adapter)

    Es wird nun jeweils die qemu-Version von mir ins Repo gestellt. Bitte daran denken, die router-MACs in network.h anzupassen (qemu HACK). Man erhält diese mittels arp -a, evtl. vorher den router pingen, wenn er noch nicht im arp cache steht. 🙂

    Die Zuordnung der empfangenen Pakete zu den connections sollte nun recht gut klappen.

    Probleme:
    - strg c (connection list) ohne \n am Ende
    - telnet daten empfang macht probleme (ACK passt nicht?? Funktionierte aber schon gut)


  • Mod

    version = "0.0.2.142 - Rev: 981" 🙂

    Veränderungen in ckernel.c und tcp.c, die durch Suchen der passenden Verbindung helfen, dass die Experimente gelingen.

    Wichtig: Hinzufügen von ESTABLISHED als Parameter bei findConnection(...).

    Probieren Sie folgendes aus: (bitte MACs für Ihren externen Router zum Internet anpassen)

    Mehrfach strg+w drücken. Hierdurch werden zu meiner Homepage mehrere Verbindungen geöffnet, allerdings nur die erste wird auf ESTABLISHED gesetzt. Die anderen sitzen auf SYN_SENT. Wenn Sie nun strg+x drücken wird die angesprochene HTML-Datei gezogen und die Verbindung anschließend geschlossen. Daraufhin wird die nächste connection von SYN_SENT auf ESTABLISHED gesetzt (einige Sekunden warten). Das geht immer so weiter (mit strg+c die connections auflisten), bis keine HTTP-Verbindung mehr vorhanden ist. Dann erfolgt auf strg+x hin eine Fehlermeldung. Sie können auch beliebig passive LISTEN Sockets eröffnen. Diese kann man ebenfalls auf diese Weise mit z.B. telnet (gelingt bisher nur bei Hardware Tests) "abarbeiten".

    Diese Version zeigt die Möglichkeiten, wie man mehrere Verbindungen beispielhaft strukturieren kann, und die Abläufe, wenn man sich mit der gleichen Client-IP mit mehreren Verbindungen (verschiedene Port-Nummern) auf dieselbe Datei auf einem HTTP-Server (im Internet) aufsetzt. 🙂

    Sonstiges:
    copy_kernel_bin_to_floppy.bat wurde hinzugefügt:

    xcopy /y kernel\kernel.bin a:\kernel.bin
    

    Beschleunigt das Erstellen von Floppydisks bei Reihenversuchen, bei denen nur kernel.bin verändert wird.

    Bedienungshinweise:
    strg+w: baut HTTP-Verbindung auf zu meiner Homepage (ESTABLISHED)
    strg+x: zieht den HTML Text. Die Verbindung wird geschlossen
    strg+b: erstellt LISTEN socket (wartet auf SYN von außen)
    strg+c: listet alle Verbindungen auf

    qemu batch: qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=pcnet,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime

    wichtig: -net user


  • Mod

    version = "0.0.2.143 - Rev: 982"

    - bei qemu wird DHCP_Discover nun übergangen in network.c
    - unwichtige Korrektur in tcp.c

    Die Verbindung mit strg+w klappt nicht immer zuverlässig.


  • Mod

    version = "0.0.2.143 - Rev: 983"

    Farbwerte aus video.h eingesetzt.


  • Mod

    version = "0.0.2.144 - Rev: 984"

    Neues Farbschema eingefügt.



  • Version 0.0.2.145

    - Stack Trace implementiert
    - Ausgabe bei Exceptions verbessert
    - Kleinigkeiten



  • Version 0.0.2.146:

    - Textausgabe gemeinsam mit ehenkes verbessert


Anmelden zum Antworten