rc.c revision 1.3.54.1 1 /* $NetBSD: rc.c,v 1.3.54.1 2009/05/13 19:20:29 jym Exp $ */
2
3 /*
4 * Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Mats O Jansson.
17 * 4. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #include <sys/cdefs.h>
33 #ifndef lint
34 __RCSID("$NetBSD: rc.c,v 1.3.54.1 2009/05/13 19:20:29 jym Exp $");
35 #endif
36
37 #include "os.h"
38 #include "get.h"
39 #include "mopdef.h"
40 #include "print.h"
41 #include "rc.h"
42
43 void
44 mopDumpRC(fd, pkt, trans)
45 FILE *fd;
46 u_char *pkt;
47 int trans;
48 {
49 int i,idx = 0;
50 int32_t tmpl;
51 u_char tmpc,code,control;
52 u_short len,tmps,moplen;
53
54 len = mopGetLength(pkt, trans);
55
56 switch (trans) {
57 case TRANS_8023:
58 idx = 22;
59 moplen = len - 8;
60 break;
61 default:
62 idx = 16;
63 moplen = len;
64 }
65 code = mopGetChar(pkt,&idx);
66
67 switch (code) {
68 case MOP_K_CODE_RID:
69
70 tmpc = mopGetChar(pkt,&idx);
71 (void)fprintf(fd,"Reserved : %02x\n",tmpc);
72
73 tmps = mopGetShort(pkt,&idx);
74 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
75
76 break;
77 case MOP_K_CODE_BOT:
78
79 if ((moplen == 5)) {
80 tmps = mopGetShort(pkt,&idx);
81 (void)fprintf(fd,"Verification : %04x\n",tmps);
82 } else {
83
84 tmpl = mopGetLong(pkt,&idx);
85 (void)fprintf(fd,"Verification : %08x\n",tmpl);
86
87 tmpc = mopGetChar(pkt,&idx); /* Processor */
88 (void)fprintf(fd,"Processor : %02x ",tmpc);
89 mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n");
90
91 control = mopGetChar(pkt,&idx); /* Control */
92 (void)fprintf(fd,"Control : %02x ",control);
93 if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) {
94 (void)fprintf(fd,
95 "Bootserver Requesting system ");
96 } else {
97 (void)fprintf(fd,
98 "Bootserver System default ");
99 }
100 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
101 (void)fprintf(fd,
102 "Bootdevice Specified device");
103 } else {
104 (void)fprintf(fd,
105 "Bootdevice System default");
106 }
107 (void)fprintf(fd,"\n");
108
109 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
110 tmpc = mopGetChar(pkt,&idx);/* Device ID */
111 (void)fprintf(fd,
112 "Device ID : %02x '",tmpc);
113 for (i = 0; i < ((int) tmpc); i++) {
114 (void)fprintf(fd,"%c",
115 mopGetChar(pkt,&idx));
116 }
117 (void)fprintf(fd,"'\n");
118 }
119
120 tmpc = mopGetChar(pkt,&idx); /* Software ID */
121 (void)fprintf(fd,"Software ID : %02x ",tmpc);
122 if ((tmpc == 0)) {
123 (void)fprintf(fd,"No software id");
124 }
125 if ((tmpc == 254)) {
126 (void)fprintf(fd,"Maintenance system");
127 tmpc = 0;
128 }
129 if ((tmpc == 255)) {
130 (void)fprintf(fd,"Standard operating system");
131 tmpc = 0;
132 }
133 if ((tmpc > 0)) {
134 (void)fprintf(fd,"'");
135 for (i = 0; i < ((int) tmpc); i++) {
136 (void)fprintf(fd,"%c",
137 mopGetChar(pkt,&idx));
138 }
139 (void)fprintf(fd,"'");
140 }
141 (void)fprintf(fd,"'\n");
142
143 }
144 break;
145 case MOP_K_CODE_SID:
146
147 tmpc = mopGetChar(pkt,&idx); /* Reserved */
148 (void)fprintf(fd, "Reserved : %02x\n",tmpc);
149
150 tmps = mopGetShort(pkt,&idx); /* Receipt # */
151 (void)fprintf(fd, "Receipt Nbr : %04x\n",tmpc);
152
153 mopPrintInfo(fd, pkt, &idx, moplen, code, trans);
154
155 break;
156 case MOP_K_CODE_RQC:
157
158 tmps = mopGetShort(pkt,&idx);
159 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
160
161 break;
162 case MOP_K_CODE_CNT:
163
164 tmps = mopGetShort(pkt,&idx);
165 (void)fprintf(fd,"Receipt Nbr : %04x %d\n",tmps,tmps);
166
167 tmps = mopGetShort(pkt,&idx);
168 (void)fprintf(fd,"Last Zeroed : %04x %d\n",tmps,tmps);
169
170 tmpl = mopGetLong(pkt,&idx);
171 (void)fprintf(fd,"Bytes rec : %08x %d\n",tmpl,tmpl);
172
173 tmpl = mopGetLong(pkt,&idx);
174 (void)fprintf(fd,"Bytes snd : %08x %d\n",tmpl,tmpl);
175
176 tmpl = mopGetLong(pkt,&idx);
177 (void)fprintf(fd,"Frames rec : %08x %d\n",tmpl,tmpl);
178
179 tmpl = mopGetLong(pkt,&idx);
180 (void)fprintf(fd,"Frames snd : %08x %d\n",tmpl,tmpl);
181
182 tmpl = mopGetLong(pkt,&idx);
183 (void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl);
184
185 tmpl = mopGetLong(pkt,&idx);
186 (void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl);
187
188 tmpl = mopGetLong(pkt,&idx);
189 (void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl);
190
191 tmpl = mopGetLong(pkt,&idx);
192 (void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl);
193
194 tmpl = mopGetLong(pkt,&idx);
195 (void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl);
196
197 tmps = mopGetShort(pkt,&idx);
198 (void)fprintf(fd,"Snd failure : %04x %d\n",tmps,tmps);
199
200 tmps = mopGetShort(pkt,&idx);
201 (void)fprintf(fd,"Snd fail reas: %04x ",tmps);
202 if ((tmps & 1)) (void)fprintf(fd,"Excess col ");
203 if ((tmps & 2)) (void)fprintf(fd,"Carrier chk fail ");
204 if ((tmps & 4)) (void)fprintf(fd,"Short circ ");
205 if ((tmps & 8)) (void)fprintf(fd,"Open circ ");
206 if ((tmps & 16)) (void)fprintf(fd,"Frm to long ");
207 if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer ");
208 (void)fprintf(fd,"\n");
209
210 tmps = mopGetShort(pkt,&idx);
211 (void)fprintf(fd,"Rec failure : %04x %d\n",tmps,tmps);
212
213 tmps = mopGetShort(pkt,&idx);
214 (void)fprintf(fd,"Rec fail reas: %04x ",tmps);
215 if ((tmps & 1)) (void)fprintf(fd,"Block chk err ");
216 if ((tmps & 2)) (void)fprintf(fd,"Framing err ");
217 if ((tmps & 4)) (void)fprintf(fd,"Frm to long ");
218 (void)fprintf(fd,"\n");
219
220 tmps = mopGetShort(pkt,&idx);
221 (void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps);
222
223 tmps = mopGetShort(pkt,&idx);
224 (void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps);
225
226 tmps = mopGetShort(pkt,&idx);
227 (void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps);
228
229 tmps = mopGetShort(pkt,&idx);
230 (void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps);
231
232 break;
233 case MOP_K_CODE_RVC:
234
235 tmpl = mopGetLong(pkt,&idx);
236 (void)fprintf(fd,"Verification : %08x\n",tmpl);
237
238 break;
239 case MOP_K_CODE_RLC:
240
241 /* Empty message */
242
243 break;
244 case MOP_K_CODE_CCP:
245
246 tmpc = mopGetChar(pkt,&idx);
247 (void)fprintf(fd,
248 "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
249 if ((tmpc & 2))
250 (void)fprintf(fd,"Break");
251 (void)fprintf(fd,"\n");
252
253 if (moplen > 2) {
254 #ifndef SHORT_PRINT
255 for (i = 0; i < (moplen - 2); i++) {
256 if ((i % 16) == 0) {
257 if ((i / 16) == 0) {
258 (void)fprintf(fd,
259 "Image Data : %04x ",
260 moplen-2);
261 } else {
262 (void)fprintf(fd,
263 " ");
264 }
265 }
266 (void)fprintf(fd,"%02x ",
267 mopGetChar(pkt,&idx));
268 if ((i % 16) == 15)
269 (void)fprintf(fd,"\n");
270 }
271 if ((i % 16) != 15)
272 (void)fprintf(fd,"\n");
273 #else
274 idx = idx + moplen - 2;
275 #endif
276 }
277
278 break;
279 case MOP_K_CODE_CRA:
280
281 tmpc = mopGetChar(pkt,&idx);
282 (void)fprintf(fd,
283 "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
284 if ((tmpc & 2))
285 (void)fprintf(fd,"Cmd Data Lost ");
286 if ((tmpc & 4))
287 (void)fprintf(fd,"Resp Data Lost ");
288 (void)fprintf(fd,"\n");
289
290 if (moplen > 2) {
291 #ifndef SHORT_PRINT
292 for (i = 0; i < (moplen - 2); i++) {
293 if ((i % 16) == 0) {
294 if ((i / 16) == 0) {
295 (void)fprintf(fd,
296 "Image Data : %04x ",
297 moplen-2);
298 } else {
299 (void)fprintf(fd,
300 " ");
301 }
302 }
303 (void)fprintf(fd,"%02x ",
304 mopGetChar(pkt,&idx));
305 if ((i % 16) == 15)
306 (void)fprintf(fd,"\n");
307 }
308 if ((i % 16) != 15)
309 (void)fprintf(fd,"\n");
310 #else
311 idx = idx + moplen - 2;
312 #endif
313 }
314
315 break;
316 default:
317 break;
318 }
319 }
320
321