diff --git a/configure.ac b/configure.ac index a155790f45..d3219ceddd 100644 --- a/configure.ac +++ b/configure.ac @@ -997,7 +997,17 @@ if test "$with_linux" = "yes"; then if test "$with_qemu" = "yes" || test "$with_lxc" = "yes" ; then AC_CHECK_HEADERS([linux/param.h linux/sockios.h linux/if_bridge.h linux/if_tun.h],, [AC_MSG_ERROR([You must install kernel-headers in order to compile libvirt with QEMU or LXC support])], - [[#include + [[/* The kernel folks broke their headers when used with particular + * glibc versions; although the structs are ABI compatible, the + * C type system doesn't like struct redefinitions. We work around + * the problem here in the same manner as in virnetdevbridge.c. */ + #include + #define in6_addr in6_addr_ + #define sockaddr_in6 sockaddr_in6_ + #define ipv6_mreq ipv6_mreq_ + #define in6addr_any in6addr_any_ + #define in6addr_loopback in6addr_loopback_ + #include ]]) fi fi diff --git a/src/util/virnetdevbridge.c b/src/util/virnetdevbridge.c index 5d52e2385b..e4daa27ccb 100644 --- a/src/util/virnetdevbridge.c +++ b/src/util/virnetdevbridge.c @@ -46,11 +46,15 @@ # define in6_addr in6_addr_ # define sockaddr_in6 sockaddr_in6_ # define ipv6_mreq ipv6_mreq_ +# define in6addr_any in6addr_any_ +# define in6addr_loopback in6addr_loopback_ # include # include /* SYSFS_BRIDGE_ATTR */ # undef in6_addr # undef sockaddr_in6 # undef ipv6_mreq +# undef in6addr_any +# undef in6addr_loopback # define JIFFIES_TO_MS(j) (((j)*1000)/HZ) # define MS_TO_JIFFIES(ms) (((ms)*HZ)/1000)