print xns interfaces and route reasonably
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sun, 16 Jun 1985 13:24:37 +0000 (05:24 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sun, 16 Jun 1985 13:24:37 +0000 (05:24 -0800)
SCCS-vsn: usr.bin/netstat/route.c 5.2
SCCS-vsn: usr.bin/netstat/if.c 5.2

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

index 7905f09..fada881 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)if.c       5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)if.c       5.2 (Berkeley) %G%";
 #endif not lint
 
 #include <sys/types.h>
 #endif not lint
 
 #include <sys/types.h>
@@ -14,6 +14,7 @@ static char sccsid[] = "@(#)if.c      5.1 (Berkeley) %G%";
 #include <net/if.h>
 #include <netinet/in.h>
 #include <netinet/in_var.h>
 #include <net/if.h>
 #include <netinet/in.h>
 #include <netinet/in_var.h>
+#include <netns/ns.h>
 
 #include <stdio.h>
 
 
 #include <stdio.h>
 
@@ -110,6 +111,15 @@ intpr(interval, ifnetaddr)
 #endif
                                printf("%-12.12s ", routename(sin->sin_addr));
                                break;
 #endif
                                printf("%-12.12s ", routename(sin->sin_addr));
                                break;
+                       case AF_NS:
+                               {
+                               struct sockaddr_ns *sns =
+                               (struct sockaddr_ns *)&ifaddr.in.ia_addr;
+                               printf("ns:%-8d ",
+                                       ntohl(ns_netof(sns->sns_addr)));
+                               printf("%-12s ",ns_phost(sns));
+                               }
+                               break;
                        default:
                                printf("af%2d: ", ifaddr.ifa.ifa_addr.sa_family);
                                for (cp = (char *)&ifaddr.ifa.ifa_addr +
                        default:
                                printf("af%2d: ", ifaddr.ifa.ifa_addr.sa_family);
                                for (cp = (char *)&ifaddr.ifa.ifa_addr +
index f947e90..9584f2c 100644 (file)
@@ -5,8 +5,8 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)route.c    5.1 (Berkeley) %G%";
-#endif not lint
+static char sccsid[] = "@(#)route.c    5.2 85/06/15";
+#endif
 
 #include <sys/types.h>
 #include <sys/socket.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -16,11 +16,13 @@ static char sccsid[] = "@(#)route.c 5.1 (Berkeley) %G%";
 #include <net/route.h>
 #include <netinet/in.h>
 
 #include <net/route.h>
 #include <netinet/in.h>
 
+#include <netns/ns.h>
+
 #include <netdb.h>
 
 extern int kmem;
 extern int nflag;
 #include <netdb.h>
 
 extern int kmem;
 extern int nflag;
-extern char *routename(), *netname();
+extern char *routename(), *netname(), *ns_print();
 
 /*
  * Definitions for showing gateway flags.
 
 /*
  * Definitions for showing gateway flags.
@@ -79,10 +81,14 @@ again:
                m = routehash[i];
                while (m) {
                        struct sockaddr_in *sin;
                m = routehash[i];
                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 *);
+                       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" :
                        sin = (struct sockaddr_in *)&rt->rt_dst;
                        printf("%-15.15s ",
                            (sin->sin_addr.s_addr == 0) ? "default" :
@@ -90,6 +96,18 @@ again:
                            routename(sin->sin_addr) : netname(sin->sin_addr, 0));
                        sin = (struct sockaddr_in *)&rt->rt_gateway;
                        printf("%-15.15s ", routename(sin->sin_addr));
                            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]);
+                       }
                        for (flags = name, p = bits; p->b_mask; p++)
                                if (p->b_mask & rt->rt_flags)
                                        *flags++ = p->b_val;
                        for (flags = name, p = bits; p->b_mask; p++)
                                if (p->b_mask & rt->rt_flags)
                                        *flags++ = p->b_val;
@@ -220,3 +238,48 @@ 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_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;
+
+       sprintf(p,"%ld:", net);
+
+       while(*p)p++; /* find end of string */
+
+       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 */
+               printf(":%d",port);
+       }
+       return(mybuf);
+}
+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);
+}