format changes and other fixes
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Thu, 24 Apr 1986 03:20:27 +0000 (19:20 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Thu, 24 Apr 1986 03:20:27 +0000 (19:20 -0800)
SCCS-vsn: usr.bin/netstat/if.c 5.3
SCCS-vsn: usr.bin/netstat/route.c 5.6

usr/src/usr.bin/netstat/if.c
usr/src/usr.bin/netstat/route.c

index fada881..6be7805 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)if.c       5.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)if.c       5.3 (Berkeley) %G%";
 #endif not lint
 
 #include <sys/types.h>
 #endif not lint
 
 #include <sys/types.h>
@@ -115,8 +115,13 @@ intpr(interval, ifnetaddr)
                                {
                                struct sockaddr_ns *sns =
                                (struct sockaddr_ns *)&ifaddr.in.ia_addr;
                                {
                                struct sockaddr_ns *sns =
                                (struct sockaddr_ns *)&ifaddr.in.ia_addr;
-                               printf("ns:%-8d ",
-                                       ntohl(ns_netof(sns->sns_addr)));
+                               long net;
+                               char host[8];
+                               *(union ns_net *) &net = sns->sns_addr.x_net;
+                               sprintf(host, "%lxH", ntohl(net));
+                               upHex(host);
+                               printf("ns:%-8s ", host);
+
                                printf("%-12s ",ns_phost(sns));
                                }
                                break;
                                printf("%-12s ",ns_phost(sns));
                                }
                                break;
index c7455da..1438dc0 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)route.c    5.5 85/09/18";
+static char sccsid[] = "@(#)route.c    5.6 (Berkeley) 86/04/23";
 #endif
 
 #include <sys/param.h>
 #endif
 
 #include <sys/param.h>
@@ -72,7 +72,7 @@ routepr(hostaddr, netaddr, hashsizeaddr)
        klseek(kmem, hostaddr, 0);
        read(kmem, routehash, hashsize*sizeof (struct mbuf *));
        printf("Routing tables\n");
        klseek(kmem, hostaddr, 0);
        read(kmem, routehash, hashsize*sizeof (struct mbuf *));
        printf("Routing tables\n");
-       printf("%-15.15s %-15.15s %-8.8s %-6.6s %-10.10s %s\n",
+       printf("%-20.20s %-20.20s %-8.8s %-6.6s %-10.10s %s\n",
                "Destination", "Gateway",
                "Flags", "Refcnt", "Use", "Interface");
 again:
                "Destination", "Gateway",
                "Flags", "Refcnt", "Use", "Interface");
 again:
@@ -83,31 +83,44 @@ again:
                while (m) {
                        struct sockaddr_in *sin;
                        struct sockaddr_ns *sns;
                while (m) {
                        struct sockaddr_in *sin;
                        struct sockaddr_ns *sns;
-                       long *l = (long *)&rt->rt_dst;
 
                        klseek(kmem, m, 0);
                        read(kmem, &mb, sizeof (mb));
                        rt = mtod(&mb, struct rtentry *);
 
                        klseek(kmem, m, 0);
                        read(kmem, &mb, sizeof (mb));
                        rt = mtod(&mb, struct rtentry *);
+                       if ((unsigned)rt < (unsigned)&mb ||
+                           (unsigned)rt >= (unsigned)(&mb + 1)) {
+                               printf("???\n");
+                               return;
+                       }
+
                        switch(rt->rt_dst.sa_family) {
                        switch(rt->rt_dst.sa_family) {
-               case AF_INET:
-                       sin = (struct sockaddr_in *)&rt->rt_dst;
-                       printf("%-15.15s ",
-                           (sin->sin_addr.s_addr == 0) ? "default" :
-                           (rt->rt_flags & RTF_HOST) ?
-                           routename(sin->sin_addr) : netname(sin->sin_addr, 0));
-                       sin = (struct sockaddr_in *)&rt->rt_gateway;
-                       printf("%-15.15s ", routename(sin->sin_addr));
-                       break;
-               case AF_NS:
-                       printf("%-15s ",
-                           ns_print((struct sockaddr_ns *)&rt->rt_dst));
-                       printf("%-15s ",
-                           ns_print((struct sockaddr_ns *)&rt->rt_gateway));
-                       break;
-               default:
-                       printf("%8.8x %8.8x %8.8x %8.8x",*l, l[1], l[2], l[3]);
-                       l = (long *)&rt->rt_gateway;
-                       printf("%8.8x %8.8x %8.8x %8.8x",*l, l[1], l[2], l[3]);
+                       case AF_INET:
+                               sin = (struct sockaddr_in *)&rt->rt_dst;
+                               printf("%-20.20s ",
+                                   (sin->sin_addr.s_addr == 0) ? "default" :
+                                   (rt->rt_flags & RTF_HOST) ?
+                                   routename(sin->sin_addr) :
+                                       netname(sin->sin_addr, 0));
+                               sin = (struct sockaddr_in *)&rt->rt_gateway;
+                               printf("%-20.20s ", routename(sin->sin_addr));
+                               break;
+                       case AF_NS:
+                               printf("%-20s ",
+                                   ns_print((struct sockaddr_ns *)&rt->rt_dst));
+                               printf("%-20s ",
+                                   ns_print((struct sockaddr_ns *)&rt->rt_gateway));
+                               break;
+                       default:
+                               {
+                               u_short *s = (u_short *)rt->rt_dst.sa_data;
+                               printf("(%d)%x %x %x %x %x %x %x ",
+                                   rt->rt_dst.sa_family,
+                                   s[0], s[1], s[2], s[3], s[4], s[5], s[6]);
+                               s = (u_short *)rt->rt_gateway.sa_data;
+                               printf("(%d)%x %x %x %x %x %x %x ",
+                                   rt->rt_gateway.sa_family,
+                                   s[0], s[1], s[2], s[3], s[4], s[5], s[6]);
+                               }
                        }
                        for (flags = name, p = bits; p->b_mask; p++)
                                if (p->b_mask & rt->rt_flags)
                        }
                        for (flags = name, p = bits; p->b_mask; p++)
                                if (p->b_mask & rt->rt_flags)
@@ -264,48 +277,77 @@ rt_stats(off)
        printf("\t%d use%s of a wildcard route\n",
                rtstat.rts_wildcard, plural(rtstat.rts_wildcard));
 }
        printf("\t%d use%s of a wildcard route\n",
                rtstat.rts_wildcard, plural(rtstat.rts_wildcard));
 }
