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

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

1991/1030/sys/src/9/port/devip.c:388,3941991/1104/sys/src/9/port/devip.c:388,394 (short | long | prev | next)
1991/1024    
		qunlock(&ipalloc); 
1991/0424    
 
1991/1024    
	} 
1991/1030    
	else if(strcmp(field[0], "announce") == 0 || strcmp(field[0], "reserve") == 0) { 
1991/1104    
	else if(strcmp(field[0], "announce") == 0) { 
1991/1024    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != CLOSED) || 
		   (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) 
				error(Edevbusy); 
1991/1030/sys/src/9/port/devip.c:404,4101991/1104/sys/src/9/port/devip.c:404,409
1991/1024    
			error(Einuse); 
		} 
		cp->psrc = port; 
		cp->ptype = *field[0]; 
		qunlock(&ipalloc); 
1991/0424    
	} 
1991/1024    
	else if(strcmp(field[0], "backlog") == 0) { 
1991/1030/sys/src/9/port/devip.c:489,4961991/1104/sys/src/9/port/devip.c:488,500
1991/0424    
{ 
	Ipconv *ipc; 
	Udphdr *uh; 
	int	dlen, ptcllen, newlen; 
1991/1104    
	int dlen, ptcllen, newlen; 
1991/0424    
 
1991/1104    
	if(bp->type == M_CTL) { 
		PUTNEXT(q, bp); 
		return; 
	} 
 
1991/0424    
	/* Prepend udp header to packet and pass on to ip layer */ 
	ipc = (Ipconv *)(q->ptr); 
	if(ipc->psrc == 0) 
1991/1030/sys/src/9/port/devip.c:545,5541991/1104/sys/src/9/port/devip.c:549,560
1991/0424    
 
	ipc = (Ipconv *)(q->ptr); 
 
	/* If the port was bound rather than reserved, clear the allocation */ 
	qlock(ipc); 
	if(--ipc->ref == 0 && ipc->ptype == 'b') 
1991/1104    
	if(--ipc->ref == 0) { 
1991/0424    
		ipc->psrc = 0; 
1991/1104    
		ipc->pdst = 0; 
		ipc->dst = 0; 
	} 
1991/0424    
	qunlock(ipc); 
 
	closeipifc(ipc->ipinterface); 
1991/1030/sys/src/9/port/devip.c:583,5941991/1104/sys/src/9/port/devip.c:589,605
1991/0424    
{ 
	Ipconv *s; 
	Tcpctl *tcb;  
	int len, errnum, oob = 0; 
1991/1104    
	int len, errnum; 
1991/0424    
 
	s = (Ipconv *)(q->ptr); 
	len = blen(bp); 
	tcb = &s->tcpctl; 
 
1991/1104    
	if(bp->type == M_CTL) { 
		PUTNEXT(q, bp); 
		return; 
	} 
 
1991/0424    
	if(s->psrc == 0) 
		error(Enoport); 
 
1991/1030/sys/src/9/port/devip.c:607,6231991/1104/sys/src/9/port/devip.c:618,625
1991/0424    
	case ESTABLISHED: 
	case CLOSE_WAIT: 
		qlock(tcb); 
		if(oob == 0) { 
			appendb(&tcb->sndq, bp); 
			tcb->sndcnt += len; 
		} 
		else { 
			if(tcb->snd.up == tcb->snd.una) 
				tcb->snd.up = tcb->snd.ptr; 
			appendb(&tcb->sndoobq, bp); 
			tcb->sndoobcnt += len; 
		} 
                 
1991/1104    
		appendb(&tcb->sndq, bp); 
		tcb->sndcnt += len; 
1991/0424    
		tcprcvwin(s); 
		tcp_output(s); 
		qunlock(tcb); 


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