Sourcecode Fortschritt
-
version = "0.0.2.179 - Rev: 1021"
connection->tcb.SEG.SEQ = connection->tcb.SND.NXT;
ergänzt in tcp.c bei tcp_send(...) für ESTABLISHED
-
version = "0.0.2.179 - Rev: 1022"
irc.c weiter entwickelt, man kann texte bis max. 7 zeichen (gets oder event Problem?) eingeben. Diese werden in den channel #PrettyOS gesendet.
Problem:
<Pretty00001>1234567 sieben zeichen gehen
bei 12345678 (Eingabe) bleibt das User-Programm hängen.
-
version = "0.0.2.180 - Rev: 1023"
#define MAX_EVENTS 2000 <--- damit der IRC Client funktioniert (ist nun auf max. 667 Zeichen beschränkt, da drei Events pro Zeichen: EVENT_KEY_DOWN, EVENT_KEY_UP und EVENT_TEXT_ENTERED)
Nicht perfekt, aber eine Zwischenlösung.
-
version = "0.0.2.181 - Rev: 1024"
list und ring mit ASSERT gesichert (list.c), damit fehlerhafte Parameter sichtbar werden.
-
Version 0.0.2.182:
- PCI: pci_deviceSentInterrupt implementiert, PCI-Bars 2-6 nur ausgelesen, wenn headerType 0
- listHead_t in list_t umbenannt
- CRC nun im RTL8139-Treiber aus empfangenen Paketen entfernt.
- Dummy.c: Schon wieder reverted. Das ist keine Spielwiese! Zum testen einfach eine neue .c-Datei in other_userprogs anlegen. Das funktioniert viel besser, weil die dann automatisch übersetzt und auf die Floppy gepackt wird.
- fdir-Anzeige überarbeitet, Code verständlich gemacht
- Kleinigkeiten
-
version = "0.0.2.183 - Rev: 1026" (in ckernel.c: versehentlich 1025)
tcp: in/out Buffer angefangen
arp: nicht table, sondern cache (führt zu cache->table, besser als table->table)
user-prg:
irc.elf etwas weiter entwickelt.
-
version = "0.0.2.184 - Rev: 1027"
tcpIn_t, tcpOut_t, ... hinzu gefügt.
Problem: tcp.c, Zeile 432 ff.: Fill in-buffer list arbeitet zu langsam.
Aktiviert man memcpy(In->data, ...), dann bleibt der starwars-Empfang in Qemu hängen (Test auf einen hohen Dateninput). Kann man event.buffer und In->data (dauerhaft auf dem Heap) kombinieren und das doppelte memcpy sparen?Vielleicht benötigen wir auch ein schnelleres memcpy in Assembler.
beep weg (sehr lästig beim Testen)
Code läst sich bis -O2 compilieren, dann gehen auch beide memcpy, allerdings nicht mit -O3, dort kommt ein Fehler bei der checksum-Routine.
-
Lösungsvorschlag:
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, IP_t srcIP, IP_t destIP, uint16_t protocol) { updtcpPseudoHeader_t pseudo = { srcIP, destIP, 0, protocol, htons(length) }; uint32_t pseudoHeaderChecksum = 0; for(uint32_t i = 0; i < sizeof(updtcpPseudoHeader_t); i+=2) { pseudoHeaderChecksum += htons(((uint16_t*)&pseudo)[i]); } return internetChecksum(p, length, pseudoHeaderChecksum); }
-
Den O3-Fehler kenne ich. Ist afaik ein Bug in GCC 4.4.0, der in gcc 4.4.4? gefixt wurde. Da es aber keinen Grund gibt, mit -O3 zu kompilieren, denke ich, dass ein Workaround nicht nötig ist.
-
Version 0.0.2.185:
- IRC-Programm verbessert: Joinen mit Strg+J, Senden an #PrettyOS mit Strg+P
- Padding wird nun in ipv4.c entfernt und nicht mehr (fehlerhaft) in tcp.c.
- Paket- und Headerlängen in tcp.c und ipv4.c korrekt verwendet.
-
version = "0.0.2.186 - Rev: 1029"
@MrX: hab deinen Vorschlag umgesetzt, aber es besteht ein Zugriffsproblem von user nach kernel heap.
Experimenteller Zwischenstatus: Übergabe eines Events in tcp.c mit buffer als Zeiger. Ist Array notwendig? Wenn ja, welche Größe?
Problem: Daten stecken im Kernel Heap. Wie greift man darauf von user-land aus zu? (Erfolgloser Versuch in browser.c, irc und starwars noch unverändert, wieso gibt das keinen #PF?)MrX: Idee, wie man das auflösen kann?
memcpy durch etwas schnellere Assembler-Version ersetzt.
-
Anmerkung aus #lost: wir sollten mehr Unterordner einziehen unter \kernel.
-
version = "0.0.2.187 - Rev: 1030"
- TCP-Datentransfer nun korrekt von kernel nach user
- TCP-Datentransfer beschleunigt
-
version = "0.0.2.188 - Rev: 1031"
- kleine Änderungen in tcp.c und types.h (connectionID)
- bei receive FIN,ACK (geht bei browser.c) werden testweise die Pakete in der IN-Queue angezeigt: Seq, len, data (funktioniert!)
-
version = "0.0.2.188 - Rev: 1032"
- irc angepasst, damit ein zufälliger Name (Pretty+Zufallszahl) gebildet wird.
- Pretty14309 joined
<Pretty14309>hi
<ehenkes>test
- Pretty14309 quit (Client exited)- Pretty17705 joined
<Pretty17705>schon wieder da ^^
- Pretty17705 quit (Connection reset by peer)- Pretty19370 joined
...
- Pretty19370 quit (Connection reset by peer)
-
version = "0.0.2.188 - Rev: 1033"
Hinweis von Kollegen aus #lost auf die Pflicht, sich mit QUIT zu entfernen.
“A client session is ended with a quit message.”Dem kommen wir gerne nach. Kostet aber schon wieder zwei Zeilen.;)
case KEY_ESC: { char* msgQuit = "QUIT\r\n"; tcp_send(connection, msgQuit, strlen(msgQuit)); tcp_close(connection); return(0); }
- Pretty31812 joined
<Pretty31812>test auf quit
- Pretty31812 quit (Life is too short...)- Pretty28547 joined
<Pretty28547>nochmal jetzt mit ESC weg
- Pretty28547 quit (Life is too short...)
-
version = "0.0.2.189 - Rev: 1034"
- memcpy, memset nun schneller (MrX)
- irc.c (Nummernausgabe weg)
-
Version 0.0.2.190:
- console.c: Bugfix: console_clear ändert Textfarbe nicht mehr.
- memshow: Bugfix bei count%16!=0: Darstellung korrigiert.
- memsetl durch memset ersetzt (Performance-Hack nicht mehr nötig)
- optimiertes memset/memcpy auch im Userspace, memsetw ebenfalls optimiert
- Shell:
-- Bugfix: Eingabezeile nun korrekt gelöscht.
-- Bugfix: Cursorposition wird zurückgesetzt, wenn Eintrag mit Pfeiltaste nach unten gelöscht wird.
- Kleinigkeiten
-
version = "0.0.2.191 - Rev: 1036"
Steuerungsmechanismus window mittels Feedback aus event_issue testweise installiert, um Erfahrung zu bekommen.
-
version = "0.0.2.192 - Rev: 1037"
Gesamtgröße der TCP-Daten in der Event-Queue bestimmt