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
*
* %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"
-#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;
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);
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);