Sourcecode Fortschritt


  • Mod

    0.0.2.55 - Rev: 895

    Gratuitous ARP eingebaut beim Installieren der Netzwerkadapter.

    for (int i=0; i<10; i++)
        {
            arp_sendGratitiousRequest(adapter); // show PrettyOS' IP and MAC to the LAN
            sleepMilliSeconds(1000);
        }
    

    Mein Entwicklungsrechner im LAN trägt diese IP/MAC aber nicht ein in seiner ARP Tabelle wegen möglichen ARP spoofings. 😉



  • Version 0.0.2.56:

    - PCNet-Treiber: Besser kommentiert, Verbesserte Ausgaben. Senden funktioniert nun unter Qemu (falsche Konstante war Schuld)
    - Gratious-ARP auskommentiert (funktioniert i.d.R. nicht, weil viele Betriebssysteme solche ARPs ignorieren, um ARP-Spoofing zu vermeiden. Unter Qemu funktionierte ARP dadurch überhaupt nicht mehr)


  • Mod

    version = "0.0.2.57 - Rev: 897"

    tcp.h/tcp.c erkennung / zerlegung überarbeitet
    Ports stimmen, Rest leider noch falsch


  • 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


Anmelden zum Antworten