Sourcecode Fortschritt


  • Mod

    version = "0.0.2.221 - Rev: 1068"

    Weitere Korrekturen in tcp.c (ports nun zufällig zwischen 49152 und 65535)


  • Mod

    version = "0.0.2.222 - Rev: 1069"

    - Im Heap gespeicherte tcp In/Out-Pakete werden beim Schließen gelöscht (Test: Browser klappt)
    - Anmerkung: ge-ackte Pakete in der out-Liste werden nun sofort vollständig gelöscht (nicht erst beim Schließen). In den vorhergehenden Versionen wurde nur das Listenelement gelöscht, ohne die Struct und die Daten zu löschen (üble Fehlerquelle).


  • Mod

    version = "0.0.2.223 - Rev: 1070"

    tcp.h/c: msl (maximum segment lifetime) eingebaut in connection->tcb und auf 10 sec gesetzt in createConnection(...)



  • Version 0.0.2.224:

    - memcpyr geschaffen (optimiert mit rep movsl), genutzt durch memmove. -> memmove optimiert.
    - kheap nutzt nun memmove statt for-Schleife
    - CPU-Cache in kernel.asm aktiviert (Bits 30 und 29 in CR0 gelöscht)
    - todolist enthält nun timer-ähnliche Funktion


  • Mod

    version = "0.0.2.225 - Rev: 1072"

    Neue timer-Funktion verwendet im tcp-Prozess. Allerdings sind da noch Fehler im Ablauf im ACTIVE CLOSE Ablauf (qemu, irc). In FIN_WAIT_2 kommt ein ACK PSH und nicht das erwartete FIN. TODO: analysieren.


  • Mod

    version = "0.0.2.226 - Rev: 1073"

    Duplicate ACK Empfang / Senden in tcp.c versuchsweise ergänzt


  • Mod

    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.


  • Mod

    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.


  • Mod

    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?)


  • Mod

    version = "0.0.2.230 - Rev: 1077"

    Ausgabefehler im serial_log korrigiert.


  • Mod

    version = "0.0.2.231 - Rev: 1078"

    tcp.c:
    Statische Funktion tcp_timeoutDeleteConnection(tcpConnection_t* connection, uint32_t timeMilliseconds) zur Vereinfachung/Kapselung geschaffen.


  • Mod

    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);
    

  • Mod

    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;
    

  • Mod

    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;
    }
    

  • Mod

    version = "0.0.2.235 - Rev: 1082"

    tcp.h/c:
    - Funktionen umgestellt auf tcp_...
    - Ausgaben der In- und OutofOrderIn Buffers nach COM1

    output to COM1:
    http://codepad.org/yiSnoKjD (starwars.elf)
    http://codepad.org/n98wEcDi (irc.elf)
    http://codepad.org/QF4hpgkJ (browser.elf)


  • Mod

    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 / correction

    TODO: 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)


  • Mod

    version = "0.0.2.238 - Rev: 1085"

    Da irc.elf nicht funktionierte, habe ich die Retransmission aufgrund fehlenden ACKs (rto-Vergleich) deaktiviert.


  • Mod

    version = "0.0.2.239 - Rev: 1086"

    Zeitausgaben (Laufzeit) inkludiert in output nach COM1


  • Mod

    version = "0.0.2.240 - Rev: 1087"

    tcp.c: in tcp_receive korrigiert


Anmelden zum Antworten