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

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

1991/1125/sys/src/9/port/devip.c:19,241991/1126/sys/src/9/port/devip.c:19,25 (short | long | prev | next)
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 */ 
 
/* ARPA User Datagram Protocol */ 
1991/1125/sys/src/9/port/devip.c:44,501991/1126/sys/src/9/port/devip.c:45,51
1991/1012    
Qinfo *protocols[] = { &tcpinfo, &udpinfo, &ilinfo, 0 }; 
1991/0424    
 
1991/1114    
void 
ipinitifc(Ipifc *ifc, Qinfo *stproto, Ipconv *cp) 
1991/1126    
ipinitnet(Network *np, Qinfo *stproto, Ipconv *cp) 
1991/1012    
{ 
1991/1114    
	int j; 
1991/0424    
 
1991/1125/sys/src/9/port/devip.c:51,731991/1126/sys/src/9/port/devip.c:52,74
1991/1115    
	for(j = 0; j < conf.ip; j++, cp++){ 
		cp->index = j; 
1991/1114    
		cp->stproto = stproto; 
1991/1115    
		cp->ipinterface = ifc; 
1991/1126    
		cp->net = np; 
1991/1115    
	} 
1991/1114    
	ifc->net.name = stproto->name; 
	ifc->net.nconv = conf.ip; 
	ifc->net.devp = &ipinfo; 
	ifc->net.protop = stproto; 
1991/1126    
	np->name = stproto->name; 
	np->nconv = conf.ip; 
	np->devp = &ipinfo; 
	np->protop = stproto; 
1991/1114    
	if(stproto != &udpinfo) 
		ifc->net.listen = iplisten; 
	ifc->net.clone = ipclonecon; 
1991/1115    
	ifc->net.prot = (Netprot *)ialloc(sizeof(Netprot) * conf.ip, 0); 
1991/1114    
	ifc->net.ninfo = 3; 
	ifc->net.info[0].name = "remote"; 
	ifc->net.info[0].fill = ipremotefill; 
	ifc->net.info[1].name = "local"; 
	ifc->net.info[1].fill = iplocalfill; 
	ifc->net.info[2].name = "status"; 
	ifc->net.info[2].fill = ipstatusfill; 
1991/1126    
		np->listen = iplisten; 
	np->clone = ipclonecon; 
	np->prot = (Netprot *)ialloc(sizeof(Netprot) * conf.ip, 0); 
	np->ninfo = 3; 
	np->info[0].name = "remote"; 
	np->info[0].fill = ipremotefill; 
	np->info[1].name = "local"; 
	np->info[1].fill = iplocalfill; 
	np->info[2].name = "status"; 
	np->info[2].fill = ipstatusfill; 
1991/1114    
} 
1991/0424    
 
void 
1991/1125/sys/src/9/port/devip.c:79,851991/1126/sys/src/9/port/devip.c:80,87
1991/0424    
 
1991/1012    
	for(i = 0; protocols[i]; i++) { 
1991/0424    
		ipconv[i] = (Ipconv *)ialloc(sizeof(Ipconv) * conf.ip, 0); 
1991/1114    
		ipinitifc(&ipifc[i], protocols[i], ipconv[i]); 
1991/1126    
		ipnet[i] = (Network *)ialloc(sizeof(Network), 0); 
		ipinitnet(ipnet[i], protocols[i], ipconv[i]); 
1991/0424    
		newqinfo(protocols[i]); 
	} 
 
1991/1125/sys/src/9/port/devip.c:119,1371991/1126/sys/src/9/port/devip.c:121,139
1991/0424    
int 
ipwalk(Chan *c, char *name) 
{ 
1991/1114    
	return netwalk(c, name, &ipifc[c->dev].net); 
1991/1126    
	return netwalk(c, name, ipnet[c->dev]); 
1991/0424    
} 
 
void 
ipstat(Chan *c, char *db) 
{ 
1991/1114    
	netstat(c, db, &ipifc[c->dev].net); 
1991/1126    
	netstat(c, db, ipnet[c->dev]); 
1991/0424    
} 
 
