Cong Wang wrote: > (Cc'ing some glibc developers...) > > Hello, > > In glibc source file inet/netinet/in.h and kernel source file > include/uapi/linux/in6.h, both define struct in6_addr, and both are > visible to user applications. Thomas reported a conflict below. > > So, how can we handle this? /me is wondering why we didn't see this > before. > > Thanks. > > On Tue, 2013-01-15 at 12:55 +0200, Thomas Backlund wrote: >> Cong Wang skrev 15.1.2013 12:11: >>> >>> Does the following patch help? >>> >>> $ git diff include/uapi/linux/if_bridge.h >>> diff --git a/include/uapi/linux/if_bridge.h >>> b/include/uapi/linux/if_bridge.h >>> index 5db2975..653db23 100644 >>> --- a/include/uapi/linux/if_bridge.h >>> +++ b/include/uapi/linux/if_bridge.h >>> @@ -14,6 +14,7 @@ >>> #define _UAPI_LINUX_IF_BRIDGE_H >>> >>> #include <linux/types.h> >>> +#include <linux/in6.h> >>> >>> #define SYSFS_BRIDGE_ATTR "bridge" >>> #define SYSFS_BRIDGE_FDB "brforward" >>> >> >> Well, I suggested the same fix in the beginning of the thread >> on netdev and lkml: "if_bridge.h: include in6.h for struct in6_addr use" >> >> as it seemed to fix the libvirt case >> >> but then asked it to be ignored after I tried to build connman, >> and hit this conflict with glibc-2.17: >> >> In file included from /usr/include/arpa/inet.h:22:0, >> from ./include/connman/inet.h:25, >> from src/connman.h:128, >> from src/tethering.c:40: >> /usr/include/netinet/in.h:35:5: error: expected identifier before >> numeric constant >> /usr/include/netinet/in.h:197:8: error: redefinition of 'struct in6_addr' >> In file included from /usr/include/linux/if_bridge.h:17:0, >> from src/tethering.c:38: >> /usr/include/linux/in6.h:30:8: note: originally defined here >> In file included from /usr/include/arpa/inet.h:22:0, >> from ./include/connman/inet.h:25, >> from src/connman.h:128, >> from src/tethering.c:40: >> /usr/include/netinet/in.h:238:8: error: redefinition of 'struct >> sockaddr_in6' >> In file included from /usr/include/linux/if_bridge.h:17:0, >> from src/tethering.c:38: >> /usr/include/linux/in6.h:46:8: note: originally defined here >> In file included from /usr/include/arpa/inet.h:22:0, >> from ./include/connman/inet.h:25, >> from src/connman.h:128, >> from src/tethering.c:40: >> /usr/include/netinet/in.h:274:8: error: redefinition of 'struct ipv6_mreq' >> In file included from /usr/include/linux/if_bridge.h:17:0, >> from src/tethering.c:38: >> /usr/include/linux/in6.h:54:8: note: originally defined here >> make[1]: *** [src/src_connmand-tethering.o] Error 1 >> >> >> So I'm not sure it's the right one...
This is not a new issue. In addition to this, netinet/in.h also conflits with linux/in.h. We might have #if !defined(__GLIBC__) || !defined(_NETINET_IN_H) : #endif around those conflicting definitions in uapi/linux/in{,6}.h. --yoshfuji -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/