|
|
1.1 root 1: /*
2: * Copyright (c) University of British Columbia, 1984
3: * Copyright (c) 1990 The Regents of the University of California.
4: * All rights reserved.
5: *
6: * This code is derived from software contributed to Berkeley by
7: * the Laboratory for Computation Vision and the Computer Science Department
8: * of the University of British Columbia.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: * 3. All advertising materials mentioning features or use of this software
19: * must display the following acknowledgement:
20: * This product includes software developed by the University of
21: * California, Berkeley and its contributors.
22: * 4. Neither the name of the University nor the names of its contributors
23: * may be used to endorse or promote products derived from this software
24: * without specific prior written permission.
25: *
26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36: * SUCH DAMAGE.
37: *
38: * @(#)hd_debug.c 7.5 (Berkeley) 5/29/91
39: */
40:
41: #include "param.h"
42: #include "systm.h"
43: #include "mbuf.h"
44: #include "domain.h"
45: #include "socket.h"
46: #include "protosw.h"
47: #include "errno.h"
48: #include "time.h"
49: #include "kernel.h"
50:
51: #include "../net/if.h"
52:
53: #include "hdlc.h"
54: #include "hd_var.h"
55: #include "x25.h"
56:
57: #ifdef HDLCDEBUG
58: #define NTRACE 32
59:
60: struct hdlctrace {
61: struct hdcb *ht_hdp;
62: short ht_dir;
63: struct mbuf *ht_frame;
64: struct timeval ht_time;
65: } hdtrace[NTRACE];
66:
67: int lasttracelogged, freezetrace;
68: #endif
69:
70: hd_trace (hdp, direction, frame)
71: struct hdcb *hdp;
72: register struct Hdlc_frame *frame;
73: {
74: register char *s;
75: register int nr, pf, ns, i;
76: struct Hdlc_iframe *iframe = (struct Hdlc_iframe *) frame;
77:
78: #ifdef HDLCDEBUG
79: hd_savetrace (hdp, direction, frame);
80: #endif
81: if (hdp -> hd_xcp -> xc_ltrace) {
82: if (direction == RX)
83: printf ("F-In: ");
84: else if (direction == 2)
85: printf ("F-Xmt: ");
86: else
87: printf ("F-Out: ");
88:
89: nr = iframe -> nr;
90: pf = iframe -> pf;
91: ns = iframe -> ns;
92:
93: switch (hd_decode (hdp, frame)) {
94: case SABM:
95: printf ("SABM : PF=%d\n", pf);
96: break;
97:
98: case DISC:
99: printf ("DISC : PF=%d\n", pf);
100: break;
101:
102: case DM:
103: printf ("DM : PF=%d\n", pf);
104: break;
105:
106: case FRMR:
107: {
108: register struct Frmr_frame *f = (struct Frmr_frame *)frame;
109:
110: printf ("FRMR : PF=%d, TEXT=", pf);
111: for (s = (char *) frame, i = 0; i < 5; ++i, ++s)
112: printf ("%x ", (int) * s & 0xff);
113: printf ("\n");
114: printf ("control=%x v(s)=%d v(r)=%d w%d x%d y%d z%d\n",
115: f->frmr_control, f->frmr_ns, f->frmr_nr,
116: f->frmr_w, f->frmr_x, f->frmr_y, f->frmr_z);
117: break;
118: }
119:
120: case UA:
121: printf ("UA : PF=%d\n", pf);
122: break;
123:
124: case RR:
125: printf ("RR : N(R)=%d, PF=%d\n", nr, pf);
126: break;
127:
128: case RNR:
129: printf ("RNR : N(R)=%d, PF=%d\n", nr, pf);
130: break;
131:
132: case REJ:
133: printf ("REJ : N(R)=%d, PF=%d\n", nr, pf);
134: break;
135:
136: case IFRAME:
137: {
138: register struct mbuf *m;
139: register int len = 0;
140:
141: for(m = dtom (frame); m; m = m -> m_next)
142: len += m -> m_len;
143: len -= HDHEADERLN;
144: printf ("IFRAME : N(R)=%d, PF=%d, N(S)=%d, DATA(%d)=",
145: nr, pf, ns, len);
146: for (s = (char *)iframe->i_field, i = 0; i < 3; ++i, ++s)
147: printf ("%x ", (int) *s & 0xff);
148: printf ("\n");
149: break;
150: }
151:
152: default:
153: printf ("ILLEGAL: ");
154: for (s = (char *) frame, i = 0; i < 5; ++i, ++s)
155: printf ("%x ", (int) *s & 0xff);
156: printf ("\n");
157: }
158:
159: }
160: }
161:
162: #ifdef HDLCDEBUG
163: static
164: hd_savetrace (hdp, dir, frame)
165: struct hdcb *hdp;
166: struct Hdlc_frame *frame;
167: {
168: register struct hdlctrace *htp;
169: register struct mbuf *m;
170:
171: if (freezetrace)
172: return;
173: htp = &hdtrace[lasttracelogged];
174: lasttracelogged = (lasttracelogged + 1) % NTRACE;
175: if (m = htp->ht_frame)
176: m_freem (m);
177: m = dtom (frame);
178: htp->ht_frame = m_copy (m, 0, m->m_len);
179: htp->ht_hdp = hdp;
180: htp->ht_dir = dir;
181: htp->ht_time = time;
182: }
183:
184: hd_dumptrace (hdp)
185: struct hdcb *hdp;
186: {
187: register int i, ltrace;
188: register struct hdlctrace *htp;
189:
190: freezetrace = 1;
191: hd_status (hdp);
192: printf ("retransmit queue:");
193: for (i = 0; i < 8; i++)
194: printf (" %x", hdp -> hd_retxq[i]);
195: printf ("\n");
196: ltrace = hdp -> hd_xcp -> xc_ltrace;
197: hdp -> hd_xcp -> xc_ltrace = 1;
198: for (i = 0; i < NTRACE; i++) {
199: htp = &hdtrace[(lasttracelogged + i) % NTRACE];
200: if (htp->ht_hdp != hdp || htp->ht_frame == 0)
201: continue;
202: printf ("%d/%d ", htp->ht_time.tv_sec & 0xff,
203: htp->ht_time.tv_usec / 10000);
204: hd_trace (htp->ht_hdp, htp->ht_dir,
205: mtod (htp->ht_frame, struct Hdlc_frame *));
206: m_freem (htp->ht_frame);
207: htp->ht_frame = 0;
208: }
209: hdp -> hd_xcp -> xc_ltrace = ltrace;
210: freezetrace = 0;
211: }
212: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.