Chan * 
ipopen(Chan *c, int omode) 
{ 
1991/1114    
	return netopen(c, omode, &ipifc[c->dev].net); 
1991/1126    
	return netopen(c, omode, ipnet[c->dev]); 
1991/0424    
} 
 
1991/1114    
int 
1991/1125/sys/src/9/port/devip.c:150,1561991/1126/sys/src/9/port/devip.c:152,157
1991/1115    
ipincoming(Ipconv *base, Ipconv *from) 
1991/1023    
{ 
1991/1024    
	Ipconv *new, *etab; 
1991/1115    
	Ipifc *ifc; 
1991/1023    
 
	etab = &base[conf.ip]; 
	for(new = base; new < etab; new++) { 
1991/1125/sys/src/9/port/devip.c:161,1731991/1126/sys/src/9/port/devip.c:162,173
1991/0424    
				qunlock(new); 
				continue; 
			} 
1991/1115    
			ifc = base->ipinterface; 
			if(from) 
				/* copy ownership from listening channel */ 
				netown(&ifc->net, new->index, ifc->net.prot[from->index].owner, 0); 
1991/1126    
				netown(new->net, new->index, new->net->prot[from->index].owner, 0); 
1991/1115    
			else 
				/* current user becomes owner */ 
				netown(&ifc->net, new->index, u->p->user, 0); 
1991/1126    
				netown(new->net, new->index, u->p->user, 0); 
1991/1114    
			new->ref = 1; 
1991/0424    
			qunlock(new); 
			return new; 
1991/1125/sys/src/9/port/devip.c:193,1991991/1126/sys/src/9/port/devip.c:193,199
1991/0424    
void 
ipwstat(Chan *c, char *dp) 
{ 
1991/1115    
	netwstat(c, dp, &ipifc[c->dev].net); 
1991/1126    
	netwstat(c, dp, ipnet[c->dev]); 
1991/0424    
} 
 
void 
1991/1125/sys/src/9/port/devip.c:206,2121991/1126/sys/src/9/port/devip.c:206,212
1991/0424    
long 
ipread(Chan *c, void *a, long n, ulong offset) 
{ 
1991/1114    
	return netread(c, a, n, offset,  &ipifc[c->dev].net); 
1991/1126    
	return netread(c, a, n, offset, ipnet[c->dev]); 
1991/0424    
} 
 
long 
1991/1125/sys/src/9/port/devip.c:454,4601991/1126/sys/src/9/port/devip.c:454,459
1991/1114    
	ipc->dst = 0; 
1991/0424    
 
	closeipifc(ipc->ipinterface); 
1991/1115    
	netdisown(&ipc->ipinterface->net, ipc->index); 
1991/0424    
} 
 
void 
1991/1125/sys/src/9/port/devip.c:484,4921991/1126/sys/src/9/port/devip.c:483,491
1991/0424    
	Ipconv *s; 
	Tcpctl *tcb;  
1991/1104    
	int len, errnum; 
1991/1126    
	Block *f; 
1991/0424    
 
	s = (Ipconv *)(q->ptr); 
	len = blen(bp); 
	tcb = &s->tcpctl; 
 
1991/1104    
	if(bp->type == M_CTL) { 
1991/1125/sys/src/9/port/devip.c:512,5191991/1126/sys/src/9/port/devip.c:511,524
1991/0424    
	case ESTABLISHED: 
	case CLOSE_WAIT: 
		qlock(tcb); 
1991/1104    
		appendb(&tcb->sndq, bp); 
		tcb->sndcnt += len; 
1991/1126    
		tcb->sndcnt += blen(bp); 
		if(tcb->sndq == 0) 
			tcb->sndq = bp; 
		else { 
			for(f = tcb->sndq; f->next; f = f->next) 
				; 
			f->next = bp; 
		} 
1991/0424    
		tcprcvwin(s); 
		tcp_output(s); 
		qunlock(tcb); 
1991/1125/sys/src/9/port/devip.c:675,6811991/1126/sys/src/9/port/devip.c:680,685
1991/0424    
		qunlock(tcb); 
		break; 
	} 
1991/1115    
	netdisown(&s->ipinterface->net, s->index); 
1991/0424    
} 
 
 


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