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

1991/12171/port/devip.c (diff list | history)

1991/1126/sys/src/9/port/devip.c:16,261991/12171/sys/src/9/port/devip.c:16,26 (short | long | prev | next)
1991/0424    
}; 
 
1991/1030    
int 	udpsum = 1; 
1991/1019    
Queue	*Ipoutput;		/* Control message stream for tcp/il */ 
1991/0424    
Ipifc	*ipifc;			/* IP protocol interfaces for stip */ 
Ipconv	*ipconv[Nrprotocol];	/* Connections for each protocol */ 
1991/1126    
Network	*ipnet[Nrprotocol];	/* User level interface for protocol */ 
1991/0424    
QLock	ipalloc;		/* Protocol port allocation lock */ 
1991/12171    
Queue	*Ipoutput;			/* Control message stream for tcp/il */ 
Ipifc	*ipifc;				/* IP protocol interfaces for stip */ 
Ipconv	*ipconv[Nrprotocol];		/* Connections for each protocol */ 
Network	*ipnet[Nrprotocol];		/* User level interface for protocol */ 
QLock	ipalloc;			/* Protocol port allocation lock */ 
1991/0424    
 
/* ARPA User Datagram Protocol */ 
void	udpstiput(Queue *, Block *); 
1991/1126/sys/src/9/port/devip.c:157,1631991/12171/sys/src/9/port/devip.c:157,163
1991/1023    
	for(new = base; new < etab; new++) { 
1991/0424    
		if(new->ref == 0 && canqlock(new)) { 
			if(new->ref || 
1991/1015    
		          (new->stproto == &tcpinfo && new->tcpctl.state != CLOSED) || 
1991/12171    
		          (new->stproto == &tcpinfo && new->tcpctl.state != Closed) || 
1991/1015    
			  (new->stproto == &ilinfo && new->ilctl.state != Ilclosed)) { 
1991/0424    
				qunlock(new); 
				continue; 
1991/1126/sys/src/9/port/devip.c:237,2431991/12171/sys/src/9/port/devip.c:237,243
1991/1024    
		errors("bad ip control"); 
1991/0424    
 
1991/1024    
	if(strcmp(field[0], "connect") == 0) { 
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != CLOSED) || 
1991/12171    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || 
1991/1024    
		   (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) 
				error(Edevbusy); 
1991/0424    
 
1991/1126/sys/src/9/port/devip.c:279,2851991/12171/sys/src/9/port/devip.c:279,285
1991/1125    
		cp->pdst = 0; 
	} 
1991/1104    
	else if(strcmp(field[0], "announce") == 0) { 
1991/1024    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != CLOSED) || 
1991/12171    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || 
1991/1024    
		   (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) 
				error(Edevbusy); 
1991/0424    
 
1991/1126/sys/src/9/port/devip.c:501,5151991/12171/sys/src/9/port/devip.c:501,515
1991/0424    
		error(s->err); 
 
	switch(tcb->state) { 
	case LISTEN: 
1991/12171    
	case Listen: 
1991/0424    
		tcb->flags |= ACTIVE; 
		send_syn(tcb); 
		setstate(s, SYN_SENT); 
1991/12171    
		setstate(s, Syn_sent); 
1991/0424    
		/* No break */ 
	case SYN_SENT: 
	case SYN_RECEIVED: 
	case ESTABLISHED: 
	case CLOSE_WAIT: 
1991/12171    
	case Syn_sent: 
	case Syn_received: 
	case Established: 
	case Close_wait: 
1991/0424    
		qlock(tcb); 
1991/1126    
		tcb->sndcnt += blen(bp); 
		if(tcb->sndq == 0) 
1991/1126/sys/src/9/port/devip.c:620,6261991/12171/sys/src/9/port/devip.c:620,626
1991/1114    
	s = &ipconv[c->dev][connection]; 
	base = ipconv[c->dev]; 
 
	if((s->stproto == &tcpinfo && s->tcpctl.state != LISTEN) || 
1991/12171    
	if((s->stproto == &tcpinfo && s->tcpctl.state != Listen) || 
1991/1114    
	   (s->stproto == &ilinfo && s->ilctl.state != Illistening)) 
		errors("not announced"); 
 
1991/1126/sys/src/9/port/devip.c:659,6791991/12171/sys/src/9/port/devip.c:659,679
1991/0424    
	s->readq = 0; 
 
	switch(tcb->state){ 
	case CLOSED: 
	case LISTEN: 
	case SYN_SENT: 
1991/12171    
	case Closed: 
	case Listen: 
	case Syn_sent: 
1991/0424    
		close_self(s, 0); 
		break; 
	case SYN_RECEIVED: 
	case ESTABLISHED: 
1991/12171    
	case Syn_received: 
	case Established: 
1991/0424    
		tcb->sndcnt++; 
		tcb->snd.nxt++; 
		setstate(s, FINWAIT1); 
1991/12171    
		setstate(s, Finwait1); 
1991/0424    
		goto output; 
	case CLOSE_WAIT: 
1991/12171    
	case Close_wait: 
1991/0424    
		tcb->sndcnt++; 
		tcb->snd.nxt++; 
		setstate(s, LAST_ACK); 
1991/12171    
		setstate(s, Last_ack); 
1991/0424    
	output: 
		qlock(tcb); 
		tcp_output(s); 
1991/1126/sys/src/9/port/devip.c:785,7941991/12171/sys/src/9/port/devip.c:785,793
1991/0424    
	Ipconv *ifc, *etab; 
 
	etab = &ic[conf.ip]; 
	for(ifc = ic; ifc < etab; ifc++) { 
1991/12171    
	for(ifc = ic; ifc < etab; ifc++) 
1991/0424    
		if(ifc->psrc == port)  
			return ifc; 
	} 
 
	return 0; 
} 
1991/1126/sys/src/9/port/devip.c:798,8071991/12171/sys/src/9/port/devip.c:797,806
1991/0424    
{ 
	Port i; 
 
	for(i = base; i < PORTMAX; i++) { 
1991/12171    
	for(i = base; i < PORTMAX; i++) 
1991/0424    
		if(!portused(ic, i)) 
			return(i); 
	} 
1991/12171    
 
1991/0424    
	return(0); 
} 
 
1991/1126/sys/src/9/port/devip.c:815,8221991/12171/sys/src/9/port/devip.c:814,822
1991/0424    
	/* Look for a conversation structure for this port */ 
	etab = &ic[conf.ip]; 
	for(s = ic; s < etab; s++) { 
		if(s->psrc == dst && s->pdst == src && 
		   (s->dst == dest || dest == 0)) 
1991/12171    
		if(s->psrc == dst) 
		if(s->pdst == src) 
		if(s->dst == dest || dest == 0) 
1991/0424    
			return s; 
	} 
 


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