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,2572000/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    
void    tcprxmit(Conv*, int); 
2000/0102    
void    tcprxmit(Conv*); 
1997/0327    
 
void 
1998/0306    
tcpsetstate(Conv *s, uchar newstate) 
2000/0101/sys/src/9/ip/tcp.c:407,4202000/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,4522000/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    
	tcb->flags |= FORCE; 
	tcprcvwin(s); 
	tcpoutput(s); 
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,5882000/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,5982000/0102/sys/src/9/ip/tcp.c:607,612
1997/0327    
	qhangup(s->rq, reason); 
	qhangup(s->wq, reason); 
 
	tcb->reseq = nil; 
	tcpsetstate(s, Closed); 
} 
 
2000/0101/sys/src/9/ip/tcp.c:685,6952000/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,10712000/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); 
			tcprxmit(s, 0); 
2000/0102    
			tcprxmit(s); 
1999/0401    
		} else { 
			/* do reno tcp here. */ 
		} 
2000/0101/sys/src/9/ip/tcp.c:1301,13062000/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,13602000/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,13852000/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,15272000/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,15952000/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,18662000/0102/sys/src/9/ip/tcp.c:1881,1901
1998/1118    
 
1999/0320    
	s = v; 
1998/1118    
	tcb = (Tcpctl*)s->ptcl; 
	if(--(tcb->kacounter) <= 0) 
		localclose(s, Etimedout); 
	else { 
1999/0302    
		qlock(s); 
1998/1118    
		tcpsendka(s); 
2000/0102    
	if(waserror()){ 
1999/0302    
		qunlock(s); 
1998/1118    
		tcpgo(s->p->priv, &tcb->katimer); 
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,18982000/0102/sys/src/9/ip/tcp.c:1920,1931
1998/1118    
} 
 
void 
1999/0401    
tcprxmit(Conv *s, int dolock) 
2000/0102    
tcprxmit(Conv *s) 
1997/0327    
{ 
	Tcpctl *tcb; 
 
	tcb = (Tcpctl*)s->ptcl; 
 
1999/0401    
	if(dolock) 
		qlock(s); 
1997/0327    
	tcb->flags |= RETRAN|FORCE; 
	tcb->snd.ptr = tcb->snd.una; 
 
2000/0101/sys/src/9/ip/tcp.c:1912,19202000/0102/sys/src/9/ip/tcp.c:1945,1950
1999/0401    
	 */ 
1997/0327    
	tcb->cwind = tcb->mss; 
	tcpoutput(s); 
                 
1999/0401    
	if(dolock) 
		qunlock(s); 
1997/0327    
} 
 
void 
2000/0101/sys/src/9/ip/tcp.c:1929,19352000/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,19482000/0102/sys/src/9/ip/tcp.c:1976,1982
1997/0327    
			localclose(s, Etimedout); 
			break; 
		} 
1999/0401    
		tcprxmit(s, 1); 
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,19552000/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 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)