This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]


The use of __USE_KERNEL_IPV6_DEFS with ifndef is bad
practice per:
This change moves it to use 'if' and always define the

Please note that this is not the only problem with this
code. I have a series of fixes after this one to resolve
breakage with this code and add regression tests for it
via compile-only source testing (to be discussed in another

Unfortunately __USE_KERNEL_XATTR_DEFS, the only other
synchronized header macro, is set by the kernel and not
glibc, and uses 'define', so we can't fix that yet.


2016-06-02  Carlos O'Donell  <>

	* sysdeps/unix/sysv/linux/bits/in.h [defined _UAPI_LINUX_IN6_H ||
	defined _UAPI_IPV6_H]: Define __USE_KERNEL_IPV6_DEFS to 1.
	[!(defined _UAPI_LINUX_IN6_H || defined _UAPI_IPV6_H)]: Define
	* inet/netinet/in.h: Use '#if !__USE_KERNEL_IPV6_DEFS'.
	Update comment.

diff --git a/inet/netinet/in.h b/inet/netinet/in.h
index 6122ab5..c801593 100644
--- a/inet/netinet/in.h
+++ b/inet/netinet/in.h
@@ -92,10 +92,10 @@ enum
-/* If __USE_KERNEL_IPV6_DEFS is defined then the user has included the kernel
+/* If __USE_KERNEL_IPV6_DEFS is 1 then the user has included the kernel
    network headers first and we should use those ABI-identical definitions
-   instead of our own.  */
+   instead of our own, otherwise 0.  */
     IPPROTO_HOPOPTS = 0,   /* IPv6 Hop-by-Hop options.  */
@@ -206,7 +206,7 @@ enum
 #define INADDR_ALLRTRS_GROUP    ((in_addr_t) 0xe0000002) /* */
 #define INADDR_MAX_LOCAL_GROUP  ((in_addr_t) 0xe00000ff) /* */
 /* IPv6 address */
 struct in6_addr
@@ -249,7 +249,7 @@ struct sockaddr_in
 			   sizeof (struct in_addr)];
 /* Ditto, for IPv6.  */
 struct sockaddr_in6
@@ -285,7 +285,7 @@ struct ip_mreq_source
 /* Likewise, for IPv6.  */
 struct ipv6_mreq
@@ -532,7 +532,7 @@ extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
 #ifdef __USE_GNU
 struct cmsghdr;			/* Forward declaration.  */
 /* IPv6 packet information.  */
 struct in6_pktinfo
diff --git a/sysdeps/unix/sysv/linux/bits/in.h b/sysdeps/unix/sysv/linux/bits/in.h
index d75c07b..9bdadf3 100644
--- a/sysdeps/unix/sysv/linux/bits/in.h
+++ b/sysdeps/unix/sysv/linux/bits/in.h
@@ -30,7 +30,9 @@
 /* This is not quite the same API since the kernel always defines s6_addr16 and
    s6_addr32. This is not a violation of POSIX since POSIX says "at least the
    following member" and that holds true.  */
-# define __USE_KERNEL_IPV6_DEFS
+# define __USE_KERNEL_IPV6_DEFS 1
+# define __USE_KERNEL_IPV6_DEFS 0
 /* Options for use with `getsockopt' and `setsockopt' at the IP level.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]