]> git.meshlink.io Git - utcp/commitdiff
Always announce the receive window size as the size of the receive buffer.
authorGuus Sliepen <guus@sliepen.org>
Sun, 8 Mar 2020 20:52:23 +0000 (21:52 +0100)
committerGuus Sliepen <guus@sliepen.org>
Sun, 8 Mar 2020 22:49:22 +0000 (23:49 +0100)
Since UTCP requires the application to handle incoming in-sequence data
immediately, the start of the receive buffer is always right after the
last ACKed byte, so we can always announce the size of the receive buffer
as the maximum receive window size.

utcp.c
utcp_priv.h

diff --git a/utcp.c b/utcp.c
index 5d630694df96100f57e780f855a32cc63f7674bc..d2a777ce00ed9b1d9ea18a622f1ab1523dcc74b5 100644 (file)
--- a/utcp.c
+++ b/utcp.c
@@ -382,7 +382,6 @@ static struct utcp_connection *allocate_connection(struct utcp *utcp, uint16_t s
 #endif
        c->snd.una = c->snd.iss;
        c->snd.nxt = c->snd.iss + 1;
-       c->rcv.wnd = utcp->mtu;
        c->snd.last = c->snd.nxt;
        c->snd.cwnd = utcp->mtu;
        c->utcp = utcp;
@@ -468,7 +467,7 @@ struct utcp_connection *utcp_connect_ex(struct utcp *utcp, uint16_t dst, utcp_re
        pkt.hdr.dst = c->dst;
        pkt.hdr.seq = c->snd.iss;
        pkt.hdr.ack = 0;
-       pkt.hdr.wnd = c->rcv.wnd;
+       pkt.hdr.wnd = c->rcvbuf.maxsize;
        pkt.hdr.ctl = SYN;
        pkt.hdr.aux = 0x0101;
        pkt.init[0] = 1;
@@ -538,7 +537,7 @@ static void ack(struct utcp_connection *c, bool sendatleastone) {
        pkt->hdr.src = c->src;
        pkt->hdr.dst = c->dst;
        pkt->hdr.ack = c->rcv.nxt;
-       pkt->hdr.wnd = c->snd.wnd;
+       pkt->hdr.wnd = c->rcvbuf.maxsize;
        pkt->hdr.ctl = ACK;
        pkt->hdr.aux = 0;
 
@@ -697,7 +696,7 @@ static void retransmit(struct utcp_connection *c) {
 
        pkt->hdr.src = c->src;
        pkt->hdr.dst = c->dst;
-       pkt->hdr.wnd = c->rcv.wnd;
+       pkt->hdr.wnd = c->rcvbuf.maxsize;
        pkt->hdr.aux = 0;
 
        switch(c->state) {
@@ -1073,7 +1072,7 @@ synack:
                        pkt.hdr.dst = c->dst;
                        pkt.hdr.ack = c->rcv.irs + 1;
                        pkt.hdr.seq = c->snd.iss;
-                       pkt.hdr.wnd = c->rcv.wnd;
+                       pkt.hdr.wnd = c->rcvbuf.maxsize;
                        pkt.hdr.ctl = SYN | ACK;
 
                        if(init) {
index 6c5c1f85f052016999b800534e398a21884eec17..c23279d82c4c4369a0de076a65c9d86d408e4687 100644 (file)
@@ -129,7 +129,6 @@ struct utcp_connection {
 
        struct {
                uint32_t nxt;
-               uint32_t wnd;
                uint32_t irs;
        } rcv;