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);

Reply via email to