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

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

1992/0112/sys/src/9/port/devip.c:212,2201992/0128/sys/src/9/port/devip.c:212,220 (short | long | prev | next)
1991/0424    
long 
ipwrite(Chan *c, char *a, long n, ulong offset) 
{ 
	int 	m, backlog, type; 
1992/0128    
	int 	m, backlog, type, priv; 
1991/1024    
	char 	*field[5], *ctlarg[5], buf[256]; 
1991/0424    
	Port	port, base; 
1992/0128    
	Port	port; 
1991/1024    
	Ipconv  *cp; 
1991/0424    
 
	type = STREAMTYPE(c->qid.path); 
1992/0112/sys/src/9/port/devip.c:248,2591992/0128/sys/src/9/port/devip.c:248,259
1991/1024    
		default: 
			error(Ebadarg); 
		case 2: 
			base = PORTALLOC; 
1992/0128    
			priv = 0; 
1991/1024    
			break; 
		case 3: 
			if(strcmp(ctlarg[2], "r") != 0) 
				error(Eperm); 
			base = PRIVPORTALLOC; 
1992/0128    
			priv = 1; 
1991/1024    
			break; 
1991/0424    
		} 
1991/1024    
		cp->dst = ipparse(ctlarg[0]); 
1992/0112/sys/src/9/port/devip.c:262,2681992/0128/sys/src/9/port/devip.c:262,268
1991/1024    
		/* If we have no local port assign one */ 
		qlock(&ipalloc); 
		if(cp->psrc == 0) 
			cp->psrc = nextport(ipconv[c->dev], base); 
1992/0128    
			cp->psrc = nextport(ipconv[c->dev], priv); 
1991/1024    
		qunlock(&ipalloc); 
1991/0424    
 
1991/1114    
		if(cp->stproto == &tcpinfo) 
1992/0112/sys/src/9/port/devip.c:557,5621992/0128/sys/src/9/port/devip.c:557,563
1991/0424    
 
	ipc->readq = RD(q); 
	ipc->readq->rp = &tcpflowr; 
1992/0128    
	ipc->err = 0; 
1991/0424    
 
	RD(q)->ptr = (void *)ipc; 
	WR(q)->next->ptr = (void *)ipc->ipinterface; 
1992/0112/sys/src/9/port/devip.c:852,8651992/0128/sys/src/9/port/devip.c:853,884
1991/0424    
	return 0; 
} 
 
1992/0128    
static Port lastport[2] = { PORTALLOC-1, PRIVPORTALLOC-1 }; 
 
1991/0424    
Port 
nextport(Ipconv *ic, Port base) 
1992/0128    
nextport(Ipconv *ic, int priv) 
1991/0424    
{ 
1992/0128    
	Port base; 
	Port max; 
	Port *p; 
1991/0424    
	Port i; 
 
1991/12171    
	for(i = base; i < PORTMAX; i++) 
1992/0128    
	if(priv){ 
		base = PRIVPORTALLOC; 
		max = PORTALLOC; 
		p = &lastport[1]; 
	} else { 
		base = PORTALLOC; 
		max = PORTMAX; 
		p = &lastport[0]; 
	} 
	 
	for(i = *p + 1; i < max; i++) 
1991/0424    
		if(!portused(ic, i)) 
			return(i); 
1992/0128    
			return(*p = i); 
	for(i = base ; i <= *p; i++) 
		if(!portused(ic, i)) 
			return(*p = i); 
1991/12171    
 
1991/0424    
	return(0); 
} 


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