print.c revision 1.8 1 1.8 christos /* $NetBSD: print.c,v 1.8 2016/06/08 01:11:49 christos Exp $ */
2 1.2 thorpej
3 1.1 cjs /*
4 1.1 cjs * Copyright (c) 1993-96 Mats O Jansson. All rights reserved.
5 1.1 cjs *
6 1.1 cjs * Redistribution and use in source and binary forms, with or without
7 1.1 cjs * modification, are permitted provided that the following conditions
8 1.1 cjs * are met:
9 1.1 cjs * 1. Redistributions of source code must retain the above copyright
10 1.1 cjs * notice, this list of conditions and the following disclaimer.
11 1.1 cjs * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 cjs * notice, this list of conditions and the following disclaimer in the
13 1.1 cjs * documentation and/or other materials provided with the distribution.
14 1.1 cjs *
15 1.1 cjs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 1.1 cjs * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 1.1 cjs * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 1.1 cjs * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 1.1 cjs * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 1.1 cjs * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 1.1 cjs * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 1.1 cjs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 1.1 cjs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 1.1 cjs * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 1.1 cjs */
26 1.1 cjs
27 1.8 christos #include "port.h"
28 1.3 lukem #ifndef lint
29 1.8 christos __RCSID("$NetBSD: print.c,v 1.8 2016/06/08 01:11:49 christos Exp $");
30 1.1 cjs #endif
31 1.1 cjs
32 1.1 cjs #include <sys/types.h>
33 1.1 cjs #include <stdio.h>
34 1.1 cjs
35 1.1 cjs #include "os.h"
36 1.3 lukem #include "cmp.h"
37 1.3 lukem #include "get.h"
38 1.3 lukem #include "mopdef.h"
39 1.3 lukem #include "nma.h"
40 1.3 lukem #include "nmadef.h"
41 1.3 lukem #include "print.h"
42 1.1 cjs
43 1.1 cjs #define SHORT_PRINT
44 1.1 cjs
45 1.1 cjs void
46 1.6 drochner mopPrintHWA(FILE *fd, const u_char *ap)
47 1.1 cjs {
48 1.1 cjs (void)fprintf(fd, "%x:%x:%x:%x:%x:%x",
49 1.1 cjs ap[0],ap[1],ap[2],ap[3],ap[4],ap[5]);
50 1.1 cjs if (ap[0] < 10) (void)fprintf(fd, " ");
51 1.1 cjs if (ap[1] < 10) (void)fprintf(fd, " ");
52 1.1 cjs if (ap[2] < 10) (void)fprintf(fd, " ");
53 1.1 cjs if (ap[3] < 10) (void)fprintf(fd, " ");
54 1.1 cjs if (ap[4] < 10) (void)fprintf(fd, " ");
55 1.1 cjs if (ap[5] < 10) (void)fprintf(fd, " ");
56 1.1 cjs }
57 1.1 cjs
58 1.1 cjs void
59 1.6 drochner mopPrintBPTY(FILE *fd, u_char bpty)
60 1.1 cjs {
61 1.1 cjs switch(bpty) {
62 1.1 cjs case MOP_K_BPTY_SYS:
63 1.1 cjs (void)fprintf(fd, "System Processor");
64 1.1 cjs break;
65 1.1 cjs case MOP_K_BPTY_COM:
66 1.1 cjs (void)fprintf(fd, "Communication Processor");
67 1.1 cjs break;
68 1.1 cjs default:
69 1.1 cjs (void)fprintf(fd, "Unknown");
70 1.1 cjs break;
71 1.1 cjs };
72 1.1 cjs };
73 1.1 cjs
74 1.1 cjs void
75 1.6 drochner mopPrintPGTY(FILE *fd, u_char pgty)
76 1.1 cjs {
77 1.1 cjs switch(pgty) {
78 1.1 cjs case MOP_K_PGTY_SECLDR:
79 1.1 cjs (void)fprintf(fd, "Secondary Loader");
80 1.1 cjs break;
81 1.1 cjs case MOP_K_PGTY_TERLDR:
82 1.1 cjs (void)fprintf(fd, "Tertiary Loader");
83 1.1 cjs break;
84 1.1 cjs case MOP_K_PGTY_OPRSYS:
85 1.1 cjs (void)fprintf(fd, "Operating System");
86 1.1 cjs break;
87 1.1 cjs case MOP_K_PGTY_MGNTFL:
88 1.1 cjs (void)fprintf(fd, "Management File");
89 1.1 cjs break;
90 1.1 cjs default:
91 1.1 cjs (void)fprintf(fd, "Unknown");
92 1.1 cjs break;
93 1.1 cjs };
94 1.1 cjs }
95 1.1 cjs
96 1.1 cjs void
97 1.6 drochner mopPrintOneline(FILE *fd, const u_char *pkt, int trans)
98 1.1 cjs {
99 1.4 lukem int idx = 0;
100 1.6 drochner const u_char *dst, *src;
101 1.6 drochner u_char code;
102 1.1 cjs u_short proto;
103 1.1 cjs int len;
104 1.1 cjs
105 1.1 cjs trans = mopGetTrans(pkt, trans);
106 1.4 lukem mopGetHeader(pkt, &idx, &dst, &src, &proto, &len, trans);
107 1.4 lukem code = mopGetChar(pkt, &idx);
108 1.1 cjs
109 1.1 cjs switch (proto) {
110 1.1 cjs case MOP_K_PROTO_DL:
111 1.1 cjs (void)fprintf(fd, "MOP DL ");
112 1.1 cjs break;
113 1.1 cjs case MOP_K_PROTO_RC:
114 1.1 cjs (void)fprintf(fd, "MOP RC ");
115 1.1 cjs break;
116 1.1 cjs case MOP_K_PROTO_LP:
117 1.1 cjs (void)fprintf(fd, "MOP LP ");
118 1.1 cjs break;
119 1.1 cjs default:
120 1.1 cjs switch((proto % 256)*256 + (proto / 256)) {
121 1.1 cjs case MOP_K_PROTO_DL:
122 1.1 cjs (void)fprintf(fd, "MOP DL ");
123 1.1 cjs proto = MOP_K_PROTO_DL;
124 1.1 cjs break;
125 1.1 cjs case MOP_K_PROTO_RC:
126 1.1 cjs (void)fprintf(fd, "MOP RC ");
127 1.1 cjs proto = MOP_K_PROTO_RC;
128 1.1 cjs break;
129 1.1 cjs case MOP_K_PROTO_LP:
130 1.1 cjs (void)fprintf(fd, "MOP LP ");
131 1.1 cjs proto = MOP_K_PROTO_LP;
132 1.1 cjs break;
133 1.1 cjs default:
134 1.1 cjs (void)fprintf(fd, "MOP ?? ");
135 1.1 cjs break;
136 1.1 cjs }
137 1.1 cjs }
138 1.1 cjs
139 1.1 cjs if (trans == TRANS_8023) {
140 1.1 cjs (void)fprintf(fd, "802.3 ");
141 1.1 cjs }
142 1.1 cjs
143 1.1 cjs mopPrintHWA(fd, src); (void)fprintf(fd," > ");
144 1.1 cjs mopPrintHWA(fd, dst);
145 1.1 cjs if (len < 1600) {
146 1.1 cjs (void)fprintf(fd, " len %4d code %02x ",len,code);
147 1.1 cjs } else {
148 1.1 cjs (void)fprintf(fd, " len %4d code %02x ",
149 1.1 cjs (len % 256)*256 + (len /256), code);
150 1.1 cjs }
151 1.1 cjs
152 1.1 cjs switch (proto) {
153 1.1 cjs case MOP_K_PROTO_DL:
154 1.1 cjs switch (code) {
155 1.1 cjs case MOP_K_CODE_MLT:
156 1.1 cjs (void)fprintf(fd, "MLT ");
157 1.1 cjs break;
158 1.1 cjs case MOP_K_CODE_DCM:
159 1.1 cjs (void)fprintf(fd, "DCM ");
160 1.1 cjs break;
161 1.1 cjs case MOP_K_CODE_MLD:
162 1.1 cjs (void)fprintf(fd, "MLD ");
163 1.1 cjs break;
164 1.1 cjs case MOP_K_CODE_ASV:
165 1.1 cjs (void)fprintf(fd, "ASV ");
166 1.1 cjs break;
167 1.1 cjs case MOP_K_CODE_RMD:
168 1.1 cjs (void)fprintf(fd, "RMD ");
169 1.1 cjs break;
170 1.1 cjs case MOP_K_CODE_RPR:
171 1.1 cjs (void)fprintf(fd, "RPR ");
172 1.1 cjs break;
173 1.1 cjs case MOP_K_CODE_RML:
174 1.1 cjs (void)fprintf(fd, "RML ");
175 1.1 cjs break;
176 1.1 cjs case MOP_K_CODE_RDS:
177 1.1 cjs (void)fprintf(fd, "RDS ");
178 1.1 cjs break;
179 1.1 cjs case MOP_K_CODE_MDD:
180 1.1 cjs (void)fprintf(fd, "MDD ");
181 1.1 cjs break;
182 1.1 cjs case MOP_K_CODE_PLT:
183 1.1 cjs (void)fprintf(fd, "PLT ");
184 1.1 cjs break;
185 1.1 cjs default:
186 1.1 cjs (void)fprintf(fd, "??? ");
187 1.1 cjs break;
188 1.1 cjs }
189 1.1 cjs break;
190 1.1 cjs case MOP_K_PROTO_RC:
191 1.1 cjs switch (code) {
192 1.1 cjs case MOP_K_CODE_RID:
193 1.1 cjs (void)fprintf(fd, "RID ");
194 1.1 cjs break;
195 1.1 cjs case MOP_K_CODE_BOT:
196 1.1 cjs (void)fprintf(fd, "BOT ");
197 1.1 cjs break;
198 1.1 cjs case MOP_K_CODE_SID:
199 1.1 cjs (void)fprintf(fd, "SID ");
200 1.1 cjs break;
201 1.1 cjs case MOP_K_CODE_RQC:
202 1.1 cjs (void)fprintf(fd, "RQC ");
203 1.1 cjs break;
204 1.1 cjs case MOP_K_CODE_CNT:
205 1.1 cjs (void)fprintf(fd, "CNT ");
206 1.1 cjs break;
207 1.1 cjs case MOP_K_CODE_RVC:
208 1.1 cjs (void)fprintf(fd, "RVC ");
209 1.1 cjs break;
210 1.1 cjs case MOP_K_CODE_RLC:
211 1.1 cjs (void)fprintf(fd, "RLC ");
212 1.1 cjs break;
213 1.1 cjs case MOP_K_CODE_CCP:
214 1.1 cjs (void)fprintf(fd, "CCP ");
215 1.1 cjs break;
216 1.1 cjs case MOP_K_CODE_CRA:
217 1.1 cjs (void)fprintf(fd, "CRA ");
218 1.1 cjs break;
219 1.1 cjs default:
220 1.1 cjs (void)fprintf(fd, "??? ");
221 1.1 cjs break;
222 1.1 cjs }
223 1.1 cjs break;
224 1.1 cjs case MOP_K_PROTO_LP:
225 1.1 cjs switch (code) {
226 1.1 cjs case MOP_K_CODE_ALD:
227 1.1 cjs (void)fprintf(fd, "ALD ");
228 1.1 cjs break;
229 1.1 cjs case MOP_K_CODE_PLD:
230 1.1 cjs (void)fprintf(fd, "PLD ");
231 1.1 cjs break;
232 1.1 cjs default:
233 1.1 cjs (void)fprintf(fd, "??? ");
234 1.1 cjs break;
235 1.1 cjs }
236 1.1 cjs break;
237 1.1 cjs default:
238 1.1 cjs (void)fprintf(fd, "??? ");
239 1.1 cjs break;
240 1.1 cjs }
241 1.1 cjs (void)fprintf(fd, "\n");
242 1.1 cjs }
243 1.1 cjs
244 1.1 cjs void
245 1.6 drochner mopPrintHeader(FILE *fd, const u_char *pkt, int trans)
246 1.1 cjs {
247 1.6 drochner const u_char *dst, *src;
248 1.1 cjs u_short proto;
249 1.4 lukem int len, idx = 0;
250 1.1 cjs
251 1.1 cjs trans = mopGetTrans(pkt, trans);
252 1.4 lukem mopGetHeader(pkt, &idx, &dst, &src, &proto, &len, trans);
253 1.1 cjs
254 1.1 cjs (void)fprintf(fd,"\nDst : ");
255 1.1 cjs mopPrintHWA(fd, dst);
256 1.1 cjs if (mopCmpEAddr(dl_mcst,dst) == 0) {
257 1.1 cjs (void)fprintf(fd," MOP Dump/Load Multicast");
258 1.1 cjs };
259 1.1 cjs if (mopCmpEAddr(rc_mcst,dst) == 0) {
260 1.1 cjs (void)fprintf(fd," MOP Remote Console Multicast");
261 1.1 cjs };
262 1.1 cjs (void)fprintf(fd,"\n");
263 1.1 cjs
264 1.1 cjs (void)fprintf(fd,"Src : ");
265 1.1 cjs mopPrintHWA(fd, src);
266 1.1 cjs (void)fprintf(fd,"\n");
267 1.1 cjs (void)fprintf(fd,"Proto : %04x ",proto);
268 1.1 cjs switch (proto) {
269 1.1 cjs case MOP_K_PROTO_DL:
270 1.1 cjs switch (trans) {
271 1.1 cjs case TRANS_8023:
272 1.1 cjs (void)fprintf(fd, "MOP Dump/Load (802.3)\n");
273 1.1 cjs break;
274 1.1 cjs default:
275 1.1 cjs (void)fprintf(fd, "MOP Dump/Load\n");
276 1.1 cjs }
277 1.1 cjs break;
278 1.1 cjs case MOP_K_PROTO_RC:
279 1.1 cjs switch (trans) {
280 1.1 cjs case TRANS_8023:
281 1.1 cjs (void)fprintf(fd, "MOP Remote Console (802.3)\n");
282 1.1 cjs break;
283 1.1 cjs default:
284 1.1 cjs (void)fprintf(fd, "MOP Remote Console\n");
285 1.1 cjs }
286 1.1 cjs break;
287 1.1 cjs case MOP_K_PROTO_LP:
288 1.1 cjs switch (trans) {
289 1.1 cjs case TRANS_8023:
290 1.1 cjs (void)fprintf(fd, "MOP Loopback (802.3)\n");
291 1.1 cjs break;
292 1.1 cjs default:
293 1.1 cjs (void)fprintf(fd, "MOP Loopback\n");
294 1.1 cjs }
295 1.1 cjs break;
296 1.1 cjs default:
297 1.1 cjs (void)fprintf(fd, "\n");
298 1.1 cjs break;
299 1.1 cjs }
300 1.1 cjs
301 1.1 cjs
302 1.1 cjs (void)fprintf(fd,"Length : %04x (%d)\n",len,len);
303 1.1 cjs }
304 1.1 cjs
305 1.1 cjs void
306 1.6 drochner mopPrintMopHeader(FILE *fd, const u_char *pkt, int trans)
307 1.1 cjs {
308 1.6 drochner const u_char *dst, *src;
309 1.1 cjs u_short proto;
310 1.4 lukem int len, idx = 0;
311 1.1 cjs u_char code;
312 1.1 cjs
313 1.1 cjs trans = mopGetTrans(pkt, trans);
314 1.4 lukem mopGetHeader(pkt, &idx, &dst, &src, &proto, &len, trans);
315 1.1 cjs
316 1.4 lukem code = mopGetChar(pkt, &idx);
317 1.1 cjs
318 1.1 cjs (void)fprintf(fd, "Code : %02x ",code);
319 1.1 cjs
320 1.1 cjs switch (proto) {
321 1.1 cjs case MOP_K_PROTO_DL:
322 1.1 cjs switch (code) {
323 1.1 cjs case MOP_K_CODE_MLT:
324 1.1 cjs (void)fprintf(fd,
325 1.1 cjs "Memory Load with transfer address\n");
326 1.1 cjs break;
327 1.1 cjs case MOP_K_CODE_DCM:
328 1.1 cjs (void)fprintf(fd, "Dump Complete\n");
329 1.1 cjs break;
330 1.1 cjs case MOP_K_CODE_MLD:
331 1.1 cjs (void)fprintf(fd, "Memory Load\n");
332 1.1 cjs break;
333 1.1 cjs case MOP_K_CODE_ASV:
334 1.1 cjs (void)fprintf(fd, "Assistance volunteer\n");
335 1.1 cjs break;
336 1.1 cjs case MOP_K_CODE_RMD:
337 1.1 cjs (void)fprintf(fd, "Request memory dump\n");
338 1.1 cjs break;
339 1.1 cjs case MOP_K_CODE_RPR:
340 1.1 cjs (void)fprintf(fd, "Request program\n");
341 1.1 cjs break;
342 1.1 cjs case MOP_K_CODE_RML:
343 1.1 cjs (void)fprintf(fd, "Request memory load\n");
344 1.1 cjs break;
345 1.1 cjs case MOP_K_CODE_RDS:
346 1.1 cjs (void)fprintf(fd, "Request Dump Service\n");
347 1.1 cjs break;
348 1.1 cjs case MOP_K_CODE_MDD:
349 1.1 cjs (void)fprintf(fd, "Memory dump data\n");
350 1.1 cjs break;
351 1.1 cjs case MOP_K_CODE_PLT:
352 1.1 cjs (void)fprintf(fd,
353 1.1 cjs "Parameter load with transfer addres\n");
354 1.1 cjs break;
355 1.1 cjs default:
356 1.1 cjs (void)fprintf(fd, "(unknown)\n");
357 1.1 cjs break;
358 1.1 cjs }
359 1.1 cjs break;
360 1.1 cjs case MOP_K_PROTO_RC:
361 1.1 cjs switch (code) {
362 1.1 cjs case MOP_K_CODE_RID:
363 1.1 cjs (void)fprintf(fd, "Request ID\n");
364 1.1 cjs break;
365 1.1 cjs case MOP_K_CODE_BOT:
366 1.1 cjs (void)fprintf(fd, "Boot\n");
367 1.1 cjs break;
368 1.1 cjs case MOP_K_CODE_SID:
369 1.1 cjs (void)fprintf(fd, "System ID\n");
370 1.1 cjs break;
371 1.1 cjs case MOP_K_CODE_RQC:
372 1.1 cjs (void)fprintf(fd, "Request Counters\n");
373 1.1 cjs break;
374 1.1 cjs case MOP_K_CODE_CNT:
375 1.1 cjs (void)fprintf(fd, "Counters\n");
376 1.1 cjs break;
377 1.1 cjs case MOP_K_CODE_RVC:
378 1.1 cjs (void)fprintf(fd, "Reserve Console\n");
379 1.1 cjs break;
380 1.1 cjs case MOP_K_CODE_RLC:
381 1.1 cjs (void)fprintf(fd, "Release Console\n");
382 1.1 cjs break;
383 1.1 cjs case MOP_K_CODE_CCP:
384 1.1 cjs (void)fprintf(fd, "Console Command and Poll\n");
385 1.1 cjs break;
386 1.1 cjs case MOP_K_CODE_CRA:
387 1.1 cjs (void)fprintf(fd,
388 1.1 cjs "Console Response and Acknnowledge\n");
389 1.1 cjs break;
390 1.1 cjs default:
391 1.1 cjs (void)fprintf(fd, "(unknown)\n");
392 1.1 cjs break;
393 1.1 cjs }
394 1.1 cjs break;
395 1.1 cjs case MOP_K_PROTO_LP:
396 1.1 cjs switch (code) {
397 1.1 cjs case MOP_K_CODE_ALD:
398 1.1 cjs (void)fprintf(fd, "Active loop data\n");
399 1.1 cjs break;
400 1.1 cjs case MOP_K_CODE_PLD:
401 1.1 cjs (void)fprintf(fd, "Passive looped data\n");
402 1.1 cjs break;
403 1.1 cjs default:
404 1.1 cjs (void)fprintf(fd, "(unknown)\n");
405 1.1 cjs break;
406 1.1 cjs }
407 1.1 cjs break;
408 1.1 cjs default:
409 1.1 cjs (void)fprintf(fd, "(unknown)\n");
410 1.1 cjs break;
411 1.1 cjs }
412 1.1 cjs }
413 1.1 cjs
414 1.1 cjs void
415 1.6 drochner mopPrintDevice(FILE *fd, u_char device)
416 1.1 cjs {
417 1.4 lukem const char *sname, *name;
418 1.1 cjs
419 1.1 cjs sname = nmaGetShort((int) device);
420 1.1 cjs name = nmaGetDevice((int) device);
421 1.1 cjs
422 1.1 cjs (void)fprintf(fd, "%s '%s'",sname,name);
423 1.1 cjs }
424 1.1 cjs
425 1.1 cjs void
426 1.6 drochner mopPrintTime(FILE *fd, const u_char *ap)
427 1.1 cjs {
428 1.1 cjs (void)fprintf(fd,
429 1.1 cjs "%04d-%02d-%02d %02d:%02d:%02d.%02d %d:%02d",
430 1.1 cjs ap[0]*100 + ap[1],
431 1.1 cjs ap[2],ap[3],ap[4],ap[5],ap[6],ap[7],ap[8],ap[9]);
432 1.1 cjs }
433 1.1 cjs
434 1.1 cjs void
435 1.6 drochner mopPrintInfo(FILE *fd, const u_char *pkt, int *idx,
436 1.6 drochner u_short moplen, u_char mopcode, int trans)
437 1.1 cjs {
438 1.1 cjs u_short itype,tmps;
439 1.1 cjs u_char ilen ,tmpc,device;
440 1.6 drochner u_char uc1,uc2,uc3;
441 1.6 drochner const u_char *ucp;
442 1.1 cjs int i;
443 1.1 cjs
444 1.1 cjs device = 0;
445 1.1 cjs
446 1.1 cjs switch(trans) {
447 1.1 cjs case TRANS_ETHER:
448 1.1 cjs moplen = moplen + 16;
449 1.1 cjs break;
450 1.1 cjs case TRANS_8023:
451 1.1 cjs moplen = moplen + 14;
452 1.1 cjs break;
453 1.1 cjs }
454 1.1 cjs
455 1.4 lukem itype = mopGetShort(pkt,idx);
456 1.1 cjs
457 1.4 lukem while (*idx < (int)(moplen + 2)) {
458 1.4 lukem ilen = mopGetChar(pkt,idx);
459 1.1 cjs switch (itype) {
460 1.1 cjs case 0:
461 1.4 lukem tmpc = mopGetChar(pkt,idx);
462 1.4 lukem *idx = *idx + tmpc;
463 1.1 cjs break;
464 1.1 cjs case MOP_K_INFO_VER:
465 1.4 lukem uc1 = mopGetChar(pkt,idx);
466 1.4 lukem uc2 = mopGetChar(pkt,idx);
467 1.4 lukem uc3 = mopGetChar(pkt,idx);
468 1.1 cjs (void)fprintf(fd,"Maint Version: %d.%d.%d\n",
469 1.1 cjs uc1,uc2,uc3);
470 1.1 cjs break;
471 1.1 cjs case MOP_K_INFO_MFCT:
472 1.4 lukem tmps = mopGetShort(pkt,idx);
473 1.1 cjs (void)fprintf(fd,"Maint Funcion: %04x ( ",tmps);
474 1.1 cjs if (tmps & 1) (void)fprintf(fd, "Loop ");
475 1.1 cjs if (tmps & 2) (void)fprintf(fd, "Dump ");
476 1.1 cjs if (tmps & 4) (void)fprintf(fd, "Pldr ");
477 1.1 cjs if (tmps & 8) (void)fprintf(fd, "MLdr ");
478 1.1 cjs if (tmps & 16) (void)fprintf(fd, "Boot ");
479 1.1 cjs if (tmps & 32) (void)fprintf(fd, "CC ");
480 1.1 cjs if (tmps & 64) (void)fprintf(fd, "DLC ");
481 1.1 cjs if (tmps & 128) (void)fprintf(fd, "CCR ");
482 1.1 cjs (void)fprintf(fd, ")\n");
483 1.1 cjs break;
484 1.1 cjs case MOP_K_INFO_CNU:
485 1.4 lukem ucp = pkt + *idx; *idx = *idx + 6;
486 1.1 cjs (void)fprintf(fd,"Console User : ");
487 1.1 cjs mopPrintHWA(fd, ucp);
488 1.1 cjs (void)fprintf(fd, "\n");
489 1.1 cjs break;
490 1.1 cjs case MOP_K_INFO_RTM:
491 1.4 lukem tmps = mopGetShort(pkt,idx);
492 1.1 cjs (void)fprintf(fd,"Reserv Timer : %04x (%d)\n",
493 1.1 cjs tmps,tmps);
494 1.1 cjs break;
495 1.1 cjs case MOP_K_INFO_CSZ:
496 1.4 lukem tmps = mopGetShort(pkt,idx);
497 1.1 cjs (void)fprintf(fd,"Cons Cmd Size: %04x (%d)\n",
498 1.1 cjs tmps,tmps);
499 1.1 cjs break;
500 1.1 cjs case MOP_K_INFO_RSZ:
501 1.4 lukem tmps = mopGetShort(pkt,idx);
502 1.1 cjs (void)fprintf(fd,"Cons Res Size: %04x (%d)\n",
503 1.1 cjs tmps,tmps);
504 1.1 cjs break;
505 1.1 cjs case MOP_K_INFO_HWA:
506 1.4 lukem ucp = pkt + *idx; *idx = *idx + 6;
507 1.1 cjs (void)fprintf(fd,"Hardware Addr: ");
508 1.1 cjs mopPrintHWA(fd, ucp);
509 1.1 cjs (void)fprintf(fd, "\n");
510 1.1 cjs break;
511 1.1 cjs case MOP_K_INFO_TIME:
512 1.4 lukem ucp = pkt + *idx; *idx = *idx + 10;
513 1.1 cjs (void)fprintf(fd,"System Time: ");
514 1.1 cjs mopPrintTime(fd, ucp);
515 1.1 cjs (void)fprintf(fd,"\n");
516 1.1 cjs break;
517 1.1 cjs case MOP_K_INFO_SOFD:
518 1.4 lukem device = mopGetChar(pkt,idx);
519 1.1 cjs (void)fprintf(fd,"Comm Device : %02x ",device);
520 1.1 cjs mopPrintDevice(fd, device);
521 1.1 cjs (void)fprintf(fd, "\n");
522 1.1 cjs break;
523 1.1 cjs case MOP_K_INFO_SFID:
524 1.4 lukem tmpc = mopGetChar(pkt,idx);
525 1.1 cjs (void)fprintf(fd,"Software ID : %02x ",tmpc);
526 1.7 joerg if (tmpc == 0) {
527 1.1 cjs (void)fprintf(fd,"No software id");
528 1.1 cjs }
529 1.7 joerg if (tmpc == 254) {
530 1.1 cjs (void)fprintf(fd,"Maintenance system");
531 1.1 cjs tmpc = 0;
532 1.1 cjs }
533 1.7 joerg if (tmpc == 255) {
534 1.1 cjs (void)fprintf(fd,"Standard operating system");
535 1.1 cjs tmpc = 0;
536 1.1 cjs }
537 1.7 joerg if (tmpc > 0) {
538 1.1 cjs (void)fprintf(fd,"'");
539 1.1 cjs for (i = 0; i < ((int) tmpc); i++) {
540 1.1 cjs (void)fprintf(fd,"%c",
541 1.4 lukem mopGetChar(pkt,idx));
542 1.1 cjs }
543 1.1 cjs (void)fprintf(fd,"'");
544 1.1 cjs }
545 1.1 cjs (void)fprintf(fd,"\n");
546 1.1 cjs break;
547 1.1 cjs case MOP_K_INFO_PRTY:
548 1.4 lukem tmpc = mopGetChar(pkt,idx);
549 1.1 cjs (void)fprintf(fd,"System Proc : %02x ",tmpc);
550 1.1 cjs switch (tmpc) {
551 1.1 cjs case MOP_K_PRTY_11:
552 1.1 cjs (void)fprintf(fd, "PDP-11\n");
553 1.1 cjs break;
554 1.1 cjs case MOP_K_PRTY_CMSV:
555 1.1 cjs (void)fprintf(fd,
556 1.1 cjs "Communication Server\n");
557 1.1 cjs break;
558 1.1 cjs case MOP_K_PRTY_PRO:
559 1.1 cjs (void)fprintf(fd, "Professional\n");
560 1.1 cjs break;
561 1.1 cjs case MOP_K_PRTY_SCO:
562 1.1 cjs (void)fprintf(fd, "Scorpio\n");
563 1.1 cjs break;
564 1.1 cjs case MOP_K_PRTY_AMB:
565 1.1 cjs (void)fprintf(fd, "Amber\n");
566 1.1 cjs break;
567 1.1 cjs case MOP_K_PRTY_BRI:
568 1.1 cjs (void)fprintf(fd, "XLII Bridge\n");
569 1.1 cjs break;
570 1.1 cjs default:
571 1.1 cjs (void)fprintf(fd, "Unknown\n");
572 1.1 cjs break;
573 1.1 cjs };
574 1.1 cjs break;
575 1.1 cjs case MOP_K_INFO_DLTY:
576 1.4 lukem tmpc = mopGetChar(pkt,idx);
577 1.1 cjs (void)fprintf(fd,"Data Link Typ: %02x ",tmpc);
578 1.1 cjs switch (tmpc) {
579 1.1 cjs case MOP_K_DLTY_NI:
580 1.1 cjs (void)fprintf(fd, "Ethernet\n");
581 1.1 cjs break;
582 1.1 cjs case MOP_K_DLTY_DDCMP:
583 1.1 cjs (void)fprintf(fd, "DDCMP\n");
584 1.1 cjs break;
585 1.1 cjs case MOP_K_DLTY_LAPB:
586 1.1 cjs (void)fprintf(fd, "LAPB (X.25)\n");
587 1.1 cjs break;
588 1.1 cjs default:
589 1.1 cjs (void)fprintf(fd, "Unknown\n");
590 1.1 cjs break;
591 1.1 cjs };
592 1.1 cjs break;
593 1.1 cjs case MOP_K_INFO_DLBSZ:
594 1.4 lukem tmps = mopGetShort(pkt,idx);
595 1.1 cjs (void)fprintf(fd,"DL Buff Size : %04x (%d)\n",
596 1.1 cjs tmps,tmps);
597 1.1 cjs break;
598 1.1 cjs default:
599 1.1 cjs if (((device = NMA_C_SOFD_LCS) || /* DECserver 100 */
600 1.1 cjs (device = NMA_C_SOFD_DS2) || /* DECserver 200 */
601 1.1 cjs (device = NMA_C_SOFD_DP2) || /* DECserver 250 */
602 1.1 cjs (device = NMA_C_SOFD_DS3)) && /* DECserver 300 */
603 1.1 cjs ((itype > 101) && (itype < 107)))
604 1.1 cjs {
605 1.1 cjs switch (itype) {
606 1.1 cjs case 102:
607 1.4 lukem ucp = pkt + *idx;
608 1.4 lukem *idx = *idx + ilen;
609 1.1 cjs (void)fprintf(fd,
610 1.1 cjs "ROM Sftwr Ver: %02x '",
611 1.1 cjs ilen);
612 1.1 cjs for (i = 0; i < ilen; i++) {
613 1.1 cjs (void)fprintf(fd,"%c",ucp[i]);
614 1.1 cjs }
615 1.1 cjs (void)fprintf(fd, "'\n");
616 1.1 cjs break;
617 1.1 cjs case 103:
618 1.4 lukem ucp = pkt + *idx;
619 1.4 lukem *idx = *idx + ilen;
620 1.1 cjs (void)fprintf(fd,
621 1.1 cjs "Software Ver : %02x '",
622 1.1 cjs ilen);
623 1.1 cjs for (i = 0; i < ilen; i++) {
624 1.1 cjs (void)fprintf(fd, "%c",ucp[i]);
625 1.1 cjs }
626 1.1 cjs (void)fprintf(fd, "'\n");
627 1.1 cjs break;
628 1.1 cjs case 104:
629 1.4 lukem tmps = mopGetShort(pkt,idx);
630 1.1 cjs (void)fprintf(fd,
631 1.1 cjs "DECnet Addr : %d.%d (%d)\n",
632 1.1 cjs tmps / 1024,
633 1.1 cjs tmps % 1024,
634 1.1 cjs tmps);
635 1.1 cjs break;
636 1.1 cjs case 105:
637 1.4 lukem ucp = pkt + *idx;
638 1.4 lukem *idx = *idx + ilen;
639 1.1 cjs (void)fprintf(fd,
640 1.1 cjs "Node Name : %02x '",
641 1.1 cjs ilen);
642 1.1 cjs for (i = 0; i < ilen; i++) {
643 1.1 cjs (void)fprintf(fd, "%c",ucp[i]);
644 1.1 cjs }
645 1.1 cjs (void)fprintf(fd, "'\n");
646 1.1 cjs break;
647 1.1 cjs case 106:
648 1.4 lukem ucp = pkt + *idx;
649 1.4 lukem *idx = *idx + ilen;
650 1.1 cjs (void)fprintf(fd,
651 1.1 cjs "Node Ident : %02x '",
652 1.1 cjs ilen);
653 1.1 cjs for (i = 0; i < ilen; i++) {
654 1.1 cjs (void)fprintf(fd, "%c",ucp[i]);
655 1.1 cjs }
656 1.1 cjs (void)fprintf(fd, "'\n");
657 1.1 cjs break;
658 1.1 cjs };
659 1.1 cjs } else {
660 1.4 lukem ucp = pkt + *idx; *idx = *idx + ilen;
661 1.1 cjs (void)fprintf(fd, "Info Type : %04x (%d)\n",
662 1.1 cjs itype,
663 1.1 cjs itype);
664 1.1 cjs (void)fprintf(fd, "Info Data : %02x ",
665 1.1 cjs ilen);
666 1.1 cjs for (i = 0; i < ilen; i++) {
667 1.1 cjs if ((i % 16) == 0) {
668 1.1 cjs if ((i / 16) == 0) {
669 1.1 cjs } else {
670 1.1 cjs (void)fprintf(fd,
671 1.1 cjs "\n ");
672 1.1 cjs };
673 1.1 cjs };
674 1.1 cjs (void)fprintf(fd, "%02x ",ucp[i]);
675 1.1 cjs }
676 1.1 cjs (void)fprintf(fd, "\n");
677 1.1 cjs };
678 1.1 cjs }
679 1.4 lukem itype = mopGetShort(pkt,idx);
680 1.1 cjs }
681 1.1 cjs }
682 1.1 cjs
683