1.) not all interfaces set ifa_dstaddr; 2.) rn->rn_key set by addroute
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Fri, 30 Nov 1990 07:45:11 +0000 (23:45 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Fri, 30 Nov 1990 07:45:11 +0000 (23:45 -0800)
3.) ROUNDUP should be changed to save space for default routes (otherwise 0 len)
check in before machine directory re-org.

SCCS-vsn: sys/net/route.c 7.18

usr/src/sys/net/route.c

index 26569f3..60a6d4d 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)route.c     7.17 (Berkeley) %G%
+ *     @(#)route.c     7.18 (Berkeley) %G%
  */
 #include "machine/reg.h"
  
  */
 #include "machine/reg.h"
  
@@ -296,7 +296,7 @@ struct sockaddr     *dst, *gateway;
        return (ifa);
 }
 
        return (ifa);
 }
 
-#define ROUNDUP(a) (1 + (((a) - 1) | (sizeof(long) - 1)))
+#define ROUNDUP(a) (a>0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
 
 rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
        int req, flags;
 
 rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
        int req, flags;
@@ -374,7 +374,6 @@ rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
                rt->rt_ifa = ifa;
                rt->rt_ifp = ifa->ifa_ifp;
                rt->rt_flags = RTF_UP | flags;
                rt->rt_ifa = ifa;
                rt->rt_ifp = ifa->ifa_ifp;
                rt->rt_flags = RTF_UP | flags;
-               rn->rn_key = (caddr_t) ndst; /* == rt_dst */
                rt->rt_gateway = (struct sockaddr *)
                                        (rn->rn_key + ROUNDUP(dst->sa_len));
                Bcopy(gateway, rt->rt_gateway, gateway->sa_len);
                rt->rt_gateway = (struct sockaddr *)
                                        (rn->rn_key + ROUNDUP(dst->sa_len));
                Bcopy(gateway, rt->rt_gateway, gateway->sa_len);
@@ -419,6 +418,8 @@ rtinit(ifa, cmd, flags)
        register struct ifaddr *ifa;
        int cmd, flags;
 {
        register struct ifaddr *ifa;
        int cmd, flags;
 {
-       return rtrequest(cmd, ifa->ifa_dstaddr, ifa->ifa_addr,
-                   ifa->ifa_netmask, flags | ifa->ifa_flags, &ifa->ifa_rt);
+       return
+           rtrequest(cmd, flags & RTF_HOST ? ifa->ifa_dstaddr : ifa->ifa_addr,
+                       ifa->ifa_addr, ifa->ifa_netmask,
+                       flags | ifa->ifa_flags, &ifa->ifa_rt);
 }
 }