From owner-freebsd-standards@FreeBSD.ORG Mon Sep 20 04:22:20 2004 Return-Path: Delivered-To: freebsd-standards@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2F71A16A4CE; Mon, 20 Sep 2004 04:22:20 +0000 (GMT) Received: from odin.ac.hmc.edu (Odin.AC.HMC.Edu [134.173.32.75]) by mx1.FreeBSD.org (Postfix) with ESMTP id D5D7F43D39; Mon, 20 Sep 2004 04:22:19 +0000 (GMT) (envelope-from brdavis@odin.ac.hmc.edu) Received: from odin.ac.hmc.edu (localhost.localdomain [127.0.0.1]) by odin.ac.hmc.edu (8.13.0/8.13.0) with ESMTP id i8K4OHI6010640; Sun, 19 Sep 2004 21:24:17 -0700 Received: (from brdavis@localhost) by odin.ac.hmc.edu (8.13.0/8.13.0/Submit) id i8K4OHbu010635; Sun, 19 Sep 2004 21:24:17 -0700 Date: Sun, 19 Sep 2004 21:24:17 -0700 From: Brooks Davis To: Max Laier Message-ID: <20040920042417.GB9460@odin.ac.hmc.edu> References: <200409200250.49518.max@love2party.net> <20040920022852.GA21281@odin.ac.hmc.edu> <200409200539.48073.max@love2party.net> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="GRPZ8SYKNexpdSJ7" Content-Disposition: inline In-Reply-To: <200409200539.48073.max@love2party.net> User-Agent: Mutt/1.4.1i X-Virus-Scanned: by amavisd-new X-Spam-Status: No, hits=0.0 required=8.0 tests=none autolearn=no version=2.63 X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on odin.ac.hmc.edu cc: freebsd-hackers@freebsd.org cc: freebsd-net@freebsd.org cc: freebsd-standards@freebsd.org cc: freebsd-arch@freebsd.org Subject: Re: Global (non _KERNEL) place for sockaddr_union? X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Sep 2004 04:22:20 -0000 --GRPZ8SYKNexpdSJ7 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Sep 20, 2004 at 05:39:38AM +0200, Max Laier wrote: > On Monday 20 September 2004 04:28, Brooks Davis wrote: > > On Mon, Sep 20, 2004 at 02:50:40AM +0200, Max Laier wrote: > > > Hi, > > > > > > http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dkern/71836 is the sympto= m. Now > > > I am looking for a clean solution to it. What is needed is an include > > > file that defines union sockaddr_union in a way that is useable from > > > kernel and userland. Historically it seems that this union first apea= red > > > in context of ipsec within the kernel. pf has adopted it, but uses it= in > > > the userland as well. I am sure that it can be usefull in a lot of pl= aces > > > that have to deal with/store different address formats. > > > > > > My question now is, what would be a good place to define this? Are th= ere > > > any fromal standarts that might define it already? (Couldn't find > > > anything) Is there anything else that I must consider? > > > > > > At some point I though netinet/in.h might be a good place, but that'd > > > require inclusion of sys/socket.h, which certainly is not a good > > > solution. > > > > > > Opinions? Ideas? > > > > > > > #include > > > > #include > > > > > > > > union sockaddr_union { > > > > struct sockaddr sa; > > > > struct sockaddr_in sin; > > > > struct sockaddr_in6 sin6; > > > > struct sockaddr_storage __su_pad; /* maybe not a bad idea */ > > > > }; > > > > I don't see an elegant solution. Stuffing it off in its own file may > > be the best thing if you're going to use it. Overall, I'd say it's bad > > idea that PF be better off without. It appears to save a few casts, > > but nothing worth the pain of generalizing the declaration. >=20 > First of all, the padding is bogus as sin6 is big enough. Especially sinc= e one=20 > point here is to save space. I was a bit confused there, sorry. Especiall= y=20 > since this is an important point: In pf this union is uses to - for examp= le -=20 > store address information in tables. It allows to store IPv4 and IPv6=20 > addresses in the same table without creating overhead in the memory footp= rint=20 > or having to deal with different objects for every address type. The fewe= r=20 > casts are just an additional benefit. > > Maybe you are right and a new header is the easiest way out. Moving this = out=20 > of under _KERNEL would require all includer of netipsec/keydb.h to includ= e=20 > sys/socket.h and netinet/in.h. As I was saying, I don't have a good idea= =20 > either. The only thing that came to my mind just now is to add a protecti= ng=20 > define and #ifdef around the two places that define it. But I have no ide= a=20 > how clean (in terms of style) such a solution is. If it's primairly for well defined storage, why not remove the sa and put it in netinet/in.h? If you're just looking for the family and length, it doesn't matter if you access it as .sa, .sin, or .sin6. You might have to name it something else which could be problematic for portability, but it might be worth the pain if you could push it back to OpenBSD. -- Brooks -- Brooks --=20 Any statement of the form "X is the one, true Y" is FALSE. PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4 --GRPZ8SYKNexpdSJ7 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQFBTltvXY6L6fI4GtQRApA7AKC4bgZvLAzTVpzVhHVfXEwQd+JWtACgrBrG wdii84flDaNUq1uEym+j+Ms= =P8eR -----END PGP SIGNATURE----- --GRPZ8SYKNexpdSJ7--