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

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

1992/0307/sys/src/9/port/devip.c:160,1771992/0313/sys/src/9/port/devip.c:160,177 (short | long | prev | next)
1991/1023    
	etab = &base[conf.ip]; 
	for(new = base; new < etab; new++) { 
1991/0424    
		if(new->ref == 0 && canqlock(new)) { 
			if(new->ref || 
1991/12171    
		          (new->stproto == &tcpinfo && new->tcpctl.state != Closed) || 
1991/1015    
			  (new->stproto == &ilinfo && new->ilctl.state != Ilclosed)) { 
1992/0313    
			if(new->ref || ipconbusy(new)) { 
1991/0424    
				qunlock(new); 
				continue; 
			} 
1991/1115    
			if(from) 
				/* copy ownership from listening channel */ 
1991/1126    
				netown(new->net, new->index, new->net->prot[from->index].owner, 0); 
1992/0313    
				netown(new->net, new->index, 
				       new->net->prot[from->index].owner, 0); 
1991/1115    
			else 
				/* current user becomes owner */ 
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); 
1992/0307/sys/src/9/port/devip.c:242,2501992/0313/sys/src/9/port/devip.c:242,249
1992/0111    
		error(Ebadarg); 
1991/0424    
 
1991/1024    
	if(strcmp(field[0], "connect") == 0) { 
1991/12171    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || 
1991/1024    
		   (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) 
1992/0111    
				error(Enetbusy); 
1992/0313    
		if(ipconbusy(cp)) 
			error(Enetbusy); 
1991/0424    
 
1991/1024    
		if(m != 2) 
			error(Ebadarg); 
1992/0307/sys/src/9/port/devip.c:284,2921992/0313/sys/src/9/port/devip.c:283,290
1991/1125    
		cp->pdst = 0; 
	} 
1991/1104    
	else if(strcmp(field[0], "announce") == 0) { 
1991/12171    
		if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || 
1991/1024    
		   (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) 
1992/0111    
				error(Enetbusy); 
1992/0313    
		if(ipconbusy(cp)) 
			error(Enetbusy); 
1991/0424    
 
1991/1024    
		if(m != 2) 
			error(Ebadarg); 
1992/0307/sys/src/9/port/devip.c:325,3311992/0313/sys/src/9/port/devip.c:323,342
1991/1024    
	return n; 
1991/0424    
} 
 
1992/0313    
int 
ipconbusy(Ipconv  *cp) 
{ 
	if(cp->stproto == &tcpinfo) 
	if(cp->tcpctl.state != Closed) 
		return 1; 
1991/0424    
 
1992/0313    
	if(cp->stproto == &ilinfo) 
	if(cp->ilctl.state != Ilclosed) 
		return 1; 
 
	return 0; 
} 
 
1991/0424    
void 
udpstiput(Queue *q, Block *bp) 
{ 
1992/0307/sys/src/9/port/devip.c:369,3761992/0313/sys/src/9/port/devip.c:380,388
1991/0424    
	/* Look for a conversation structure for this port */ 
	etab = &muxed[conf.ip]; 
	for(ifc = muxed; ifc < etab; ifc++) { 
1991/1125    
		if(ifc->psrc == dport && ifc->ref && 
		   (ifc->pdst == 0 || ifc->pdst == sport)) { 
1992/0313    
		if(ifc->ref) 
		if(ifc->psrc == dport) 
		if(ifc->pdst == 0 || ifc->pdst == sport) { 
1991/0424    
			/* Trim the packet down to data size */ 
			len = len - (UDP_HDRSIZE-UDP_PHDRSIZE); 
			bp = btrim(bp, UDP_EHSIZE+UDP_HDRSIZE, len); 
1992/0307/sys/src/9/port/devip.c:512,5171992/0313/sys/src/9/port/devip.c:524,530
1991/0424    
		tcb->flags |= ACTIVE; 
		send_syn(tcb); 
1991/12171    
		setstate(s, Syn_sent); 
1992/0313    
 
1991/0424    
		/* No break */ 
1991/12171    
	case Syn_sent: 
	case Syn_received: 
1992/0307/sys/src/9/port/devip.c:530,5351992/0313/sys/src/9/port/devip.c:543,549
1991/0424    
		tcp_output(s); 
		qunlock(tcb); 
		break; 
1992/0313    
 
1991/0424    
	default: 
		freeb(bp); 
		error(Ehungup); 
1992/0307/sys/src/9/port/devip.c:629,6381992/0313/sys/src/9/port/devip.c:643,656
1991/1114    
	s = &ipconv[c->dev][connection]; 
	base = ipconv[c->dev]; 
 
1991/12171    
	if((s->stproto == &tcpinfo && s->tcpctl.state != Listen) || 
1991/1114    
	   (s->stproto == &ilinfo && s->ilctl.state != Illistening)) 
1992/0313    
	if(s->stproto == &tcpinfo) 
	if(s->tcpctl.state != Listen) 
1992/0112    
		error(Enolisten); 
1991/1114    
 
1992/0313    
	if(s->stproto == &ilinfo) 
	if(s->ilctl.state != Illistening) 
		error(Enolisten); 
 
1991/0424    
	qlock(&s->listenq); 
1991/1025    
	if(waserror()) { 
		qunlock(&s->listenq); 
1992/0307/sys/src/9/port/devip.c:677,6821992/0313/sys/src/9/port/devip.c:695,701
1991/12171    
	case Syn_sent: 
1991/0424    
		close_self(s, 0); 
		break; 
1992/0313    
 
1991/12171    
	case Syn_received: 
	case Established: 
1991/0424    
		tcb->sndcnt++; 
1992/0307/sys/src/9/port/devip.c:683,6881992/0313/sys/src/9/port/devip.c:702,708
1991/0424    
		tcb->snd.nxt++; 
1991/12171    
		setstate(s, Finwait1); 
1991/0424    
		goto output; 
1992/0313    
 
1991/12171    
	case Close_wait: 
1991/0424    
		tcb->sndcnt++; 
		tcb->snd.nxt++; 


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