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