Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Apr 2004 01:47:20 -0700
From:      Luigi Rizzo <rizzo@icir.org>
To:        net@freebsd.org
Subject:   multiple definitions of ROUNDUP macro
Message-ID:  <20040413014720.A57543@xorpc.icir.org>

next in thread | raw e-mail | index | archive | help
The ROUNDUP macro, used to account for the space occupied by a sockaddr   
when passed through a routing socket, is defined in a zillion places:

src/usr.sbin/IPXrouted/startup.c:#define ROUNDUP(a) \
src/usr.sbin/arp/arp.c:#define ROUNDUP(a) \
src/usr.sbin/ndp/ndp.c:#define ROUNDUP(a) \
src/usr.sbin/ppp/defs.h:#define ROUNDUP(x) ((x) ? (1 + (((x) - 1) | (sizeof(longsrc/usr.sbin/route6d/route6d.c:#define ROUNDUP(a) \
src/usr.sbin/rwhod/rwhod.c:#define ROUNDUP(a) \
src/sys/net/route.c.orig:#define ROUNDUP(a) (a>0 ? (1 + (((a) - 1) | (sizeof(lonsrc/sys/net/rtsock.c:#define ROUNDUP(a) \

A similar macro, ADVANCE, has similar problems.
This is confusing at best, and a likely source of trouble.

If there are no objections I would like to replace it with a
centralised macro (possibly with a suitable name) which takes
a sockaddr * as argument and returns the rounded-up size of the
object as a result.

BTW, i notice that the rounding is to multiples of "sizeof(long)",
and i wonder if this is intentional, especially on 64-bit
architectures.

	cheers
	luigi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040413014720.A57543>