xref: /csrg-svn/sys/netccitt/hd_debug.c (revision 41585)
1*41585Ssklower /* Copyright (c) University of British Columbia, 1984 */
2*41585Ssklower 
3*41585Ssklower #include "../h/param.h"
4*41585Ssklower #include "../h/systm.h"
5*41585Ssklower #include "../h/mbuf.h"
6*41585Ssklower #include "../h/domain.h"
7*41585Ssklower #include "../h/socket.h"
8*41585Ssklower #include "../h/protosw.h"
9*41585Ssklower #include "../h/errno.h"
10*41585Ssklower #include "../h/time.h"
11*41585Ssklower #include "../h/kernel.h"
12*41585Ssklower 
13*41585Ssklower #include "../net/if.h"
14*41585Ssklower 
15*41585Ssklower #include "../netccitt/hdlc.h"
16*41585Ssklower #include "../netccitt/hd_var.h"
17*41585Ssklower #include "../netccitt/x25.h"
18*41585Ssklower 
19*41585Ssklower #ifdef HDLCDEBUG
20*41585Ssklower #define NTRACE		32
21*41585Ssklower 
22*41585Ssklower struct	hdlctrace {
23*41585Ssklower 	struct	hdcb *ht_hdp;
24*41585Ssklower 	short	ht_dir;
25*41585Ssklower 	struct	mbuf *ht_frame;
26*41585Ssklower 	struct	timeval ht_time;
27*41585Ssklower } hdtrace[NTRACE];
28*41585Ssklower 
29*41585Ssklower int	lasttracelogged, freezetrace;
30*41585Ssklower #endif
31*41585Ssklower 
32*41585Ssklower hd_trace (hdp, direction, frame)
33*41585Ssklower struct hdcb *hdp;
34*41585Ssklower register struct Hdlc_frame *frame;
35*41585Ssklower {
36*41585Ssklower 	register char *s;
37*41585Ssklower 	register int nr, pf, ns, i;
38*41585Ssklower 	struct Hdlc_iframe *iframe = (struct Hdlc_iframe *) frame;
39*41585Ssklower 
40*41585Ssklower #ifdef HDLCDEBUG
41*41585Ssklower 	hd_savetrace (hdp, direction, frame);
42*41585Ssklower #endif
43*41585Ssklower 	if (hdp -> hd_xcp -> xc_ltrace) {
44*41585Ssklower 		if (direction == RX)
45*41585Ssklower 			printf ("F-In:  ");
46*41585Ssklower 		else if (direction == 2)
47*41585Ssklower 				printf ("F-Xmt: ");
48*41585Ssklower 			else
49*41585Ssklower 				printf ("F-Out:   ");
50*41585Ssklower 
51*41585Ssklower 		nr = iframe -> nr;
52*41585Ssklower 		pf = iframe -> pf;
53*41585Ssklower 		ns = iframe -> ns;
54*41585Ssklower 
55*41585Ssklower 		switch (hd_decode (hdp, frame)) {
56*41585Ssklower 		case SABM:
57*41585Ssklower 			printf ("SABM   : PF=%d\n", pf);
58*41585Ssklower 			break;
59*41585Ssklower 
60*41585Ssklower 		case DISC:
61*41585Ssklower 			printf ("DISC   : PF=%d\n", pf);
62*41585Ssklower 			break;
63*41585Ssklower 
64*41585Ssklower 		case DM:
65*41585Ssklower 			printf ("DM     : PF=%d\n", pf);
66*41585Ssklower 			break;
67*41585Ssklower 
68*41585Ssklower 		case FRMR:
69*41585Ssklower 			{
70*41585Ssklower 			register struct Frmr_frame *f = (struct Frmr_frame *)frame;
71*41585Ssklower 
72*41585Ssklower 			printf ("FRMR   : PF=%d, TEXT=", pf);
73*41585Ssklower 			for (s = (char *) frame, i = 0; i < 5; ++i, ++s)
74*41585Ssklower 				printf ("%x ", (int) * s & 0xff);
75*41585Ssklower 			printf ("\n");
76*41585Ssklower 			printf ("control=%x v(s)=%d v(r)=%d w%d x%d y%d z%d\n",
77*41585Ssklower 				f->frmr_control, f->frmr_ns, f->frmr_nr,
78*41585Ssklower 				f->frmr_w, f->frmr_x, f->frmr_y, f->frmr_z);
79*41585Ssklower 			break;
80*41585Ssklower 			}
81*41585Ssklower 
82*41585Ssklower 		case UA:
83*41585Ssklower 			printf ("UA     : PF=%d\n", pf);
84*41585Ssklower 			break;
85*41585Ssklower 
86*41585Ssklower 		case RR:
87*41585Ssklower 			printf ("RR     : N(R)=%d, PF=%d\n", nr, pf);
88*41585Ssklower 			break;
89*41585Ssklower 
90*41585Ssklower 		case RNR:
91*41585Ssklower 			printf ("RNR    : N(R)=%d, PF=%d\n", nr, pf);
92*41585Ssklower 			break;
93*41585Ssklower 
94*41585Ssklower 		case REJ:
95*41585Ssklower 			printf ("REJ    : N(R)=%d, PF=%d\n", nr, pf);
96*41585Ssklower 			break;
97*41585Ssklower 
98*41585Ssklower 		case IFRAME:
99*41585Ssklower 			{
100*41585Ssklower 			register struct mbuf *m;
101*41585Ssklower 			register int len = 0;
102*41585Ssklower 
103*41585Ssklower 			for(m = dtom (frame); m; m = m -> m_next)
104*41585Ssklower 				len += m -> m_len;
105*41585Ssklower 			len -= HDHEADERLN;
106*41585Ssklower 			printf ("IFRAME : N(R)=%d, PF=%d, N(S)=%d, DATA(%d)=",
107*41585Ssklower 				nr, pf, ns, len);
108*41585Ssklower 			for (s = (char *)iframe->i_field, i = 0; i < 3; ++i, ++s)
109*41585Ssklower 				printf ("%x ", (int) *s & 0xff);
110*41585Ssklower 			printf ("\n");
111*41585Ssklower 			break;
112*41585Ssklower 			}
113*41585Ssklower 
114*41585Ssklower 		default:
115*41585Ssklower 			printf ("ILLEGAL: ");
116*41585Ssklower 			for (s = (char *) frame, i = 0; i < 5; ++i, ++s)
117*41585Ssklower 				printf ("%x ", (int) *s & 0xff);
118*41585Ssklower 			printf ("\n");
119*41585Ssklower 		}
120*41585Ssklower 
121*41585Ssklower 	}
122*41585Ssklower }
123*41585Ssklower 
124*41585Ssklower #ifdef HDLCDEBUG
125*41585Ssklower static
126*41585Ssklower hd_savetrace (hdp, dir, frame)
127*41585Ssklower struct hdcb *hdp;
128*41585Ssklower struct Hdlc_frame *frame;
129*41585Ssklower {
130*41585Ssklower 	register struct hdlctrace *htp;
131*41585Ssklower 	register struct mbuf *m;
132*41585Ssklower 
133*41585Ssklower 	if (freezetrace)
134*41585Ssklower 		return;
135*41585Ssklower 	htp = &hdtrace[lasttracelogged];
136*41585Ssklower 	lasttracelogged = (lasttracelogged + 1) % NTRACE;
137*41585Ssklower 	if (m = htp->ht_frame)
138*41585Ssklower 		m_freem (m);
139*41585Ssklower 	m = dtom (frame);
140*41585Ssklower 	htp->ht_frame = m_copy (m, 0, m->m_len);
141*41585Ssklower 	htp->ht_hdp = hdp;
142*41585Ssklower 	htp->ht_dir = dir;
143*41585Ssklower 	htp->ht_time = time;
144*41585Ssklower }
145*41585Ssklower 
146*41585Ssklower hd_dumptrace (hdp)
147*41585Ssklower struct hdcb *hdp;
148*41585Ssklower {
149*41585Ssklower 	register int i, ltrace;
150*41585Ssklower 	register struct hdlctrace *htp;
151*41585Ssklower 
152*41585Ssklower 	freezetrace = 1;
153*41585Ssklower 	hd_status (hdp);
154*41585Ssklower 	printf ("retransmit queue:");
155*41585Ssklower 	for (i = 0; i < 8; i++)
156*41585Ssklower 		printf (" %X", hdp -> hd_retxq[i]);
157*41585Ssklower 	printf ("\n");
158*41585Ssklower 	ltrace = hdp -> hd_xcp -> xc_ltrace;
159*41585Ssklower 	hdp -> hd_xcp -> xc_ltrace = 1;
160*41585Ssklower 	for (i = 0; i < NTRACE; i++) {
161*41585Ssklower 		htp = &hdtrace[(lasttracelogged + i) % NTRACE];
162*41585Ssklower 		if (htp->ht_hdp != hdp || htp->ht_frame == 0)
163*41585Ssklower 			continue;
164*41585Ssklower 		printf ("%d/%d	", htp->ht_time.tv_sec & 0xff,
165*41585Ssklower 			htp->ht_time.tv_usec / 10000);
166*41585Ssklower 		hd_trace (htp->ht_hdp, htp->ht_dir,
167*41585Ssklower 			mtod (htp->ht_frame, struct Hdlc_frame *));
168*41585Ssklower 		m_freem (htp->ht_frame);
169*41585Ssklower 		htp->ht_frame = 0;
170*41585Ssklower 	}
171*41585Ssklower 	hdp -> hd_xcp -> xc_ltrace = ltrace;
172*41585Ssklower 	freezetrace = 0;
173*41585Ssklower }
174*41585Ssklower #endif
175