Sourcecode Fortschritt
-
version = "0.0.2.227 - Rev: 1074"
list_insert(list_t* list, element_t* next, void* data) hinzugefügt
Vorbereitung für den Übertrag vom noch zu schaffenden Out-of-Order Receive In-Buffer zum regulären In-Buffer.
-
version = "0.0.2.228 - Rev: 1075"
tcpRCV_t ergänzt um: uint32_t ACKforDupACK // Speicher für letztes in Serie eingegangenes Paket, wird bei Lücke verwendet. Damit wurde das Dup-ACK Procedere korrigiert, sodass nun das korrekte ACK wiederholt wird. Die Sendung wird aber vom Sender nicht immer zeitnah (oder garnicht?) beachtet.
Gutes Testmodell: starwars.elf, weil von dort massenweise Pakete in korrekter Serie erscheinen sollen, der ideale Testserver für Dup-ACK.
TODO: Sortiervorgang aufbauen bei falscher Eingangsreihenfolge, wenn das, mittels Duplicate ACK angeforderte, fehlende frühere Paket in tcp_receive(...) erscheint oder bei Paketversetzungen durch Überholvorgänge über verschiedene Routen durchs Internet. Liste für Out-of-Order RCV Buffer schaffen.
-
version = "0.0.2.229 - Rev: 1076"
tcp modul weiter entwickelt: Out-of-Order-Buffer List geschaffen
(Zahlen im serial_log bei ACK auf SYN ACK sind falsch, in wireshark aber ok. Ursache?)
-
version = "0.0.2.230 - Rev: 1077"
Ausgabefehler im serial_log korrigiert.
-
version = "0.0.2.231 - Rev: 1078"
tcp.c:
Statische Funktion tcp_timeoutDeleteConnection(tcpConnection_t* connection, uint32_t timeMilliseconds) zur Vereinfachung/Kapselung geschaffen.
-
version = "0.0.2.232 - Rev: 1079"
Fehler in tcp.c behoben. timeouts korrigiert. tcp_prepare_send_FIN gelöscht.
Anzeige:printf("\nconnection ID %u will be deletetd at %u sec runtime.", connection->ID, (timeMilliseconds + timer_getMilliseconds()) / 1000);
-
version = "0.0.2.233 - Rev: 1080"
tcp.c: tcp_sendFin(tcpConnection_t* connection)
Bsp.:
case CLOSE_WAIT: tcp_sendFin(connection); connection->TCP_CurrState = LAST_ACK; tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); break;
-
version = "0.0.2.234 - Rev: 1081"
Finishing process improved:
case FIN_WAIT_1: { if (tcp->FIN && !tcp->ACK) // FIN { tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true); connection->TCP_CurrState = CLOSING; } else if (tcp->FIN && tcp->ACK) // FIN ACK { tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true); tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); connection->TCP_CurrState = TIME_WAIT; } else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset == 0)) // ACK { connection->TCP_CurrState = FIN_WAIT_2; } else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset > 0)) // ACK with data { tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); // if there will not come a FIN at FIN_WAIT_2 connection->TCP_CurrState = FIN_WAIT_2; } break; } case FIN_WAIT_2: { if (tcp->FIN) // FIN { tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true); tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); connection->TCP_CurrState = TIME_WAIT; } break; }
-
version = "0.0.2.235 - Rev: 1082"
tcp.h/c:
- Funktionen umgestellt auf tcp_...
- Ausgaben der In- und OutofOrderIn Buffers nach COM1output to COM1:
http://codepad.org/yiSnoKjD (starwars.elf)
http://codepad.org/n98wEcDi (irc.elf)
http://codepad.org/QF4hpgkJ (browser.elf)
-
version = "0.0.2.236 - Rev: 1083"
tcp.c:
- retransmission due to received duplicate acks
- return values of usend and uclose changed to bool
- code optimization / correctionTODO: http://de.wikipedia.org/wiki/Transmission_Control_Protocol#Fast-Retransmit_und_Fast-Recovery
-
Version 0.0.2.237:
- Grafikschnittstelle implementiert, VBE-Treiber entsprechend angepasst
- VBEShell auf aktuellste Text-Shell-Version aktualisiert (Event-Handling u.a.)
- Events optimiert: Daten, die in 4 Bytes passen, werden im data-Pointer selbst gespeichert (spart Speicherallokationen)
- Heap: Schutz gegen überlauf der placement-Area
- Netzwerkcode (ipv4 und arp) vereinfacht und optimiert (Pufferung eingehender Pakete läuft nun über die todolist)
-
version = "0.0.2.238 - Rev: 1085"
Da irc.elf nicht funktionierte, habe ich die Retransmission aufgrund fehlenden ACKs (rto-Vergleich) deaktiviert.
-
version = "0.0.2.239 - Rev: 1086"
Zeitausgaben (Laufzeit) inkludiert in output nach COM1
-
version = "0.0.2.240 - Rev: 1087"
tcp.c: in tcp_receive korrigiert
-
Version 0.0.2.241:
- TCP überarbeitet, Code vereinfacht
- Makefile wird nun mit --jobs ausgeführt (Multithreading)
-
version = "0.0.2.242 - Rev: 1089"
tcp.c: retransmission due to wrong dup-acks corrected
-
version = "0.0.2.243 - Rev: 1090"
tcp.c: tcp_sendReset(tcpConnection_t* connection, tcpPacket_t* tcp, bool ack, uint32_t length)
-
Version 0.0.2.244:
- Ramdisk nicht mehr an 4 KiB-Grenzen ausgerichtet
- Erstellen und Starten von Tasks getrennt:
-> Race-Condition beim Warten auf VM86-Tasks behoben: Probleme auf bestimmten Systemen mit VBE sollten damit behoben sein
-> Race-Condition beim Erstellen von Tasks mit eigener Konsole behoben: Selten auftretenes Erscheinen von Text in der falschen Konsole sollte damit behoben sein.
- VM86-Monitor überarbeitet
- APM-Code überarbeitet: Läuft nun unter Qemu, Bochs und VBox, nicht aber auf VPC und echter Hardware. Zum Testen Zeile 131 in power_management.c ändern
-
Version 0.0.2.245:
- Bessere logische Trennung zwischen Tasks, Prozessen und Threads (Vorschlag von kosmick):
-> Task: Allgemeine Containerstruktur für Prozesse und Threads
-> Prozess: Task in eigenen Paging-Context
-> Thread: Task im Context des Erstellers, Abhängig vom Ersteller
- Memory-Übersicht erweitert
- Bugfix: Shell-Prozess wird nicht mehr gestartet, wenn Shell.elf nicht gefunden werden konnte
-
version = "0.0.2.246 - Rev: 1093"
DHCP gelingt nun auch unter Emulation mit Qemu.
Foto: http://www.henkessoft.de/OS_Dev/Bilder/DHCP_on_Qemu.PNG
qemu-batch:
del serielleSchnittstelle1.txt qemu.exe -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt