plan 9 kernel history: overview | file list | diff list

1992/0416/port/devip.c (diff list | history)

1992/0414/sys/src/9/port/devip.c:21,261992/0416/sys/src/9/port/devip.c:21,27 (short | long | prev | next)
1991/12171    
Ipconv	*ipconv[Nrprotocol];		/* Connections for each protocol */ 
Network	*ipnet[Nrprotocol];		/* User level interface for protocol */ 
QLock	ipalloc;			/* Protocol port allocation lock */ 
1992/0416    
Ipconv	*tcpbase;			/* Base tcp connection */ 
1991/0424    
 
/* ARPA User Datagram Protocol */ 
void	udpstiput(Queue *, Block *); 
1992/0414/sys/src/9/port/devip.c:171,1771992/0416/sys/src/9/port/devip.c:172,177
1991/1126    
				netown(new->net, new->index, u->p->user, 0); 
1992/0313    
 
1991/1114    
			new->ref = 1; 
1992/0306    
			new->newcon = 0; 
1991/0424    
			qunlock(new); 
			return new; 
		}	 
1992/0414/sys/src/9/port/devip.c:262,2711992/0416/sys/src/9/port/devip.c:262,272
1991/1024    
		cp->pdst = atoi(ctlarg[1]); 
1991/0516    
 
1991/1024    
		/* If we have no local port assign one */ 
		qlock(&ipalloc); 
		if(cp->psrc == 0) 
1992/0416    
		if(cp->psrc == 0){ 
			qlock(&ipalloc); 
1992/0128    
			cp->psrc = nextport(ipconv[c->dev], priv); 
1991/1024    
		qunlock(&ipalloc); 
1992/0416    
			qunlock(&ipalloc); 
		} 
1991/0424    
 
1991/1114    
		if(cp->stproto == &tcpinfo) 
			tcpstart(cp, TCP_ACTIVE, Streamhi, 0); 
1992/0414/sys/src/9/port/devip.c:289,3011992/0416/sys/src/9/port/devip.c:290,309
1991/1024    
 
		port = atoi(field[1]); 
 
		qlock(&ipalloc); 
		if(portused(ipconv[c->dev], port)) { 
			qunlock(&ipalloc);	 
			error(Einuse); 
		} 
		cp->psrc = port; 
		qunlock(&ipalloc); 
1992/0416    
		if(port){ 
			qlock(&ipalloc); 
			if(portused(ipconv[c->dev], port)) { 
				qunlock(&ipalloc);	 
				error(Einuse); 
			} 
			cp->psrc = port; 
			qunlock(&ipalloc); 
		} else if(*field[1] != '*'){ 
			qlock(&ipalloc); 
			cp->psrc = nextport(ipconv[c->dev], 0); 
			qunlock(&ipalloc); 
		} else 
			cp->psrc = 0; 
1991/1114    
 
		if(cp->stproto == &tcpinfo) 
			tcpstart(cp, TCP_PASSIVE, Streamhi, 0); 
1992/0414/sys/src/9/port/devip.c:557,5621992/0416/sys/src/9/port/devip.c:565,572
1991/0424    
tcpstopen(Queue *q, Stream *s) 
{ 
	Ipconv *ipc; 
1992/0416    
	Tcpctl *tcb; 
	Block *bp;	 
1991/1019    
	static int tcpkprocs; 
1991/0424    
 
1991/1019    
	if(!Ipoutput) { 
1992/0414/sys/src/9/port/devip.c:573,5781992/0416/sys/src/9/port/devip.c:583,590
1991/0430    
 
1991/0424    
	} 
 
1992/0416    
	if(tcpbase == 0) 
		tcpbase = ipconv[s->dev]; 
1991/0424    
	ipc = &ipconv[s->dev][s->id]; 
	ipc->ipinterface = newipifc(IP_TCPPROTO, tcp_input, ipconv[s->dev],  
			            1500, 512, ETHER_HDR, "TCP"); 
1992/0414/sys/src/9/port/devip.c:584,5891992/0416/sys/src/9/port/devip.c:596,608
1991/0424    
	RD(q)->ptr = (void *)ipc; 
	WR(q)->next->ptr = (void *)ipc->ipinterface; 
	WR(q)->ptr = (void *)ipc; 
1992/0416    
 
	/* pass any waiting data upstream */ 
	tcb = &ipc->tcpctl; 
	qlock(tcb); 
	while(bp = getb(&tcb->rcvq)) 
		PUTNEXT(ipc->readq, bp); 
	qunlock(tcb); 
1991/0424    
} 
 
1991/1114    
void 
1992/0414/sys/src/9/port/devip.c:682,6871992/0416/sys/src/9/port/devip.c:701,707
1991/0424    
tcpstclose(Queue *q) 
{ 
	Ipconv *s; 
1992/0416    
	Ipconv *etab, *ifc; 
1991/0424    
	Tcpctl *tcb; 
 
	s = (Ipconv *)(q->ptr); 
1992/0414/sys/src/9/port/devip.c:693,7021992/0416/sys/src/9/port/devip.c:713,744
1992/0223    
	qunlock(s); 
1991/0424    
 
	switch(tcb->state){ 
1991/12171    
	case Closed: 
	case Listen: 
1992/0416    
		/* 
		 *  reset any incoming calls to this listener 
		 */ 
		qlock(s); 
		s->backlog = 0; 
		s->curlog = 0; 
		etab = &tcpbase[conf.ip]; 
		for(ifc = tcpbase; ifc < etab; ifc++){ 
			if(ifc->newcon == s) { 
				ifc->newcon = 0; 
				tcpflushincoming(ifc); 
			} 
		} 
		qunlock(s); 
 
		qlock(tcb); 
		close_self(s, 0); 
		qunlock(tcb); 
		break; 
 
	case Closed: 
1991/12171    
	case Syn_sent: 
1992/0416    
		qlock(tcb); 
1991/0424    
		close_self(s, 0); 
1992/0416    
		qunlock(tcb); 
1991/0424    
		break; 
1992/0313    
 
1991/12171    
	case Syn_received: 


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