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

2000/0706/ip/il.c (diff list | history)

2000/0424/sys/src/9/ip/il.c:149,1602000/0706/sys/src/9/ip/il.c:149,187 (short | long | prev | next)
1998/0306    
	uchar	ilack[4];	/* Acked sequence */ 
1997/0327    
}; 
 
2000/0706    
enum 
{ 
	InMsgs, 
	OutMsgs, 
	CsumErrs,		/* checksum errors */ 
	HlenErrs,		/* header length error */ 
	LenErrs,		/* short packet */ 
	OutOfOrder,		/* out of order */ 
	Retrans,		/* retransmissions */ 
	DupMsg, 
	DupBytes, 
1998/0313    
 
2000/0706    
	Nstats, 
}; 
 
static char *statnames[] = 
{ 
[InMsgs]	"InMsgs", 
[OutMsgs]	"OutMsgs", 
[CsumErrs]	"CsumErrs", 
[HlenErrs]	"HlenErr", 
[LenErrs]	"LenErrs", 
[OutOfOrder]	"OutOfOrder", 
[Retrans]	"Retrans", 
[DupMsg]	"DupMsg", 
[DupBytes]	"DupBytes", 
}; 
 
1998/0313    
typedef struct Ilpriv Ilpriv; 
struct Ilpriv 
1997/0916    
{ 
2000/0706    
	ulong	stats[Nstats]; 
1997/0916    
 
1998/0313    
	/* non-MIB stats */ 
	ulong		csumerr;		/* checksum errors */ 
	ulong		hlenerr;		/* header length error */ 
	ulong		lenerr;			/* short packet */ 
2000/0424/sys/src/9/ip/il.c:289,2982000/0706/sys/src/9/ip/il.c:316,328
1998/0929    
	ulong id, ack; 
1997/0327    
	Block *bp; 
1998/0313    
	Fs *f; 
2000/0706    
	Ilpriv *priv; 
1997/0327    
 
2000/0706    
 
1997/0327    
	USED(l); 
 
1998/0313    
	f = c->p->f; 
2000/0706    
	priv = c->p->priv; 
1997/0327    
	ic = (Ilcb*)c->ptcl; 
 
	bp = qget(c->wq); 
2000/0424/sys/src/9/ip/il.c:355,3602000/0706/sys/src/9/ip/il.c:385,391
1999/0430    
	if(later(msec, ic->timeout, nil)) 
1998/0929    
		ilsettimeout(ic); 
1999/0817    
	ipoput(f, bp, 0, c->ttl, c->tos); 
2000/0706    
	priv->stats[OutMsgs]++; 
1997/0327    
} 
 
static void 
2000/0424/sys/src/9/ip/il.c:367,3832000/0706/sys/src/9/ip/il.c:398,413
1997/0916    
int 
1998/0313    
ilxstats(Proto *il, char *buf, int len) 
1997/0916    
{ 
1998/0306    
	int n; 
1998/0313    
	Ilpriv *ipriv; 
2000/0706    
	Ilpriv *priv; 
	char *p, *e; 
	int i; 
1998/0306    
 
1998/0313    
	ipriv = il->priv; 
                 
1998/0306    
	n = snprint(buf, len, 
1998/0825    
		"il: csum %lud hlen %lud len %lud order %lud rexmit %lud", 
1998/0313    
		ipriv->csumerr, ipriv->hlenerr, ipriv->lenerr, ipriv->order, ipriv->rexmit); 
1998/0825    
	n += snprint(buf+n, len-n, " dupp %lud dupb %lud\n", 
1998/0313    
		ipriv->dup, ipriv->dupb); 
1998/0307    
	return n; 
2000/0706    
	priv = il->priv; 
	p = buf; 
	e = p+len; 
	for(i = 0; i < Nstats; i++) 
		p = seprint(p, e, "%s: %lud\n", statnames[i], priv->stats[i]); 
	return p - buf; 
1997/0916    
} 
 
1997/0327    
void 
2000/0424/sys/src/9/ip/il.c:492,4982000/0706/sys/src/9/ip/il.c:522,528
1997/0327    
	plen = blocklen(bp); 
	if(plen < IL_IPSIZE+IL_HDRSIZE){ 
1998/0313    
		netlog(il->f, Logil, "il: hlenerr\n"); 
		ipriv->hlenerr++; 
2000/0706    
		ipriv->stats[HlenErrs]++; 
1997/0327    
		goto raise; 
	} 
 
2000/0424/sys/src/9/ip/il.c:499,5052000/0706/sys/src/9/ip/il.c:529,535
1997/0327    
	illen = nhgets(ih->illen); 
	if(illen+IL_IPSIZE > plen){ 
1998/0313    
		netlog(il->f, Logil, "il: lenerr\n"); 
		ipriv->lenerr++; 
2000/0706    
		ipriv->stats[LenErrs]++; 
1997/0327    
		goto raise; 
	} 
 
2000/0424/sys/src/9/ip/il.c:512,5182000/0706/sys/src/9/ip/il.c:542,548
1997/0327    
			st = "?"; 
		else 
			st = iltype[ih->iltype]; 
1998/0313    
		ipriv->csumerr++; 
2000/0706    
		ipriv->stats[CsumErrs]++; 
1998/0313    
		netlog(il->f, Logil, "il: cksum %ux %ux, pkt(%s id %lud ack %lud %I/%d->%d)\n", 
1998/0306    
			csum, st, nhgetl(ih->ilid), nhgetl(ih->ilack), raddr, sp, dp); 
1997/0327    
		goto raise; 
2000/0424/sys/src/9/ip/il.c:616,6212000/0706/sys/src/9/ip/il.c:646,652
1997/0327    
{ 
	Ilcb *ic; 
	ulong id, ack; 
2000/0706    
	Ilpriv *priv; 
1997/0327    
 
	id = nhgetl(h->ilid); 
	ack = nhgetl(h->ilack); 
2000/0424/sys/src/9/ip/il.c:624,6292000/0706/sys/src/9/ip/il.c:655,662
1997/0327    
 
1998/0929    
	ic->lastrecv = msec; 
1998/1013    
	ic->querytime = msec + QueryTime; 
2000/0706    
	priv = s->p->priv; 
	priv->stats[InMsgs]++; 
1997/0327    
 
	switch(ic->state) { 
	default: 
2000/0424/sys/src/9/ip/il.c:865,8712000/0706/sys/src/9/ip/il.c:898,904
1997/0327    
		} 
1997/0916    
		if(oid != ic->recvd+1){ 
1998/0313    
			ipriv = s->p->priv; 
			ipriv->order++; 
2000/0706    
			ipriv->stats[OutOfOrder]++; 
1997/0327    
			break; 
1997/0916    
		} 
1997/0327    
 
2000/0424/sys/src/9/ip/il.c:923,9302000/0706/sys/src/9/ip/il.c:956,963
1997/0327    
			newid = nhgetl(lid); 
			if(id <= newid) { 
				if(id == newid) { 
1998/0313    
					ipriv->dup++; 
					ipriv->dupb += blocklen(bp); 
2000/0706    
					ipriv->stats[DupMsg]++; 
					ipriv->stats[DupBytes] += blocklen(bp); 
1997/0327    
					qunlock(&ic->outo); 
					freeblist(bp); 
					return; 


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