Received: with ECARTIS (v1.0.0; list netdev); Sat, 22 Feb 2003 01:18:26 -0800 (PST) Received: from netcore.fi (netcore.fi [193.94.160.1]) by oss.sgi.com (8.12.5/8.12.5) with SMTP id h1M9Hn3v002541 for ; Sat, 22 Feb 2003 01:17:51 -0800 Received: from localhost (pekkas@localhost) by netcore.fi (8.11.6/8.11.6) with ESMTP id h1M9QAT29165; Sat, 22 Feb 2003 11:26:11 +0200 Date: Sat, 22 Feb 2003 11:26:10 +0200 (EET) From: Pekka Savola To: Bruce Allan cc: "David S. Miller" , , , Subject: Re: [PATCH] subset of RFC2553 In-Reply-To: <1045847170.3104.7.camel@w-bwa1.beaverton.ibm.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 1767 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: pekkas@netcore.fi Precedence: bulk X-list: netdev Btw, FYI, RFC2553bis has been accepted for publication for Informational RFC some time ago. I think these definitions are the same there, though. It's available at: http://www.ietf.org/internet-drafts/draft-ietf-ipngwg-rfc2553bis-10.txt (there are a few minor editorial nits which will probably be fixed prior to publication.) On 21 Feb 2003, Bruce Allan wrote: > Below is the rework of the original patch sent out last week with a > version of sockaddr_storage that I hope is acceptable. It applies > against 2.5.59. > > Thanks again, > Bruce. > > diff -Naur linux-2.5.59/include/linux/in6.h linux-2.5.59-RFC2553/include/linux/in6.h > --- linux-2.5.59/include/linux/in6.h 2003-02-12 14:05:59.000000000 -0800 > +++ linux-2.5.59-RFC2553/include/linux/in6.h 2003-02-12 10:09:23.000000000 -0800 > @@ -40,6 +40,15 @@ > #define s6_addr32 in6_u.u6_addr32 > }; > > +/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553 > + * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined > + * in network byte order, not in host byte order as are the IPv4 equivalents > + */ > +extern const struct in6_addr in6addr_any; > +#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } > +extern const struct in6_addr in6addr_loopback; > +#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } > + > struct sockaddr_in6 { > unsigned short int sin6_family; /* AF_INET6 */ > __u16 sin6_port; /* Transport layer port # */ > diff -Naur linux-2.5.59/include/linux/socket.h linux-2.5.59-RFC2553/include/linux/socket.h > --- linux-2.5.59/include/linux/socket.h 2003-02-12 14:05:59.000000000 -0800 > +++ linux-2.5.59-RFC2553/include/linux/socket.h 2003-02-20 15:08:44.000000000 -0800 > @@ -25,6 +25,21 @@ > }; > > /* > + * Desired design of maximum size and alignment (see RFC2553) > + */ > +#define _SS_MAXSIZE 128 /* Implementation specific max size */ > +#define _SS_ALIGNSIZE (__alignof__ (struct sockaddr *)) > + /* Implementation specific desired alignment */ > + > +struct sockaddr_storage { > + sa_family_t ss_family; /* address family */ > + /* Following field(s) are implementation specific */ > + char __data[_SS_MAXSIZE - sizeof(sa_family_t)]; > + /* space to achieve desired size, */ > + /* _SS_MAXSIZE value minus size of ss_family */ > +} __attribute__ ((aligned(_SS_ALIGNSIZE))); /* force desired alignment */ > + > +/* > * As we do 4.4BSD message passing we use a 4.4BSD message passing > * system, not 4.3. Thus msg_accrights(len) are now missing. They > * belong in an obscure libc emulation or the bin. > diff -Naur linux-2.5.59/include/net/sctp/structs.h linux-2.5.59-RFC2553/include/net/sctp/structs.h > --- linux-2.5.59/include/net/sctp/structs.h 2003-02-12 14:05:59.000000000 -0800 > +++ linux-2.5.59-RFC2553/include/net/sctp/structs.h 2003-02-12 08:35:07.000000000 -0800 > @@ -61,38 +61,6 @@ > #include /* We need tq_struct. */ > #include /* We need sctp* header structs. */ > > -/* > - * This is (almost) a direct quote from RFC 2553. > - */ > - > -/* > - * Desired design of maximum size and alignment > - */ > -#define _SS_MAXSIZE 128 /* Implementation specific max size */ > -#define _SS_ALIGNSIZE (sizeof (__s64)) > - /* Implementation specific desired alignment */ > -/* > - * Definitions used for sockaddr_storage structure paddings design. > - */ > -#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (sa_family_t)) > -#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (sa_family_t)+ \ > - _SS_PAD1SIZE + _SS_ALIGNSIZE)) > - > -struct sockaddr_storage { > - sa_family_t __ss_family; /* address family */ > - /* Following fields are implementation specific */ > - char __ss_pad1[_SS_PAD1SIZE]; > - /* 6 byte pad, to make implementation */ > - /* specific pad up to alignment field that */ > - /* follows explicit in the data structure */ > - __s64 __ss_align; /* field to force desired structure */ > - /* storage alignment */ > - char __ss_pad2[_SS_PAD2SIZE]; > - /* 112 byte pad to achieve desired size, */ > - /* _SS_MAXSIZE value minus size of ss_family */ > - /* __ss_pad1, __ss_align fields is 112 */ > -}; > - > /* A convenience structure for handling sockaddr structures. > * We should wean ourselves off this. > */ > diff -Naur linux-2.5.59/net/ipv6/addrconf.c linux-2.5.59-RFC2553/net/ipv6/addrconf.c > --- linux-2.5.59/net/ipv6/addrconf.c 2003-02-12 14:05:59.000000000 -0800 > +++ linux-2.5.59-RFC2553/net/ipv6/addrconf.c 2003-02-12 13:55:03.000000000 -0800 > @@ -136,6 +136,10 @@ > MAX_RTR_SOLICITATION_DELAY, /* rtr solicit delay */ > }; > > +/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ > +const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; > +const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; > + > int ipv6_addr_type(struct in6_addr *addr) > { > u32 st; > > -- Pekka Savola "You each name yourselves king, yet the Netcore Oy kingdom bleeds." Systems. Networks. Security. -- George R.R. Martin: A Clash of Kings