Messages in this thread |  | | Date | Thu, 17 Jan 2013 23:13:56 -0500 | Subject | Re: Redefinition of struct in6_addr in <netinet/in.h> and <linux/in6.h> | From | "Carlos O'Donell" <> |
| |
On 01/16/2013 10:22 PM, YOSHIFUJI Hideaki wrote: > Carlos O'Donell wrote: >> diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h >> index f79c372..a2b16a5 100644 >> --- a/include/uapi/linux/in6.h >> +++ b/include/uapi/linux/in6.h >> @@ -23,6 +23,13 @@ >> >> #include <linux/types.h> >> >> +/* If a glibc-based userspace has already included in.h, then we will not >> + * define in6_addr (nor the defines), sockaddr_in6, or ipv6_mreq. The >> + * ABI used by the kernel and by glibc match exactly. Neither the kernel >> + * nor glibc should break this ABI without coordination. >> + */ >> +#ifndef _NETINET_IN_H >> + >> /* >> * IPv6 address structure >> */ > > This should be > #if !defined(__GLIBC__) || !defined(_NETINET_IN_H)
Correct. If it's non-glibc we want these defines to be used even if a non-glibc defined _NETINET_IN_H.
>> @@ -30,12 +37,20 @@ >> struct in6_addr { >> union { >> __u8 u6_addr8[16]; >> +#if !defined(__GLIBC__) \ >> + || (defined(__GLIBC__) && (defined(__USE_MISC) || defined(__USE_GNU))) \ >> + || defined(__KERNEL__) >> __be16 u6_addr16[8]; >> __be32 u6_addr32[4]; >> +#endif >> } in6_u; >> +#if !defined(__GLIBC__) \ >> + || (defined(__GLIBC__) && (defined(__USE_MISC) || defined(__USE_GNU))) \ >> + || defined(__KERNEL__) >> #define s6_addr in6_u.u6_addr8 >> #define s6_addr16 in6_u.u6_addr16 >> #define s6_addr32 in6_u.u6_addr32 >> +#endif >> }; > > 2nd "if" be after s6_addr?
Correct. We want to unconditinally define s6_addr in this case.
I've fixed both of those cases in the next version of the patch. Thanks.
Cheers, Carlos.
|  |