xref: /csrg-svn/sys/netccitt/pk_debug.c (revision 63216)
141709Ssklower /*
241709Ssklower  * Copyright (c) University of British Columbia, 1984
3*63216Sbostic  * Copyright (c) 1990, 1993
4*63216Sbostic  *	The Regents of the University of California.  All rights reserved.
541709Ssklower  *
641709Ssklower  * This code is derived from software contributed to Berkeley by
741709Ssklower  * the Laboratory for Computation Vision and the Computer Science Department
841709Ssklower  * of the University of British Columbia.
941709Ssklower  *
1041709Ssklower  * %sccs.include.redist.c%
1141709Ssklower  *
12*63216Sbostic  *	@(#)pk_debug.c	8.1 (Berkeley) 06/10/93
1341709Ssklower  */
1441591Ssklower 
1556530Sbostic #include <sys/param.h>
1656530Sbostic #include <sys/systm.h>
1756530Sbostic #include <sys/mbuf.h>
1856530Sbostic #include <sys/socket.h>
1956530Sbostic #include <sys/protosw.h>
2056530Sbostic #include <sys/socketvar.h>
2156530Sbostic #include <sys/errno.h>
2241591Ssklower 
2356530Sbostic #include <net/if.h>
2441591Ssklower 
2556530Sbostic #include <netccitt/x25.h>
2656530Sbostic #include <netccitt/pk.h>
2756530Sbostic #include <netccitt/pk_var.h>
2845165Ssklower 
2941591Ssklower char	*pk_state[] = {
3041591Ssklower 	"Listen",	"Ready",	"Received-Call",
3141591Ssklower 	"Sent-Call",	"Data-Transfer","Received-Clear",
3241591Ssklower 	"Sent-Clear",
3341591Ssklower };
3441591Ssklower 
3541591Ssklower char   *pk_name[] = {
3641591Ssklower 	"Call",		"Call-Conf",	"Clear",
3741591Ssklower 	"Clear-Conf",	"Data",		"Intr",		"Intr-Conf",
3841591Ssklower 	"Rr",		"Rnr",		"Reset",	"Reset-Conf",
3947267Ssklower 	"Restart",	"Restart-Conf",	"Reject",	"Diagnostic",
4047267Ssklower 	"Invalid"
4141591Ssklower };
4241591Ssklower 
4345893Ssklower pk_trace (xcp, m, dir)
4441591Ssklower struct x25config *xcp;
4545893Ssklower register struct mbuf *m;
4641591Ssklower char *dir;
4741591Ssklower {
4841591Ssklower 	register char *s;
4945893Ssklower 	struct x25_packet *xp = mtod(m, struct x25_packet *);
5041591Ssklower 	register int i, len = 0, cnt = 0;
5141591Ssklower 
5241591Ssklower 	if (xcp -> xc_ptrace == 0)
5341591Ssklower 		return;
5441591Ssklower 
5541591Ssklower 	i = pk_decode (xp) / MAXSTATES;
5645893Ssklower 	for (; m; m = m -> m_next) {
5741591Ssklower 		len = len + m -> m_len;
5841591Ssklower 		++cnt;
5941591Ssklower 	}
6041591Ssklower 	printf ("LCN=%d %s:	%s	#=%d, len=%d ",
6145571Ssklower 		LCN(xp), dir, pk_name[i], cnt, len);
6241591Ssklower 	for (s = (char *) xp, i = 0; i < 5; ++i, ++s)
6341591Ssklower 		printf ("%x ", (int) * s & 0xff);
6441591Ssklower 	printf ("\n");
6541591Ssklower }
6649590Ssklower 
mbuf_cache(c,m)6749590Ssklower mbuf_cache(c, m)
6849590Ssklower register struct mbuf_cache *c;
6949590Ssklower struct mbuf *m;
7049590Ssklower {
7149590Ssklower 	register struct mbuf **mp;
7249590Ssklower 
7349590Ssklower 	if (c->mbc_size != c->mbc_oldsize) {
7449590Ssklower 		unsigned zero_size, copy_size;
7549590Ssklower 		unsigned new_size = c->mbc_size * sizeof(m);
7649590Ssklower 		caddr_t cache = (caddr_t)c->mbc_cache;
7749590Ssklower 
7849590Ssklower 		if (new_size) {
7949590Ssklower 			c->mbc_cache = (struct mbuf **)
8049590Ssklower 				malloc(new_size, M_MBUF, M_NOWAIT);
8149590Ssklower 			if (c->mbc_cache == 0) {
8249590Ssklower 				c->mbc_cache = (struct mbuf **)cache;
8349590Ssklower 				return;
8449590Ssklower 			}
8549590Ssklower 			c->mbc_num %= c->mbc_size;
8649590Ssklower 		} else
8749590Ssklower 			c->mbc_cache = 0;
8849590Ssklower 		if (c->mbc_size < c->mbc_oldsize) {
8949590Ssklower 			register struct mbuf **mplim;
9049590Ssklower 			mp = c->mbc_size + (struct mbuf **)cache;
9149590Ssklower 			mplim = c->mbc_oldsize + (struct mbuf **)cache;
9249590Ssklower 			while (mp < mplim)
9349590Ssklower 				m_freem(*mp++);
9449590Ssklower 			zero_size = 0;
9549590Ssklower 		} else
9649590Ssklower 			zero_size = (c->mbc_size - c->mbc_oldsize) * sizeof(m);
9749590Ssklower 		copy_size = new_size - zero_size;
9849590Ssklower 		c->mbc_oldsize = c->mbc_size;
9949590Ssklower 		if (copy_size)
10049590Ssklower 			bcopy(cache, (caddr_t)c->mbc_cache, copy_size);
10149590Ssklower 		if (cache)
10249590Ssklower 			free(cache, M_MBUF);
10349590Ssklower 		if (zero_size)
10449590Ssklower 			bzero(copy_size + (caddr_t)c->mbc_cache, zero_size);
10549590Ssklower 	}
10649590Ssklower 	if (c->mbc_size == 0)
10749590Ssklower 		return;
10849590Ssklower 	mp = c->mbc_cache + c->mbc_num;
10949590Ssklower 	c->mbc_num = (1 + c->mbc_num) % c->mbc_size;
11049590Ssklower 	if (*mp)
11149590Ssklower 		m_freem(*mp);
11250427Ssklower 	if (*mp = m_copym(m, 0, M_COPYALL, M_DONTWAIT))
11350427Ssklower 		(*mp)->m_flags |= m->m_flags & 0x08;
11449590Ssklower }
115