Sourcecode Fortschritt


  • Mod

    version = "0.0.2.58 - Rev: 898"

    tcp.h und tcp.c weiter verbessert
    6 Flags (nun uint8_t anstelle bool) werden noch nicht richtig angezeigt
    (Tests mit telnet und wireshark)

    Wichtiger Hinweis:
    Mit dem qemu-EHCI (Vers. 0.11.5) klappt der ARP reply nur sporadisch (man kann es mit arp -s 10.0.2.15 00-12-12-12-12-12 statisch eintragen).
    Bei qemu 14.1 klappt der ARP reply auf Anhieb.
    http://qemu-buch.de/d/QEMU_unter_Microsoft_Windows#QEMU_unter_.C3.A4lteren_Microsoft_Windows-Versionen


  • Mod

    version = "0.0.2.59 - Rev: 899"

    TCP Debug nun ok

    http://tools.ietf.org/html/rfc793#page-15 (TCP header)


  • Mod

    version = "0.0.2.60 - Rev: 900"

    Schalter _NETWORK_DATA_ in os.h eingeführt, um die Ausgaben etwas übersichtlicher zu machen. Die einzelnen Bytes - und ihre Bedeutung - kann man besser in wireshark analysieren.



  • Version 0.0.2.61:

    - Verbesserungen am RTL8168-Treiber
    - Verbesserungen an UDP-Funktionsprototypen
    - Kleinigkeiten


  • Mod

    version = "0.0.2.62 - Rev: 902"

    Sende-Funktion in UDP aktualisiert:

    void UDPSend(struct network_adapter* adapter, void* data, uint32_t length);
    

    Noch nicht getestet.



  • Version 0.0.2.63:

    - Großer Netzwerkprotokollumbau


  • Mod

    Dickes Lob an MrX! 👍



  • Version 0.0.2.64:

    - ELF-Loader setzt nun R/W-Privilegien bei der Speicherallokation
    - Konsolen unterstützen nun SCROLL_BEGIN
    - Anpassungen an arp wegen Netzwerkumbau in 0.0.2.63
    - Kleinigkeiten



  • Version 0.0.2.65:

    - Ausgaben des RTL8139-Handlers hinter Makro verborgen
    - Analyse der Netzwerkpakete in Kernel-Idle-Schleife verlegt
    - Erkennung des Adressaten einer Nachricht (MAC, IP) -> TODO: Warum funktioniert das bei ICMP nicht zuverlässig?



  • Version = "0.0.2.66 - Rev: 906";

    Netzwerk Interface überarbeitet
    udpSend eingebaut


  • Mod

    Version = "0.0.2.67 - Rev: 907";

    (von cefour eingespielt)

    PING PONG über router läuft nicht mehr.

    23:39:08.264789 192.168.10.103 192.168.10.97 ICMP Echo (ping) request
    23:39:08.273097 UnexTech_0f:0a:0c Broadcast ARP Gratuitous ARP for 192.168.10.97 (Request)

    "pingender Rechner schickt an den Router, und Router tauscht mac-addresse im Paket gegen seine eigene aus" (cefour)

    Hat bisher nur geklappt, weil wir die MAC-Adresse geliefert haben.


  • Mod

    version = "0.0.2.68 - Rev: 908"

    - Formatierungen
    - Ver./Rev. korrigiert
    - IP 192.168.10.97 (für Hardware-Test)
    - Frequenz auf 250 Hz eingestellt wie bei Linux 2.6.13
    http://de.wikipedia.org/wiki/Linux_(Kernel)#Neuerungen_im_Kernel_2.6

    Routing-Tabelle fehlt noch
    http://de.wikipedia.org/wiki/Routingtabelle

    Beispiel: Aufruf mit netstat -r

    Routingtabelle
    ===========================================================================
    Schnittstellenliste
    0x1 ........................... MS TCP Loopback interface
    0x2 ...00 13 d4 11 27 a5 ...... Intel(R) PRO/1000 PM Network Connection - Paketplaner-Miniport
    ===========================================================================
    ===========================================================================
    Aktive Routen:
         Netzwerkziel    Netzwerkmaske          Gateway   Schnittstelle  Anzahl
              0.0.0.0          0.0.0.0     192.168.10.1  192.168.10.103       20
            127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
         192.168.10.0    255.255.255.0   192.168.10.103  192.168.10.103       20
       192.168.10.103  255.255.255.255        127.0.0.1       127.0.0.1       20
       192.168.10.255  255.255.255.255   192.168.10.103  192.168.10.103       20
            224.0.0.0        240.0.0.0   192.168.10.103  192.168.10.103       20
      255.255.255.255  255.255.255.255   192.168.10.103  192.168.10.103       1
    Standardgateway:      192.168.10.1
    ===========================================================================
    Ständige Routen:
      Keine
    

    Anzahl = Metrik



  • "0.0.2.69 - Rev: 909"
    Arp Tabelle, finden eines Eintags war Fehlerhaft.
    Wurde durch Integer vergleich anstatt string vergleich behoben



  • Version 0.0.2.70:

    - strncmp durch memcmp ausgetauscht im Netzwerkcode
    - Userlib: Weitere Funktionen implementiert
    - Bugfix: strncmp repariert


  • Mod

    version = "0.0.2.71 - Rev: ..." (nicht committed)

    - UDPSend korrigiert (src- und destPort mit htons gedreht)
    - Funktion ergänzt in network.c: network_adapter_t* network_getAdapter(uint8_t IP[4]);
    - In keyboard.c die Erzeugung eines Netzwerkpakets per Tastendruck strg+n für Experimente ergänzt:

    if(retchar == 'n') // If you want to test something in networking
            {   
                uint8_t sourceIP_address[4] ={192,168,10,97};
                uint8_t   destIP_address[4] ={192,168,10,103};
    
                network_adapter_t* adapter = network_getAdapter(sourceIP_address);
                printf("network adapter: %X\n", adapter); // check
    
                uint16_t srcPort  = 40; // unassigend
                uint16_t destPort = 40;
    
                if (adapter)
                {
                    UDPSend(adapter, "PrettyOS says hello", strlen("PrettyOS says hello"), srcPort, adapter->IP_address, destPort, destIP_address);
                }
                return 0;
            }
    

    Kontrolle mittels wireshark: http://www.henkessoft.de/OS_Dev/Bilder/rev911_UDPsend_TEST.PNG


  • Mod

    version = "0.0.2.72 - Rev: 911" (ACHTUNG: in ckernel.c versehentlich 912)

    - Weiterer Fehler in UDPSend behoben (Länge)

    void UDPSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t  srcPort, uint8_t  srcIP[4], uint16_t destPort, uint8_t destIP[4])
    {
    	udpPacket_t* packet = (udpPacket_t*)((uintptr_t)data -sizeof(udpPacket_t));
    	packet->sourcePort  = htons(srcPort);
    	packet->destPort    = htons(destPort);
    	packet->length      = htons(length + sizeof(udpPacket_t));
    	packet->checksum    = packet->checksum  = udpCalculateChecksum(packet, length + sizeof(udpPacket_t), srcIP, destIP);
    	ipv4_send(adapter,packet,length + sizeof(udpPacket_t),destIP,17);
    }
    

    Foto des Wireshark-Pakets: http://www.henkessoft.de/OS_Dev/Bilder/rev912_UDPsend_TEST.PNG

    PS: Man muss zuvor PrettyOS pingen, damit die IP/MAC Kombination der destIP in der arp table unseres OS steht.

    Nachdem UDPSend funktioniert, kann man sich an DHCPDiscover heran wagen. 😉
    An htons denken!



  • Version 0.0.2.73:

    - UDPSend repariert. (Gefährliches Spiel mit Pointern entfernt)
    - Ansatz für DHCP_Discover
    - 255.255.255.255 statisch in ARP-Tabellen eingetragen


  • Mod

    version = "0.0.2.74 - Rev: 913"

    Meilenstein: Erfolgreicher DHCP Discover 👍
    Thanks to: MrX, cefour

    Foto (wireshark): http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover.PNG

    // options
        packet.options[0] =  99;  // MAGIC 
        packet.options[1] = 130;  // MAGIC
        packet.options[2] =  83;  // MAGIC
        packet.options[3] =  99;  // MAGIC
        packet.options[4] =  53;  // DHCP message type
        packet.options[5] =   1;  // Length
        packet.options[6] =   1;  // data: DHCP Discover
        packet.options[7] = 255;  // end
    

    Options: code/tag, length, data
    http://www.networksorcery.com/enp/protocol/bootp/options.htm


  • Mod

    Ergänzende Versuche, die jedoch nicht zu DHCP OFFER führten:

    1. DHCP Options:
    // options
        packet.options[0]  =  99;  // MAGIC
        packet.options[1]  = 130;  // MAGIC
        packet.options[2]  =  83;  // MAGIC
        packet.options[3]  =  99;  // MAGIC
    
        packet.options[4]  =  53;  // MESSAGE TYPE
        packet.options[5]  =   1;  // Length
        packet.options[6]  =   1;  // (data)
    
        packet.options[7]  =  55;  // 
        packet.options[8]  =   6;  // Length
        packet.options[9]  =   1;  // SUBNET MASK 
        packet.options[10] =   3;  // ROUTERS
        packet.options[11] =   6;  // DOMAIN NAME SERVER
        packet.options[12] =  15;  // DOMAIN NAME
        packet.options[13] =  28;  // BROADCAST ADDRESS
        packet.options[14] =  42;  // Network Time Protocol (NTP) SERVERS
    
        packet.options[15] =  57;  // MAX MESSAGE SIZE
        packet.options[16] =   2;  // Length
        packet.options[17] =   2;  // (data)
        packet.options[18]  = 64;  // (data)
    
        packet.options[19] = 255;  // end
    
    1. Next Server IP eingetragen:
    for(uint8_t i = 0; i < 4; i++)
        {
            packet.ciaddr[i] = 0;
            packet.yiaddr[i] = 0;
            // packet.siaddr[i] = 0;
            packet.giaddr[i] = 0;
        }
    
        // next server IP
        packet.siaddr[0] =  192;
        packet.siaddr[1] =  168;
        packet.siaddr[2] =   10;
        packet.siaddr[3] =    1;
    

    Die Versuche wurden analog mit qemu ausgeführt.

    Auch ein Versuch mit

    #define IP_1 0
    #define IP_2 0
    #define IP_3 0
    #define IP_4 0
    

    zu starten führt bei realer Hardware zu nichts.

    Leider kein Erfolg bezüglich DHCP Offer. 🙄

    ------------------------------------------------------

    Hier ein erfolgreicher DHCP-Vorgang eines anderen Rechners:

    http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01a.PNG (Abfolge, zeitlich seltsam)
    http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01.PNG (DHCP Discover)
    http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01b.PNG (Options)


  • Mod

    version = "0.0.2.75 - Rev: 914"

    IP 0.0.0.0 als source, andere Options, DHCP Autoconfig

    Für qemu konfiguriert.

    Leider noch kein Offer. Gute Ideen sind gesucht.


Anmelden zum Antworten