rc.c revision 1.2 1 /* $NetBSD: rc.c,v 1.2 1997/03/25 03:07:35 thorpej 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 #ifndef LINT
33 static char rcsid[] = "$NetBSD: rc.c,v 1.2 1997/03/25 03:07:35 thorpej Exp $";
34 #endif
35
36 #include "os.h"
37 #include "common/get.h"
38 #include "common/print.h"
39 #include "common/mopdef.h"
40
41 void
42 mopDumpRC(fd, pkt, trans)
43 FILE *fd;
44 u_char *pkt;
45 int trans;
46 {
47 int i,index = 0;
48 long tmpl;
49 u_char tmpc,code,control;
50 u_short len,tmps,moplen;
51
52 len = mopGetLength(pkt, trans);
53
54 switch (trans) {
55 case TRANS_8023:
56 index = 22;
57 moplen = len - 8;
58 break;
59 default:
60 index = 16;
61 moplen = len;
62 }
63 code = mopGetChar(pkt,&index);
64
65 switch (code) {
66 case MOP_K_CODE_RID:
67
68 tmpc = mopGetChar(pkt,&index);
69 (void)fprintf(fd,"Reserved : %02x\n",tmpc);
70
71 tmps = mopGetShort(pkt,&index);
72 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
73
74 break;
75 case MOP_K_CODE_BOT:
76
77 if ((moplen == 5)) {
78 tmps = mopGetShort(pkt,&index);
79 (void)fprintf(fd,"Verification : %04x\n",tmps);
80 } else {
81
82 tmpl = mopGetLong(pkt,&index);
83 (void)fprintf(fd,"Verification : %08x\n",tmpl);
84
85 tmpc = mopGetChar(pkt,&index); /* Processor */
86 (void)fprintf(fd,"Processor : %02x ",tmpc);
87 mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n");
88
89 control = mopGetChar(pkt,&index); /* Control */
90 (void)fprintf(fd,"Control : %02x ",control);
91 if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) {
92 (void)fprintf(fd,
93 "Bootserver Requesting system ");
94 } else {
95 (void)fprintf(fd,
96 "Bootserver System default ");
97 }
98 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
99 (void)fprintf(fd,
100 "Bootdevice Specified device");
101 } else {
102 (void)fprintf(fd,
103 "Bootdevice System default");
104 }
105 (void)fprintf(fd,"\n");
106
107 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
108 tmpc = mopGetChar(pkt,&index);/* Device ID */
109 (void)fprintf(fd,
110 "Device ID : %02x '",tmpc);
111 for (i = 0; i < ((int) tmpc); i++) {
112 (void)fprintf(fd,"%c",
113 mopGetChar(pkt,&index));
114 }
115 (void)fprintf(fd,"'\n");
116 }
117
118 tmpc = mopGetChar(pkt,&index); /* Software ID */
119 (void)fprintf(fd,"Software ID : %02x ",tmpc);
120 if ((tmpc == 0)) {
121 (void)fprintf(fd,"No software id");
122 }
123 if ((tmpc == 254)) {
124 (void)fprintf(fd,"Maintenance system");
125 tmpc = 0;
126 }
127 if ((tmpc == 255)) {
128 (void)fprintf(fd,"Standard operating system");
129 tmpc = 0;
130 }
131 if ((tmpc > 0)) {
132 (void)fprintf(fd,"'");
133 for (i = 0; i < ((int) tmpc); i++) {
134 (void)fprintf(fd,"%c",
135 mopGetChar(pkt,&index));
136 }
137 (void)fprintf(fd,"'");
138 }
139 (void)fprintf(fd,"'\n");
140
141 }
142 break;
143 case MOP_K_CODE_SID:
144
145 tmpc = mopGetChar(pkt,&index); /* Reserved */
146 (void)fprintf(fd, "Reserved : %02x\n",tmpc);
147
148 tmps = mopGetShort(pkt,&index); /* Receipt # */
149 (void)fprintf(fd, "Receipt Nbr : %04x\n",tmpc);
150
151 mopPrintInfo(fd, pkt, &index, moplen, code, trans);
152
153 break;
154 case MOP_K_CODE_RQC:
155
156 tmps = mopGetShort(pkt,&index);
157 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
158
159 break;
160 case MOP_K_CODE_CNT:
161
162 tmps = mopGetShort(pkt,&index);
163 (void)fprintf(fd,"Receipt Nbr : %04x %d\n",tmps,tmps);
164
165 tmps = mopGetShort(pkt,&index);
166 (void)fprintf(fd,"Last Zeroed : %04x %d\n",tmps,tmps);
167
168 tmpl = mopGetLong(pkt,&index);
169 (void)fprintf(fd,"Bytes rec : %08x %d\n",tmpl,tmpl);
170
171 tmpl = mopGetLong(pkt,&index);
172 (void)fprintf(fd,"Bytes snd : %08x %d\n",tmpl,tmpl);
173
174 tmpl = mopGetLong(pkt,&index);
175 (void)fprintf(fd,"Frames rec : %08x %d\n",tmpl,tmpl);
176
177 tmpl = mopGetLong(pkt,&index);
178 (void)fprintf(fd,"Frames snd : %08x %d\n",tmpl,tmpl);
179
180 tmpl = mopGetLong(pkt,&index);
181 (void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl);
182
183 tmpl = mopGetLong(pkt,&index);
184 (void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl);
185
186 tmpl = mopGetLong(pkt,&index);
187 (void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl);
188
189 tmpl = mopGetLong(pkt,&index);
190 (void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl);
191
192 tmpl = mopGetLong(pkt,&index);
193 (void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl);
194
195 tmps = mopGetShort(pkt,&index);
196 (void)fprintf(fd,"Snd failure : %04x %d\n",tmps,tmps);
197
198 tmps = mopGetShort(pkt,&index);
199 (void)fprintf(fd,"Snd fail reas: %04x ",tmps);
200 if ((tmps & 1)) (void)fprintf(fd,"Excess col ");
201 if ((tmps & 2)) (void)fprintf(fd,"Carrier chk fail ");
202 if ((tmps & 4)) (void)fprintf(fd,"Short circ ");
203 if ((tmps & 8)) (void)fprintf(fd,"Open circ ");
204 if ((tmps & 16)) (void)fprintf(fd,"Frm to long ");
205 if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer ");
206 (void)fprintf(fd,"\n");
207
208 tmps = mopGetShort(pkt,&index);
209 (void)fprintf(fd,"Rec failure : %04x %d\n",tmps,tmps);
210
211 tmps = mopGetShort(pkt,&index);
212 (void)fprintf(fd,"Rec fail reas: %04x ",tmps);
213 if ((tmps & 1)) (void)fprintf(fd,"Block chk err ");
214 if ((tmps & 2)) (void)fprintf(fd,"Framing err ");
215 if ((tmps & 4)) (void)fprintf(fd,"Frm to long ");
216 (void)fprintf(fd,"\n");
217
218 tmps = mopGetShort(pkt,&index);
219 (void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps);
220
221 tmps = mopGetShort(pkt,&index);
222 (void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps);
223
224 tmps = mopGetShort(pkt,&index);
225 (void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps);
226
227 tmps = mopGetShort(pkt,&index);
228 (void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps);
229
230 break;
231 case MOP_K_CODE_RVC:
232
233 tmpl = mopGetLong(pkt,&index);
234 (void)fprintf(fd,"Verification : %08x\n",tmpl);
235
236 break;
237 case MOP_K_CODE_RLC:
238
239 /* Empty message */
240
241 break;
242 case MOP_K_CODE_CCP:
243
244 tmpc = mopGetChar(pkt,&index);
245 (void)fprintf(fd,
246 "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
247 if ((tmpc & 2))
248 (void)fprintf(fd,"Break");
249 (void)fprintf(fd,"\n");
250
251 if (moplen > 2) {
252 #ifndef SHORT_PRINT
253 for (i = 0; i < (moplen - 2); i++) {
254 if ((i % 16) == 0) {
255 if ((i / 16) == 0) {
256 (void)fprintf(fd,
257 "Image Data : %04x ",
258 moplen-2);
259 } else {
260 (void)fprintf(fd,
261 " ");
262 }
263 }
264 (void)fprintf(fd,"%02x ",
265 mopGetChar(pkt,&index));
266 if ((i % 16) == 15)
267 (void)fprintf(fd,"\n");
268 }
269 if ((i % 16) != 15)
270 (void)fprintf(fd,"\n");
271 #else
272 index = index + moplen - 2;
273 #endif
274 }
275
276 break;
277 case MOP_K_CODE_CRA:
278
279 tmpc = mopGetChar(pkt,&index);
280 (void)fprintf(fd,
281 "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
282 if ((tmpc & 2))
283 (void)fprintf(fd,"Cmd Data Lost ");
284 if ((tmpc & 4))
285 (void)fprintf(fd,"Resp Data Lost ");
286 (void)fprintf(fd,"\n");
287
288 if (moplen > 2) {
289 #ifndef SHORT_PRINT
290 for (i = 0; i < (moplen - 2); i++) {
291 if ((i % 16) == 0) {
292 if ((i / 16) == 0) {
293 (void)fprintf(fd,
294 "Image Data : %04x ",
295 moplen-2);
296 } else {
297 (void)fprintf(fd,
298 " ");
299 }
300 }
301 (void)fprintf(fd,"%02x ",
302 mopGetChar(pkt,&index));
303 if ((i % 16) == 15)
304 (void)fprintf(fd,"\n");
305 }
306 if ((i % 16) != 15)
307 (void)fprintf(fd,"\n");
308 #else
309 index = index + moplen - 2;
310 #endif
311 }
312
313 break;
314 default:
315 break;
316 }
317 }
318
319