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