| plan 9 kernel history: overview | file list | diff list |
2000/0102/ip/tcp.c (diff list | history)
| 2000/0101/sys/src/9/ip/tcp.c:251,257 – 2000/0102/sys/src/9/ip/tcp.c:251,257 (short | long | prev | next) | ||
| 1999/0320 | void tcpacktimer(void*); void tcpkeepalive(void*); | |
| 1999/0529 | void tcpsetkacounter(Tcpctl*); | |
| 1999/0401 |
| |
| 2000/0102 | void tcprxmit(Conv*); | |
| 1997/0327 | void | |
| 1998/0306 | tcpsetstate(Conv *s, uchar newstate) | |
| 2000/0101/sys/src/9/ip/tcp.c:407,420 – 2000/0102/sys/src/9/ip/tcp.c:407,427 | ||
| 1997/0327 | /* * Push data */ | |
| 2000/0102 | if(waserror()){ qunlock(s); nexterror(); } | |
| 1999/0302 | qlock(s); | |
| 1997/0327 | tcb->sndcnt += len; tcprcvwin(s); tcpoutput(s); | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | break; default: | |
| 2000/0102 | qlock(s); | |
| 1997/0327 | localclose(s, "Hangup"); | |
| 2000/0102 | qunlock(s); | |
| 1997/0327 | } } | |
| 2000/0101/sys/src/9/ip/tcp.c:442,452 – 2000/0102/sys/src/9/ip/tcp.c:449,466 | ||
| 1999/0320 | s = v; | |
| 1997/0327 | tcb = (Tcpctl*)s->ptcl; | |
| 2000/0102 | if(waserror()){ qunlock(s); nexterror(); } | |
| 1999/0302 | qlock(s); | |
| 1997/0327 |
| |
| 2000/0102 | if(tcb->state != Closed){ tcb->flags |= FORCE; tcprcvwin(s); tcpoutput(s); } | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | } static void | |
| 2000/0101/sys/src/9/ip/tcp.c:583,588 – 2000/0102/sys/src/9/ip/tcp.c:597,603 | ||
| 1997/0327 | freeblist(rp->bp); free(rp); } | |
| 2000/0102 | tcb->reseq = nil; | |
| 1997/0327 | if(tcb->state == Syn_sent) | |
| 1998/0313 | Fsconnected(s, reason); | |
| 2000/0101/sys/src/9/ip/tcp.c:592,598 – 2000/0102/sys/src/9/ip/tcp.c:607,612 | ||
| 1997/0327 | qhangup(s->rq, reason); qhangup(s->wq, reason); | |
| 2000/0101/sys/src/9/ip/tcp.c:685,695 – 2000/0102/sys/src/9/ip/tcp.c:699,714 | ||
| 1998/0313 | tpriv->tstats.tcpActiveOpens++; | |
| 1997/0327 | /* Send SYN, go into SYN_SENT state */ | |
| 1999/0302 | qlock(s); | |
| 2000/0102 | if(waserror()){ qunlock(s); nexterror(); } | |
| 1997/0327 | tcb->flags |= ACTIVE; tcpsndsyn(tcb); tcpsetstate(s, Syn_sent); tcpoutput(s); | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | break; } } | |
| 2000/0101/sys/src/9/ip/tcp.c:1065,1071 – 2000/0102/sys/src/9/ip/tcp.c:1084,1090 | ||
| 1999/0401 | tcb->snd.recovery = 1; tcb->snd.rxt = tcb->snd.nxt; // print("fast rxt %lud, nxt %lud\n", tcb->snd.una, tcb->snd.nxt); | |
| 2000/0102 | tcprxmit(s); | |
| 1999/0401 | } else { /* do reno tcp here. */ } | |
| 2000/0101/sys/src/9/ip/tcp.c:1301,1306 – 2000/0102/sys/src/9/ip/tcp.c:1320,1329 | ||
| 1997/0327 | * Out-of-band data is ignored - it was always a bad idea. */ tcb = (Tcpctl*)s->ptcl; | |
| 2000/0102 | if(waserror()){ qunlock(s); nexterror(); } | |
| 1999/0302 | qlock(s); qunlock(tcp); | |
| 1997/0327 | ||
| 2000/0101/sys/src/9/ip/tcp.c:1355,1360 – 2000/0102/sys/src/9/ip/tcp.c:1378,1384 | ||
| 1997/0327 | freeblist(bp); | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | return; case Syn_received: /* doesn't matter if it's the correct ack, we're just trying to set timing */ | |
| 2000/0101/sys/src/9/ip/tcp.c:1380,1385 – 2000/0102/sys/src/9/ip/tcp.c:1404,1410 | ||
| 1997/0327 | goto output; } | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | return; } | |
| 2000/0101/sys/src/9/ip/tcp.c:1522,1527 – 2000/0102/sys/src/9/ip/tcp.c:1547,1553 | ||
| 1997/0327 | freeblist(bp); | |
| 1998/0313 | sndrst(tcp, source, dest, length, &seg); | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | return; } } | |
| 2000/0101/sys/src/9/ip/tcp.c:1587,1595 – 2000/0102/sys/src/9/ip/tcp.c:1613,1623 | ||
| 1997/0327 | output: tcpoutput(s); | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | return; raise: | |
| 1999/0302 | qunlock(s); | |
| 2000/0102 | poperror(); | |
| 1997/0327 | freeblist(bp); tcpkick(s, 0); } | |
| 2000/0101/sys/src/9/ip/tcp.c:1853,1866 – 2000/0102/sys/src/9/ip/tcp.c:1881,1901 | ||
| 1998/1118 | ||
| 1999/0320 | s = v; | |
| 1998/1118 | tcb = (Tcpctl*)s->ptcl; | |
| 1999/0302 |
| |
| 1998/1118 |
| |
| 2000/0102 | if(waserror()){ | |
| 1999/0302 | qunlock(s); | |
| 1998/1118 |
| |
| 2000/0102 | nexterror(); | |
| 1998/1118 | } | |
| 2000/0102 | qlock(s); if(tcb->state != Closed){ if(--(tcb->kacounter) <= 0) { localclose(s, Etimedout); } else { tcpsendka(s); tcpgo(s->p->priv, &tcb->katimer); } } qunlock(s); poperror(); | |
| 1998/1118 | } /* | |
| 2000/0101/sys/src/9/ip/tcp.c:1885,1898 – 2000/0102/sys/src/9/ip/tcp.c:1920,1931 | ||
| 1998/1118 | } void | |
| 1999/0401 |
| |
| 2000/0102 | tcprxmit(Conv *s) | |
| 1997/0327 | { Tcpctl *tcb; tcb = (Tcpctl*)s->ptcl; | |
| 1999/0401 |
| |
| 1997/0327 | tcb->flags |= RETRAN|FORCE; tcb->snd.ptr = tcb->snd.una; | |
| 2000/0101/sys/src/9/ip/tcp.c:1912,1920 – 2000/0102/sys/src/9/ip/tcp.c:1945,1950 | ||
| 1999/0401 | */ | |
| 1997/0327 | tcb->cwind = tcb->mss; tcpoutput(s); | |
| 1999/0401 |
| |
| 1997/0327 | } void | |
| 2000/0101/sys/src/9/ip/tcp.c:1929,1935 – 2000/0102/sys/src/9/ip/tcp.c:1959,1969 | ||
| 1999/0401 | tpriv = s->p->priv; | |
| 1997/0327 | tcb = (Tcpctl*)s->ptcl; | |
| 2000/0102 | if(waserror()){ qunlock(s); nexterror(); } qlock(s); | |
| 1997/0327 | switch(tcb->state){ default: tcb->backoff++; | |
| 2000/0101/sys/src/9/ip/tcp.c:1942,1948 – 2000/0102/sys/src/9/ip/tcp.c:1976,1982 | ||
| 1997/0327 | localclose(s, Etimedout); break; } | |
| 1999/0401 |
| |
| 2000/0102 | tcprxmit(s); | |
| 1999/0401 | tpriv->tstats.tcpRetransTimeouts++; tcb->snd.dupacks = 0; | |
| 1997/0327 | break; | |
| 2000/0101/sys/src/9/ip/tcp.c:1949,1955 – 2000/0102/sys/src/9/ip/tcp.c:1983,1993 | ||
| 1997/0327 | case Time_wait: localclose(s, nil); break; | |
| 2000/0102 | case Closed: break; | |
| 1997/0327 | } | |
| 2000/0102 | qunlock(s); poperror(); | |
| 1997/0327 | } int | |