| plan 9 kernel history: overview | file list | diff list |
2001/0118/ip/tcp.c (diff list | history)
| 2001/0117/sys/src/9/ip/tcp.c:333,341 – 2001/0118/sys/src/9/ip/tcp.c:333,341 (short | long | prev | next) | ||
| 1997/0327 | s = (Tcpctl*)(c->ptcl); | |
| 1998/0306 | return snprint(state, n, | |
| 2001/0117 |
| |
| 2001/0118 | "%s srtt %d mdev %d cwin %d swin %d rwin %d timer.start %d timer.count %d\n", | |
| 1997/0327 | tcpstates[s->state], s->srtt, s->mdev, | |
| 2001/0117 |
| |
| 2001/0118 | s->cwind, s->snd.wnd, s->rcv.wnd, | |
| 1997/0327 | s->timer.start, s->timer.count); | |
| 1998/0306 | } | |
| 1997/0327 | ||
| 2001/0117/sys/src/9/ip/tcp.c:1082,1087 – 2001/0118/sys/src/9/ip/tcp.c:1082,1088 | ||
| 1998/0313 | tpriv = s->p->priv; | |
| 1997/0327 | tcb = (Tcpctl*)s->ptcl; | |
| 2001/0118 | /* if everything has been acked, force output(?) */ | |
| 1997/0327 | if(seq_gt(seg->ack, tcb->snd.nxt)) { tcb->flags |= FORCE; return; | |
| 2001/0117/sys/src/9/ip/tcp.c:1092,1099 – 2001/0118/sys/src/9/ip/tcp.c:1093,1100 | ||
| 1999/0401 | seg->len == 0 && seg->wnd == tcb->snd.wnd ) { /* this is a pure ack w/o window update */ | |
| 2001/0118 | netlog(s->p->f, Logtcpmsg, "dupack %lud ack %lud sndwnd %d advwin %d\n", tcb->snd.dupacks, seg->ack, tcb->snd.wnd, seg->wnd); | |
| 1999/0401 | if(++tcb->snd.dupacks == TCPREXMTTHRESH) { /* | |
| 2001/0117/sys/src/9/ip/tcp.c:1102,1108 – 2001/0118/sys/src/9/ip/tcp.c:1103,1109 | ||
| 1999/0401 | */ tcb->snd.recovery = 1; tcb->snd.rxt = tcb->snd.nxt; | |
| 2001/0118 | netlog(s->p->f, Logtcpmsg, "fast rxt %lud, nxt %lud\n", tcb->snd.una, tcb->snd.nxt); | |
| 2000/0102 | tcprxmit(s); | |
| 1999/0401 | } else { /* do reno tcp here. */ | |
| 2001/0117/sys/src/9/ip/tcp.c:1109,1116 – 2001/0118/sys/src/9/ip/tcp.c:1110,1123 | ||
| 1999/0401 | } } | |
| 2001/0118 | /* * update our send window if this is a new ack (ignore old packets * even if the ack is new) */ | |
| 1997/0327 | if(seq_ge(seg->ack,tcb->snd.wl2)) | |
| 2001/0118 | if(seq_ge(seg->seq,tcb->snd.wl1)) { /* a closed window opened, start retransmitting. why? - presotto */ | |
| 1997/0327 | if(seg->wnd != 0 && tcb->snd.wnd == 0) tcb->snd.ptr = tcb->snd.una; | |
| 2001/0117/sys/src/9/ip/tcp.c:1129,1137 – 2001/0118/sys/src/9/ip/tcp.c:1136,1143 | ||
| 1999/0401 | if(!tcb->snd.recovery || seq_ge(seg->ack, tcb->snd.rxt)) { tcb->snd.dupacks = 0; tcb->snd.recovery = 0; | |
| 2001/0118 | } else netlog(s->p->f, Logtcp, "rxt next %lud, cwin %ud\n", seg->ack, tcb->cwind); | |
| 1997/0327 | /* Compute the new send window size */ acked = seg->ack - tcb->snd.una; | |
| 2001/0117/sys/src/9/ip/tcp.c:1554,1569 – 2001/0118/sys/src/9/ip/tcp.c:1560,1582 | ||
| 1997/0327 | bp = nil; } tcb->rcv.nxt += length; | |
| 2001/0118 | /* * update our rcv window */ | |
| 1997/0327 | tcprcvwin(s); | |
| 1998/0918 | /* | |
| 2001/0118 | * force an ack if we've got 2 segs since we * last acked. | |
| 1998/0918 | */ | |
| 1998/0925 |
| |
| 2001/0118 | if(tcb->rcv.nxt - tcb->last_ack >= 2*tcb->mss) | |
| 1997/0327 | tcb->flags |= FORCE; | |
| 1998/0925 |
| |
| 2001/0118 | /* * turn on the acktimer if there's something * to ack */ | |
| 1998/1008 | if(tcb->acktimer.state != TimerON) tcpgo(tpriv, &tcb->acktimer); | |
| 1997/0327 | ||
| 2001/0117/sys/src/9/ip/tcp.c:1711,1716 – 2001/0118/sys/src/9/ip/tcp.c:1724,1732 | ||
| 1997/0327 | usable -= sent; } ssize = sndcnt-sent; | |
| 2001/0118 | if(ssize && usable < 2) netlog(s->p->f, Logtcp, "throttled snd.wnd 0x%ux cwind 0x%ux\n", tcb->snd.wnd, tcb->cwind); | |
| 1997/0327 | if(usable < ssize) ssize = usable; if(tcb->mss < ssize) | |
| 2001/0117/sys/src/9/ip/tcp.c:1782,1789 – 2001/0118/sys/src/9/ip/tcp.c:1798,1805 | ||
| 1997/0327 | seg.flags |= FIN; dsize--; } | |
| 1998/0313 |
| |
| 1997/0327 |
| |
| 2001/0118 | /* netlog(f, Logtcp, "qcopy: dlen %d blen %d sndcnt %d qlen %d sent %d rp[0] %d\n", dsize, BLEN(bp), sndcnt, qlen(s->wq), sent, bp->rp[0]); */ | |
| 1997/0327 | } if(sent+dsize == sndcnt) | |
| 2001/0117/sys/src/9/ip/tcp.c:1989,1999 – 2001/0118/sys/src/9/ip/tcp.c:2005,2010 | ||
| 1999/0401 | * We should be halving the slow start thershhold (down to one * mss) but leaving it at mss seems to work well enough | |
| 1997/0327 | */ | |
| 1999/0401 |
| |
| 1997/0327 | ||
| 1999/0401 | /* | |
| 2001/0117/sys/src/9/ip/tcp.c:2032,2037 – 2001/0118/sys/src/9/ip/tcp.c:2043,2049 | ||
| 1997/0327 | localclose(s, Etimedout); break; } | |
| 2001/0118 | netlog(s->p->f, Logtcp, "timeout rexmit 0x%lux\n", tcb->snd.una); | |
| 2000/0102 | tcprxmit(s); | |
| 2000/0706 | tpriv->stats[RetransTimeouts]++; | |
| 1999/0401 | tcb->snd.dupacks = 0; | |