Sourcecode Fortschritt
-
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).
-
Version 0.0.1.161 – Revision 739
ICMP: Datenteil
- ICMP-Pings enthalten einen Datenteil, den man zurückschicken sollte – was ab jetzt auch getan wird.
-
http://img192.imageshack.us/img192/3690/pinght.png <--- erfolgsmeldung von Ideenlos. Gratulation!
-
"Ideenlos" war schneller als ich, der es nur mit hrPing und 56 byte Daten schaffte:
hrping 192.168.10.97 -S -t -l 56
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_161_PingReply.PNG
Statistics for 192.168.10.97:
Packets: sent=227, rcvd=153, error=0, lost=74 (32% loss) in 106.126180 sec
RTTs of replies in ms: min/avg/max/dev: 67.929 / 12788.809 / 33029.268 / 8959.212<Tobiking>Das hrPing schickt Latein?
-
Version 0.0.1.162 – Rev: 740
etwas aufgeräumt im Netzwerk-Bereich
Leider ist RXBUFTAIL ab und zu verschoben!
-
Version 0.0.1.163 – Revision 741
rtl8139
- wenn man die Empfangsdaten aus dem entsprechenden Puffer
herauskopiert, werden anscheinend mehr Pakete korrekt empfangen.
-
Das war entscheidend! (findet sich auch im programming guide)
Nun läuft request und reply in wireshark sauber abwechselnd:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_163_PingRequestReply.PNGBeim PING-Absender-Programm kommt trotz dieses Ablaufes dennoch nur noch "timeout" an.
-
Folgendes ist mir noch aufgefallen: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_163_PingRequestReply_badChecksum.PNG
Bad checksum im IP-header und im ICMP!
bitte damit vergleichen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-254893-and-postdays-is-0-and-postorder-is-asc-and-start-is-777.html
-
version 0.0.1.163 - Rev: 741
TCP header hinzugefügt tcp.c/h
icmpDebug, tcpDebug für eine besser veranschaulischung der jeweiligen Packete.
-
Version 0.0.1.165 – Revision 743
IP/ICMP-Checksumme
- Man sollte es mit dem Aufräumen nicht übertreiben (rev 740): das Checksummenfeld muss tatsächlich vor der Berechnung der Checksumme auf 0 gesetzt werden.
PS: Das hier ist wirklich die 0.0.1.165 und die Rev 743, ich hatte beim letzten Mal nur vergessen, die Version in ckernel.c zu aktualisieren, deshalb hat internet eigentlich die 0.0.1.164 bzw. 742 committet.