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