Module Name: src Committed By: christos Date: Thu Apr 2 21:02:07 UTC 2009
Modified Files: src/sys/net: route.c route.h rtsock.c src/usr.sbin/arp: arp.c src/usr.sbin/pppd/pppd: sys-bsd.c Log Message: Centralize the ROUNDUP and ADVANCE macro in a header file, give them an RT_ prefix and use them appropriately, instead of making copies. Make pppd use the RT_ROUNDUP macro; fixes proxyarp setting on 64 bit hosts. XXX: All this should be pulled up to 5.0 To generate a diff of this commit: cvs rdiff -u -r1.116 -r1.117 src/sys/net/route.c cvs rdiff -u -r1.72 -r1.73 src/sys/net/route.h cvs rdiff -u -r1.124 -r1.125 src/sys/net/rtsock.c cvs rdiff -u -r1.47 -r1.48 src/usr.sbin/arp/arp.c cvs rdiff -u -r1.58 -r1.59 src/usr.sbin/pppd/pppd/sys-bsd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/route.c diff -u src/sys/net/route.c:1.116 src/sys/net/route.c:1.117 --- src/sys/net/route.c:1.116 Tue Mar 24 12:36:52 2009 +++ src/sys/net/route.c Thu Apr 2 17:02:06 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: route.c,v 1.116 2009/03/24 16:36:52 roy Exp $ */ +/* $NetBSD: route.c,v 1.117 2009/04/02 21:02:06 christos Exp $ */ /*- * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. @@ -93,7 +93,7 @@ #include "opt_route.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.116 2009/03/24 16:36:52 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.117 2009/04/02 21:02:06 christos Exp $"); #include <sys/param.h> #include <sys/sysctl.h> @@ -608,8 +608,6 @@ return ifa; } -#define ROUNDUP(a) (a>0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) - int rtrequest(int req, const struct sockaddr *dst, const struct sockaddr *gateway, const struct sockaddr *netmask, int flags, struct rtentry **ret_nrt) Index: src/sys/net/route.h diff -u src/sys/net/route.h:1.72 src/sys/net/route.h:1.73 --- src/sys/net/route.h:1.72 Sat Jan 10 21:45:54 2009 +++ src/sys/net/route.h Thu Apr 2 17:02:06 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: route.h,v 1.72 2009/01/11 02:45:54 christos Exp $ */ +/* $NetBSD: route.h,v 1.73 2009/04/02 21:02:06 christos Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -257,6 +257,10 @@ #define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */ #define RTAX_MAX 8 /* size of array to allocate */ +#define RT_ROUNDUP(a) \ + ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) +#define RT_ADVANCE(x, n) (x += RT_ROUNDUP((n)->sa_len)) + struct rt_addrinfo { int rti_addrs; const struct sockaddr *rti_info[RTAX_MAX]; Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.124 src/sys/net/rtsock.c:1.125 --- src/sys/net/rtsock.c:1.124 Wed Mar 11 05:26:27 2009 +++ src/sys/net/rtsock.c Thu Apr 2 17:02:06 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.124 2009/03/11 09:26:27 roy Exp $ */ +/* $NetBSD: rtsock.c,v 1.125 2009/04/02 21:02:06 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.124 2009/03/11 09:26:27 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.125 2009/04/02 21:02:06 christos Exp $"); #include "opt_inet.h" #ifdef _KERNEL_OPT @@ -515,10 +515,6 @@ #undef metric } -#define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) -#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len)) - static int rt_xaddrs(u_char rtmtype, const char *cp, const char *cplim, struct rt_addrinfo *rtinfo) @@ -530,7 +526,7 @@ if ((rtinfo->rti_addrs & (1 << i)) == 0) continue; rtinfo->rti_info[i] = sa = (const struct sockaddr *)cp; - ADVANCE(cp, sa); + RT_ADVANCE(cp, sa); } /* @@ -546,7 +542,7 @@ /* Check for bad data length. */ if (cp != cplim) { if (i == RTAX_NETMASK + 1 && sa != NULL && - cp - ROUNDUP(sa->sa_len) + sa->sa_len == cplim) + cp - RT_ROUNDUP(sa->sa_len) + sa->sa_len == cplim) /* * The last sockaddr was info.rti_info[RTAX_NETMASK]. * We accept this for now for the sake of old @@ -626,7 +622,7 @@ if ((sa = rtinfo->rti_info[i]) == NULL) continue; rtinfo->rti_addrs |= (1 << i); - dlen = ROUNDUP(sa->sa_len); + dlen = RT_ROUNDUP(sa->sa_len); m_copyback(m, len, dlen, sa); len += dlen; } @@ -695,7 +691,7 @@ if ((sa = rtinfo->rti_info[i]) == NULL) continue; rtinfo->rti_addrs |= (1 << i); - dlen = ROUNDUP(sa->sa_len); + dlen = RT_ROUNDUP(sa->sa_len); if (cp) { (void)memcpy(cp, sa, (size_t)dlen); cp += dlen; Index: src/usr.sbin/arp/arp.c diff -u src/usr.sbin/arp/arp.c:1.47 src/usr.sbin/arp/arp.c:1.48 --- src/usr.sbin/arp/arp.c:1.47 Mon Jul 21 09:36:57 2008 +++ src/usr.sbin/arp/arp.c Thu Apr 2 17:02:06 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: arp.c,v 1.47 2008/07/21 13:36:57 lukem Exp $ */ +/* $NetBSD: arp.c,v 1.48 2009/04/02 21:02:06 christos Exp $ */ /* * Copyright (c) 1984, 1993 @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)arp.c 8.3 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: arp.c,v 1.47 2008/07/21 13:36:57 lukem Exp $"); +__RCSID("$NetBSD: arp.c,v 1.48 2009/04/02 21:02:06 christos Exp $"); #endif #endif /* not lint */ @@ -50,10 +50,6 @@ * arp - display, set, and delete arp table entries */ -/* Roundup the same way rt_xaddrs does */ -#define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) - #include <sys/param.h> #include <sys/file.h> #include <sys/socket.h> @@ -285,7 +281,7 @@ return (1); } sina = (struct sockaddr_inarp *)(void *)(rtm + 1); - sdl = (struct sockaddr_dl *)(void *)(ROUNDUP(sina->sin_len) + + sdl = (struct sockaddr_dl *)(void *)(RT_ROUNDUP(sina->sin_len) + (char *)(void *)sina); if (sina->sin_addr.s_addr == sin_m.sin_addr.s_addr) { if (is_llinfo(sdl, rtm->rtm_flags)) @@ -379,7 +375,7 @@ return (1); } sina = (struct sockaddr_inarp *)(void *)(rtm + 1); - sdl = (struct sockaddr_dl *)(void *)(ROUNDUP(sina->sin_len) + + sdl = (struct sockaddr_dl *)(void *)(RT_ROUNDUP(sina->sin_len) + (char *)(void *)sina); if (sina->sin_addr.s_addr == sin_m.sin_addr.s_addr && is_llinfo(sdl, rtm->rtm_flags)) @@ -439,7 +435,7 @@ rtm = (struct rt_msghdr *)(void *)next; sina = (struct sockaddr_inarp *)(void *)(rtm + 1); sdl = (struct sockaddr_dl *)(void *) - (ROUNDUP(sina->sin_len) + (char *)(void *)sina); + (RT_ROUNDUP(sina->sin_len) + (char *)(void *)sina); if (addr) { if (addr != sina->sin_addr.s_addr) continue; @@ -471,7 +467,7 @@ (void)printf(" published (proxy only)"); if (rtm->rtm_addrs & RTA_NETMASK) { sina = (struct sockaddr_inarp *)(void *) - (ROUNDUP(sdl->sdl_len) + (char *)(void *)sdl); + (RT_ROUNDUP(sdl->sdl_len) + (char *)(void *)sdl); if (sina->sin_addr.s_addr == 0xffffffff) (void)printf(" published"); if (sina->sin_len != 8) @@ -626,7 +622,7 @@ if (rtm->rtm_addrs & (w)) { \ (void)memcpy(cp, &s, \ (size_t)((struct sockaddr *)(void *)&s)->sa_len); \ - cp += ROUNDUP(((struct sockaddr *)(void *)&s)->sa_len); \ + RT_ADVANCE(cp, ((struct sockaddr *)(void *)&s)); \ } NEXTADDR(RTA_DST, sin_m); Index: src/usr.sbin/pppd/pppd/sys-bsd.c diff -u src/usr.sbin/pppd/pppd/sys-bsd.c:1.58 src/usr.sbin/pppd/pppd/sys-bsd.c:1.59 --- src/usr.sbin/pppd/pppd/sys-bsd.c:1.58 Sat Oct 25 18:12:20 2008 +++ src/usr.sbin/pppd/pppd/sys-bsd.c Thu Apr 2 17:02:06 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sys-bsd.c,v 1.58 2008/10/25 22:12:20 christos Exp $ */ +/* $NetBSD: sys-bsd.c,v 1.59 2009/04/02 21:02:06 christos Exp $ */ /* * sys-bsd.c - System-dependent procedures for setting up @@ -79,7 +79,7 @@ #if 0 #define RCSID "Id: sys-bsd.c,v 1.47 2000/04/13 12:04:23 paulus Exp " #else -__RCSID("$NetBSD: sys-bsd.c,v 1.58 2008/10/25 22:12:20 christos Exp $"); +__RCSID("$NetBSD: sys-bsd.c,v 1.59 2009/04/02 21:02:06 christos Exp $"); #endif #endif @@ -1615,7 +1615,7 @@ arpmsg.dst.sin_other = SIN_PROXY; arpmsg.hdr.rtm_msglen = (char *) &arpmsg.hwa - (char *) &arpmsg - + arpmsg.hwa.sdl_len; + + RT_ROUNDUP(arpmsg.hwa.sdl_len); if (write(routes, &arpmsg, arpmsg.hdr.rtm_msglen) < 0) { error("Couldn't add proxy arp entry: %m"); close(routes);