Sourcecode Fortschritt
-
Nun reicht es wirklich!
Roll-back bezüglich task.h/c (Version von 0.0.1.130 - Rev. 701 eingebaut, weitere Anpassungen waren glücklicherweise nicht notwendig)
0.0.1.146 - Rev: 719
qemu läuft.
VBox und VMware machen Probleme mit vbe (also 's'), VBox auch beim Überspringen von vbe noch GPF. Das konnten wir schon besser!
-
version 0.0.1.147 - Rev: 720
vbe.c/.h
typedef struct { uint16_t x, y; } CursorPosition_t;
Hinzugefügt und mit DrawChar(...) newline experimentiert.
erstmal bewusst nicht aus video.h genommen um erstmal eine strikte trennen zwischen Textmodus und VESA zu halten.
-
Version 0.0.1.148:
- Schäden behoben, cli/sti-Änderungen aus task.c wieder ausgebaut, andere Änderungen eingebaut. Funktioniert wohl nun wieder alles.
- Patch für VM86.c von Ideenlos
- Codeformatierungen
-
Revision 722
Bootloader-stage2
- So verändert (arbeitet jetzt im UnrealMode), dass der Kernel theoretisch beliebig groß werden kann.
-
version 0.0.1.150 - Rev: 723
Ordner Struktur in Kernel um network und netprotocol erweitert, entsprechende Dateien dorthin verschoben.
-
version 0.0.1.150 - Rev: 724
udp.c/.h
- UDP Header Hinzugefügt.
-
Version 0.0.1.151 - Rev. 726
Senden verbessert (length)
Testen: wireshark
-
Version 0.0.1.152 - Rev. 727
Senden verbessert (korrekte mac-adresse verwendet)
Testen: anpingen und mit arp -a im arp-cache des senders nachschauen
Verfolgen: wireshark
-
Version 0.0.1.153 - Rev. 730 (einige rev. bewusst übersprungen wegen commit-fehler)
Nun klappt die antwort auf arp-requests spezifisch und korrekt!
Bitte stellt eure spezifische IP-Adresse statisch in dem neuen Header myOwnData.h ein, bei mir z.B:
#ifndef MYOWNDATA_H #define MYOWNDATA_H #define My_IP 0xC0A80A61 // 192.168.10.97 #endif
-
version 0.0.1.154 - Rev: 731
dhcp.c/.h
- Grundlegende Idee hinzugefügt.upd.c/.h
- erweitert
-
checksum für ipv4, also auch ping:
// Compute Internet Checksum for "count" bytes beginning at location "addr". uint32_t checksumIPv4(uint32_t count, uintptr_t addr) { register uint32_t sum = 0; while( count > 1 ) // This is the inner loop { sum += *(uint16_t)addr++; count -= 2; } if (count > 0) // Add left-over byte, if any { sum += *(uint8_t*)addr; } while (sum>>16) // Fold 32-bit sum to 16 bits { sum = (sum & 0xFFFF) + (sum >> 16); } return (~sum); }
-
version 0.0.1.155 - Rev: 732
icmp.c/.h
- hinzugefügtInformationen zum ICMP-Protokoll
http://tools.ietf.org/html/rfc1071 <--- internet checksum
http://de.wikipedia.org/wiki/Internet_Control_Message_Protocol <--- icmp Protocol
-
Version 0.0.1.156:
- task.c: cli/sti-Änderungen gesichtet, Fehler behoben und wieder reingenommen
- Aufgeräumt
- Projektfile aktualisiert
-
version 0.0.1.157 - Rev: 734
icmp.c/.h
- ICMPAnswerPing(...), mit Statischen werten hinzugefügt und experimentiert, bisher ohne Erfolg.
-
version 0.0.1.157 - Rev: 735
icmp.c/.h
- ICMPAnswerPing(...), erweitert und getestet. Noch kein Erfolg.
-
Version 0.0.1.158:
- Umstellung der IRQ/ISR-Nummern auf enum begonnen
- Scheduler unterstützt nun waitForIRQ - Wait-Funktionen damit vorerst komplett
- getch auf waitForIRQ umgestellt - Genauso Ressourcensparend, aber performanter (kein hlt das andere tasks ausbremst)
- switch_context führt abhängig von der Anzahl der laufenden tasks hlt aus
-
Version 0.0.1.158 ist fehlerhaft (memory leak), und icmp.c/.h noch ziemlich unbrauchbar.
http://codepad.org/0YDxC2n1 <-- Workaround von MrX
-
version 0.0.1.159 - Rev: 737
keyboard.c/.h
- Workaround von MrX implementiert (getch)ipTcpStack.c/.h
- switch konstrukt für die Protokolle in IPheader hinzugefügt
-
- arp reply ohne adresse! (das war schon besser)
- icmp reply funktioniert nicht! (kommt in wireshark nicht an)
-
version 0.0.1.160 – Revision 738
IP/ICMP
- Header korrigiert
- Checksummenfunktion korrigiert
- ICMP-Ping-Reply-Funktion korrigiert
=> Wireshark zeigt korrekte Antwort anPS: Dass ping bei mir keine Antwort anzeigt, mag an meiner Netzwerkkonfiguration liegen (da bei Wireshark von MAC über IP bis hin zu Checksumme alles zu stimmen scheint).