On Tue, Sep 14, 2010 at 09:10:46PM -0500, Doug Goldstein wrote:
On Tue, Sep 14, 2010 at 7:57 PM, Osier <jyang(a)redhat.com>
wrote:
>
>>
>> % man ipv6
>>
>> Address Format
>> struct sockaddr_in6 {
>> sa_family_t sin6_family; /* AF_INET6 */
>> in_port_t sin6_port; /* port number */
>> uint32_t sin6_flowinfo; /* IPv6 flow information
>> */
>> struct in6_addr sin6_addr; /* IPv6 address */
>> uint32_t sin6_scope_id; /* Scope ID (new in 2.4)
>> */
>> };
>>
>> struct in6_addr {
>> unsigned char s6_addr[16]; /* IPv6 address */
>> };
>>
Yep. Just checked my OS X 10.6 box.. Here's the relevant snippet.
/*
* IPv6 address
*/
struct in6_addr {
union {
__uint8_t __u6_addr8[16];
__uint16_t __u6_addr16[8];
__uint32_t __u6_addr32[4];
} __u6_addr; /* 128-bit IP6 address */
};
#define s6_addr __u6_addr.__u6_addr8
The best thing about standards, is that there are so many to choose
from :-) I just found this in cups/http.h ....
/*
* Oh, the wonderful world of IPv6 compatibility. Apparently some
* implementations expose the (more logical) 32-bit address parts
* to everyone, while others only expose it to kernel code... To
* make supporting IPv6 even easier, each vendor chose different
* core structure and union names, so the same defines or code
* can't be used on all platforms.
*
* The following will likely need tweaking on new platforms that
* support IPv6 - the "s6_addr32" define maps to the 32-bit integer
* array in the in6_addr union, which is named differently on various
* platforms.
*/
#if defined(AF_INET6) && !defined(s6_addr32)
# if defined(__sun)
# define s6_addr32 _S6_un._S6_u32
# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||
defined(__APPLE__)
# define s6_addr32 __u6_addr.__u6_addr32
# elif defined(__osf__)
# define s6_addr32 s6_un.sa6_laddr
# elif defined(WIN32)
/*
* Windows only defines byte and 16-bit word members of the union and
* requires special casing of all raw address code...
*/
# define s6_addr32 error_need_win32_specific_code
# endif /* __sun */
#endif /* AF_INET6 && !s6_addr32 */
I wonder if gnulib can help/save us here at all ?
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://deltacloud.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|