add -static and -nostatic flags, amend mike's changes for route get
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Wed, 21 Aug 1991 01:09:45 +0000 (17:09 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Wed, 21 Aug 1991 01:09:45 +0000 (17:09 -0800)
SCCS-vsn: sbin/route/route.c 5.40

usr/src/sbin/route/route.c

index 0f90f80..dce7cf2 100644 (file)
@@ -12,7 +12,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)route.c    5.39 (Berkeley) %G%";
+static char sccsid[] = "@(#)route.c    5.40 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -272,14 +272,17 @@ routename(sa)
                else
                        domain[0] = 0;
        }
                else
                        domain[0] = 0;
        }
-       switch (sa->sa_family) {
+
+       if (sa->sa_len == 0)
+               strcpy(line, "default");
+       else switch (sa->sa_family) {
 
        case AF_INET:
            {   struct in_addr in;
                in = ((struct sockaddr_in *)sa)->sin_addr;
 
                cp = 0;
 
        case AF_INET:
            {   struct in_addr in;
                in = ((struct sockaddr_in *)sa)->sin_addr;
 
                cp = 0;
-               if (in.s_addr == INADDR_ANY)
+               if (in.s_addr == INADDR_ANY || sa->sa_len < 4)
                        cp = "default";
                if (cp == 0 && !nflag) {
                        hp = gethostbyaddr((char *)&in, sizeof (struct in_addr),
                        cp = "default";
                if (cp == 0 && !nflag) {
                        hp = gethostbyaddr((char *)&in, sizeof (struct in_addr),
@@ -452,7 +455,7 @@ newroute(argc, argv)
        register char **argv;
 {
        char *cmd, *dest = "", *gateway = "", *err;
        register char **argv;
 {
        char *cmd, *dest = "", *gateway = "", *err;
-       int ishost = 0, ret, attempts, oerrno, flags = 0;
+       int ishost = 0, ret, attempts, oerrno, flags = RTF_STATIC;
        int key;
        struct hostent *hp = 0;
 
        int key;
        struct hostent *hp = 0;
 
@@ -492,6 +495,8 @@ newroute(argc, argv)
                        case K_IFACE:
                        case K_INTERFACE:
                                iflag++;
                        case K_IFACE:
                        case K_INTERFACE:
                                iflag++;
+                       case K_NOSTATIC:
+                               flags &= ~RTF_STATIC;
                                break;
                        case K_LOCK:
                                locking = 1;
                                break;
                        case K_LOCK:
                                locking = 1;
@@ -517,6 +522,9 @@ newroute(argc, argv)
                        case K_XRESOLVE:
                                flags |= RTF_XRESOLVE;
                                break;
                        case K_XRESOLVE:
                                flags |= RTF_XRESOLVE;
                                break;
+                       case K_STATIC:
+                               flags |= RTF_STATIC;
+                               break;
                        case K_IFA:
                                argc--;
                                (void) getaddr(RTA_IFA, *++argv, 0);
                        case K_IFA:
                                argc--;
                                (void) getaddr(RTA_IFA, *++argv, 0);
@@ -958,14 +966,20 @@ rtmsg(cmd, flags)
 
 mask_addr()
 {
 
 mask_addr()
 {
-       register char *cp1, *cp2;
-       int olen;
+       int olen = so_mask.sa.sa_len;
+       register char *cp1 = olen + (char *)&so_mask, *cp2;
 
 
+       for (so_mask.sa.sa_len = 0; cp1 > (char *)&so_mask; )
+               if (*--cp1 != 0) {
+                       so_mask.sa.sa_len = 1 + cp1 - (char *)&so_mask;
+                       break;
+               }
        if ((rtm_addrs & RTA_DST) == 0)
                return;
        switch (so_dst.sa.sa_family) {
        case AF_NS:
        case AF_INET:
        if ((rtm_addrs & RTA_DST) == 0)
                return;
        switch (so_dst.sa.sa_family) {
        case AF_NS:
        case AF_INET:
+       case AF_CCITT:
        case 0:
                return;
        case AF_ISO:
        case 0:
                return;
        case AF_ISO:
@@ -1004,7 +1018,7 @@ char *msgtypes[] = {
 char metricnames[] =
 "\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount\1mtu";
 char routeflags[] = 
 char metricnames[] =
 "\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount\1mtu";
 char routeflags[] = 
-"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT\011CLONING\012XRESOLVE\013LLINFO\017PROTO2\020PROTO1";
+"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT\011CLONING\012XRESOLVE\013LLINFO\014STATIC\017PROTO2\020PROTO1";
 
 
 void
 
 
 void