incorporate fix from dkhusema
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sat, 15 Feb 1992 07:00:05 +0000 (23:00 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sat, 15 Feb 1992 07:00:05 +0000 (23:00 -0800)
SCCS-vsn: sbin/route/route.c 5.41

usr/src/sbin/route/route.c

index dce7cf2..800f760 100644 (file)
@@ -12,7 +12,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)route.c    5.40 (Berkeley) %G%";
+static char sccsid[] = "@(#)route.c    5.41 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -70,7 +70,7 @@ struct        in_addr inet_makeaddr();
 char   *routename(), *netname();
 void   flushroutes(), newroute(), monitor(), sockaddr();
 void   print_getmsg(), print_rtmsg(), pmsg_common(), sodump(), bprintf();
 char   *routename(), *netname();
 void   flushroutes(), newroute(), monitor(), sockaddr();
 void   print_getmsg(), print_rtmsg(), pmsg_common(), sodump(), bprintf();
-int    getaddr(), rtmsg();
+int    getaddr(), rtmsg(), x25_makemask();
 extern char *inet_ntoa(), *iso_ntoa(), *link_ntoa();
 
 void
 extern char *inet_ntoa(), *iso_ntoa(), *link_ntoa();
 
 void
@@ -783,7 +783,7 @@ getaddr(which, s, hpp)
 
        case AF_CCITT:
                ccitt_addr(s, &su->sx25);
 
        case AF_CCITT:
                ccitt_addr(s, &su->sx25);
-               return (1);
+               return (which == RTA_DST ? x25_makemask() : 1);
 
        case PF_ROUTE:
                su->sa.sa_len = sizeof(*su);
 
        case PF_ROUTE:
                su->sa.sa_len = sizeof(*su);
@@ -808,9 +808,8 @@ getaddr(which, s, hpp)
                        goto netdone;
                }
        }
                        goto netdone;
                }
        }
-       val = inet_network(s);
-       if (val == -1 && (np = getnetbyname(s)) != NULL) {
-               val = np->n_net;
+       if ((val = inet_network(s)) != -1 ||
+           ((np = getnetbyname(s)) != NULL && (val = np->n_net) != 0)) {
 netdone:
                if (which == RTA_DST)
                        inet_makenetandmask(val, &su->sin);
 netdone:
                if (which == RTA_DST)
                        inet_makenetandmask(val, &su->sin);
@@ -827,6 +826,20 @@ netdone:
        exit(1);
 }
 
        exit(1);
 }
 
+x25_makemask()
+{
+       register char *cp;
+
+       if ((rtm_addrs & RTA_NETMASK) == 0) {
+               rtm_addrs |= RTA_NETMASK;
+               for (cp = (char *)&so_mask.sx25.x25_net;
+                    cp < &so_mask.sx25.x25_opts.op_flags; cp++)
+                       *cp = -1;
+               so_mask.sx25.x25_len = (u_char)&(((sup)0)->sx25.x25_opts);
+       }
+       return 0;
+}
+
 short ns_nullh[] = {0,0,0};
 short ns_bh[] = {-1,-1,-1};
 
 short ns_nullh[] = {0,0,0};
 short ns_bh[] = {-1,-1,-1};