]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ipx.c
Build fat appropriately for Leopard.
[tcpdump] / print-ipx.c
index 83b8330a1f7687c9b585164ca116a931a5808b72..604561c608458d994180fd4930ca7353fc39b566 100644 (file)
  */
 
 #ifndef lint
-static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ipx.c,v 1.22 1999-11-21 09:36:54 fenner Exp $";
+static const char rcsid[] _U_ =
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ipx.c,v 1.42 2005-05-06 08:26:44 guy Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/socket.h>
+#include <tcpdump-stdinc.h>
 
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/ip_var.h>
-#include <netinet/udp.h>
-#include <netinet/udp_var.h>
-#include <netinet/tcp.h>
-
-#ifdef __STDC__
 #include <stdlib.h>
-#endif
 #include <stdio.h>
 #include <string.h>
 
@@ -68,12 +56,15 @@ ipx_print(const u_char *p, u_int length)
 {
        const struct ipxHdr *ipx = (const struct ipxHdr *)p;
 
+       if (!eflag)
+               printf("IPX ");
+
        TCHECK(ipx->srcSkt);
-       (void)printf("%s.%x > ",
+       (void)printf("%s.%04x > ",
                     ipxaddr_string(EXTRACT_32BITS(ipx->srcNet), ipx->srcNode),
                     EXTRACT_16BITS(&ipx->srcSkt));
 
-       (void)printf("%s.%x:",
+       (void)printf("%s.%04x: ",
                     ipxaddr_string(EXTRACT_32BITS(ipx->dstNet), ipx->dstNode),
                     EXTRACT_16BITS(&ipx->dstSkt));
 
@@ -92,7 +83,7 @@ ipxaddr_string(u_int32_t net, const u_char *node)
 {
     static char line[256];
 
-    sprintf(line, "%x.%02x:%02x:%02x:%02x:%02x:%02x",
+    snprintf(line, sizeof(line), "%08x.%02x:%02x:%02x:%02x:%02x:%02x",
            net, node[0], node[1], node[2], node[3], node[4], node[5]);
 
     return line;
@@ -106,7 +97,7 @@ ipx_decode(const struct ipxHdr *ipx, const u_char *datap, u_int length)
     dstSkt = EXTRACT_16BITS(&ipx->dstSkt);
     switch (dstSkt) {
       case IPX_SKT_NCP:
-       (void)printf(" ipx-ncp %d", length);
+       (void)printf("ipx-ncp %d", length);
        break;
       case IPX_SKT_SAP:
        ipx_sap_print((u_short *)datap, length);
@@ -115,13 +106,25 @@ ipx_decode(const struct ipxHdr *ipx, const u_char *datap, u_int length)
        ipx_rip_print((u_short *)datap, length);
        break;
       case IPX_SKT_NETBIOS:
-       (void)printf(" ipx-netbios %d", length);
+       (void)printf("ipx-netbios %d", length);
+#ifdef TCPDUMP_DO_SMB
+       ipx_netbios_print(datap, length);
+#endif
        break;
       case IPX_SKT_DIAGNOSTICS:
-       (void)printf(" ipx-diags %d", length);
+       (void)printf("ipx-diags %d", length);
+       break;
+      case IPX_SKT_NWLINK_DGM:
+       (void)printf("ipx-nwlink-dgm %d", length);
+#ifdef TCPDUMP_DO_SMB
+       ipx_netbios_print(datap, length);
+#endif
+       break;
+      case IPX_SKT_EIGRP:
+       eigrp_print(datap, length);
        break;
       default:
-       (void)printf(" ipx-#%x %d", dstSkt, length);
+       (void)printf("ipx-#%x %d", dstSkt, length);
        break;
     }
 }
@@ -144,12 +147,8 @@ ipx_sap_print(const u_short *ipx, u_int length)
        else
            (void)printf("ipx-sap-nearest-req");
 
-       if (length > 0) {
-           TCHECK(ipx[1]);
-           (void)printf(" %x '", EXTRACT_16BITS(&ipx[0]));
-           fn_print((u_char *)&ipx[1], (u_char *)&ipx[1] + 48);
-           putchar('\'');
-       }
+       TCHECK(ipx[0]);
+       (void)printf(" %s", ipxsap_string(htons(EXTRACT_16BITS(&ipx[0]))));
        break;
 
       case 2:
@@ -160,9 +159,13 @@ ipx_sap_print(const u_short *ipx, u_int length)
            (void)printf("ipx-sap-nearest-resp");
 
        for (i = 0; i < 8 && length > 0; i++) {
-           TCHECK2(ipx[27], 1);
-           (void)printf(" %x '", EXTRACT_16BITS(&ipx[0]));
-           fn_print((u_char *)&ipx[1], (u_char *)&ipx[1] + 48);
+           TCHECK(ipx[0]);
+           (void)printf(" %s '", ipxsap_string(htons(EXTRACT_16BITS(&ipx[0]))));
+           if (fn_printzp((u_char *)&ipx[1], 48, snapend)) {
+               printf("'");
+               goto trunc;
+           }
+           TCHECK2(ipx[25], 10);
            printf("' addr %s",
                ipxaddr_string(EXTRACT_32BITS(&ipx[25]), (u_char *)&ipx[27]));
            ipx += 32;
@@ -170,12 +173,12 @@ ipx_sap_print(const u_short *ipx, u_int length)
        }
        break;
       default:
-           (void)printf("ipx-sap-?%x", command);
+       (void)printf("ipx-sap-?%x", command);
        break;
     }
-       return;
+    return;
 trunc:
-       printf("[|ipx %d]", length);
+    printf("[|ipx %d]", length);
 }
 
 void
@@ -209,10 +212,10 @@ ipx_rip_print(const u_short *ipx, u_int length)
        }
        break;
       default:
-           (void)printf("ipx-rip-?%x", command);
+       (void)printf("ipx-rip-?%x", command);
+       break;
     }
-       return;
+    return;
 trunc:
-       printf("[|ipx %d]", length);
+    printf("[|ipx %d]", length);
 }
-