+short ns_nullh[] = {0,0,0};
 short ns_bh[] = {-1,-1,-1};
 
 char *
 ns_print(sns)
 struct sockaddr_ns *sns;
 {
 short ns_bh[] = {-1,-1,-1};
 
 char *
 ns_print(sns)
 struct sockaddr_ns *sns;
 {
-       register struct ns_addr *dna = &sns->sns_addr;
-       long net = ntohl(ns_netof(*dna));
-       static char mybuf[50];
-       register char *p = mybuf;
-       short port = dna->x_port;
+       struct ns_addr work;
+       union { union ns_net net_e; u_long long_e; } net;
+       u_short port;
+       static char mybuf[50], cport[10], chost[25];
+       char *host = "";
+       register char *p; register u_char *q; u_char *q_lim;
 
 
-       sprintf(p,"%lx:", net);
-
-       while(*p)p++; /* find end of string */
+       work = sns->sns_addr;
+       port = ntohs(work.x_port);
+       work.x_port = 0;
+       net.net_e  = work.x_net;
+       if (ns_nullhost(work) && net.long_e == 0) {
+               if (port ) {
+                       sprintf(mybuf, "*.%xH", port);
+                       upHex(mybuf);
+               } else
+                       sprintf(mybuf, "*.*");
+               return (mybuf);
+       }
 
 
-       if (strncmp(ns_bh,dna->x_host.c_host,6)==0)
-               sprintf(p,"any");
-       else
-               sprintf(p,"%x.%x.%x.%x.%x.%x",
-                           dna->x_host.c_host[0], dna->x_host.c_host[1],
-                           dna->x_host.c_host[2], dna->x_host.c_host[3],
-                           dna->x_host.c_host[4], dna->x_host.c_host[5]);
-       if (port) {
-       while(*p)p++; /* find end of string */
-               sprintf(p,":%x",ntohs(port));
+       if (bcmp(ns_bh, work.x_host.c_host, 6) == 0) { 
+               host = "any";
+       } else if (bcmp(ns_nullh, work.x_host.c_host, 6) == 0) {
+               host = "*";
+       } else {
+               q = work.x_host.c_host;
+               sprintf(chost, "%02x%02x%02x%02x%02x%02xH",
+                       q[0], q[1], q[2], q[3], q[4], q[5]);
+               for (p = chost; *p == '0' && p < chost + 12; p++);
+               host = p;
        }
        }
+       if (port)
+               sprintf(cport, ".%xH", htons(port));
+       else
+               *cport = 0;
+
+       sprintf(mybuf,"%xH.%s%s", ntohl(net.long_e), host, cport);
+       upHex(mybuf);
        return(mybuf);
 }
        return(mybuf);
 }
+
 char *
 ns_phost(sns)
 struct sockaddr_ns *sns;
 {
 char *
 ns_phost(sns)
 struct sockaddr_ns *sns;
 {
-       register struct ns_addr *dna = &sns->sns_addr;
-       long net = ntohl(ns_netof(*dna));
-       static char mybuf[50];
-       register char *p = mybuf;
-       if (strncmp(ns_bh,dna->x_host.c_host,6)==0)
-               sprintf(p,"any");
-       else
-               sprintf(p,"%x,%x,%x",
-                          dna->x_host.s_host[0], dna->x_host.s_host[1],
-                           dna->x_host.s_host[2]);
-       return(mybuf);
+       struct sockaddr_ns work;
+       static union ns_net ns_zeronet;
+       char *p;
+       
+       work = *sns;
+       work.sns_addr.x_port = 0;
+       work.sns_addr.x_net = ns_zeronet;
+
+       p = ns_print(&work);
+       if (strncmp("0H.", p, 3) == 0) p += 3;
+       return(p);
+}
+upHex(p0)
+char *p0;
+{
+       register char *p = p0;
+       for (; *p; p++) switch (*p) {
+
+       case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+               *p += ('A' - 'a');
+       }
 }
 }