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