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