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

1991/0118/port/devnonet.c (diff list | history)

1991/01151/sys/src/9/port/devnonet.c:86,911991/0118/sys/src/9/port/devnonet.c:86,92 (short | long | prev | next)
1990/1210    
	Cconnecting, 
	Chungup, 
	Cclosing, 
1991/0118    
	Csuperceded, 
1990/1210    
}; 
 
/* 
1991/01151/sys/src/9/port/devnonet.c:470,4761991/0118/sys/src/9/port/devnonet.c:471,477
1990/1210    
	 *  send hangup messages to the other side 
	 *  until it hangs up or we get tired. 
	 */ 
	if(cp->state >= Cconnected){ 
1991/0118    
	if(cp->state>=Cconnected && cp->state!=Csuperceded){ 
1990/1210    
		sendctlmsg(cp, NO_HANGUP, 1); 
		for(i=0; i<10 && !ishungup(cp); i++){ 
			sendctlmsg(cp, NO_HANGUP, 1); 
1991/01151/sys/src/9/port/devnonet.c:961,9661991/0118/sys/src/9/port/devnonet.c:962,971
1990/1210    
	} 
	cp->hdr->mid = mp->mid; 
 
1991/0118    
	/* 
	 *  package n blocks into m packets.  make sure 
	 *  no packet is < mintu or > maxtu in length. 
	 */ 
1990/1210    
	if(ifc->mintu > mp->len) { 
		/* 
		 *  short message: 
1991/01151/sys/src/9/port/devnonet.c:971,9771991/0118/sys/src/9/port/devnonet.c:976,985
1990/1210    
			memcpy(pkt->wptr, bp->rptr, n = BLEN(bp)); 
			pkt->wptr += n; 
		} 
		memset(pkt->wptr, 0, n = ifc->mintu - mp->len); 
1991/0118    
		/* 
		 *  round up to mintu 
		 */ 
		memset(pkt->wptr, 0, n = ifc->mintu-mp->len); 
1990/1210    
		pkt->wptr += n; 
	} else { 
		/* 
1991/01151/sys/src/9/port/devnonet.c:986,9911991/0118/sys/src/9/port/devnonet.c:994,1000
1990/1210    
		if(bp) 
			rptr = bp->rptr; 
		last = pkt = mkhdr(cp, msgrem); 
1991/0118    
		n = 0; 
1990/1210    
		while(bp){ 
			/* 
			 *  if pkt full, send and create new header block 
1991/01151/sys/src/9/port/devnonet.c:1011,10211991/0118/sys/src/9/port/devnonet.c:1020,1043
1990/1210    
					rptr = bp->rptr; 
			} 
		} 
1991/0118    
		/* 
		 *  round up last packet to mintu 
		 */ 
		if(n < ifc->mintu){ 
			n = ifc->mintu - n; 
			last = last->next = allocb(n); 
			memset(last->wptr, 0, n); 
			last->wptr += n; 
		} 
1990/1210    
	} 
	nonetcksum(pkt, ifc->hsize); 
	last->flags |= S_DELIM; 
1991/0118    
	if(cp->rexmit > 10) 
		mp->time = NOW + 10*MSrexmit; 
	else 
		mp->time = NOW + (cp->rexmit+1)*MSrexmit; 
	DPRINT("xmit %d %lud %lud\n", cp->rexmit, NOW, mp->time); 
1990/1210    
	(*wq->put)(wq, pkt); 
	mp->time = NOW + MSrexmit; 
	qunlock(&cp->xlock); 
	poperror(); 
} 
1991/01151/sys/src/9/port/devnonet.c:1067,10761991/0118/sys/src/9/port/devnonet.c:1089,1102
1990/1210    
	/* 
	 *  if a new call request comes in on a connected channel, hang up the call 
	 */ 
	if(h->mid==0 && (f & NO_NEWCALL) && cp->state==Cconnected){ 
1991/0118    
	if(h->mid==0 && (f & NO_NEWCALL) 
	&& (cp->state==Cconnected || cp->state==Csuperceded)){ 
1990/1229    
		DPRINT("new call on connected channel\n");  
1990/1210    
		freeb(bp); 
		hangup(cp); 
1991/0118    
		if(cp->state != Csuperceded){ 
			cp->state = Csuperceded; 
			hangup(cp); 
		} 
1990/1210    
		return; 
	} 
 
1991/01151/sys/src/9/port/devnonet.c:1269,12741991/0118/sys/src/9/port/devnonet.c:1295,1301
1991/0108    
{ 
	Noifc *ifc; 
	Noconv *cp, *ep; 
1991/0118    
	Nomsg *mp; 
1991/0108    
 
	cp = 0; 
	ifc = 0; 
1991/01151/sys/src/9/port/devnonet.c:1302,13131991/0118/sys/src/9/port/devnonet.c:1329,1342
1991/01151    
			/* 
			 *  resend the first message 
			 */ 
			if(cp->first!=cp->next && cp->out[cp->first].time>=NOW){ 
				if(cp->rexmit++ > 100){ 
1991/0118    
			if(cp->first!=cp->next && NOW>=cp->out[cp->first].time){ 
				if(cp->rexmit++ > 60){ 
1991/01151    
					print("hanging up\n"); 
					hangup(cp); 
				} else 
					sendmsg(cp, &(cp->out[cp->first])); 
1991/0118    
				} else { 
					mp = &(cp->out[cp->first]); 
					sendmsg(cp, mp); 
				} 
1991/01151    
			} 
 
			/* 


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