Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Apr 2004 13:29:30 +0300
From:      Ruslan Ermilov <ru@freebsd.org>
To:        Luigi Rizzo <rizzo@icir.org>
Cc:        net@freebsd.org
Subject:   Re: multiple definitions of ROUNDUP macro
Message-ID:  <20040413102930.GJ35262@ip.net.ua>
In-Reply-To: <20040413014720.A57543@xorpc.icir.org>
References:  <20040413014720.A57543@xorpc.icir.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--r4QXMf6/kyF/FvJJ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Apr 13, 2004 at 01:47:20AM -0700, Luigi Rizzo wrote:
> The ROUNDUP macro, used to account for the space occupied by a sockaddr  =
=20
> when passed through a routing socket, is defined in a zillion places:
>=20
> 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) | (size=
of(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) | (siz=
eof(lonsrc/sys/net/rtsock.c:#define ROUNDUP(a) \
>=20
You forgot ifconfig(8) and route(8), my favourite reference utils,
when it comes to routing.  ;)

> A similar macro, ADVANCE, has similar problems.
> This is confusing at best, and a likely source of trouble.
>=20
> 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.
>=20
Yes, please!  I wanted to do it long ago, but couldn't come up
with good names for them.

> BTW, i notice that the rounding is to multiples of "sizeof(long)",
> and i wonder if this is intentional, especially on 64-bit
> architectures.
>=20
It would probably be OK to round-up to an int, but it's too late
to change it now -- many off-tree tools that work with routing
sockets would break on machines with sizeof(int) !=3D sizeof(long).


Cheers,
--=20
Ruslan Ermilov
ru@FreeBSD.org
FreeBSD committer

--r4QXMf6/kyF/FvJJ
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)

iD8DBQFAe8EKUkv4P6juNwoRAtyUAJ4v3BmVGmctlk7sk5w0UeIXRTl2DwCfTRnd
Xz/PRVq67FZz1FR+BwKwg1Y=
=4uxg
-----END PGP SIGNATURE-----

--r4QXMf6/kyF/FvJJ--



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