]> xenbits.xensource.com Git - people/dariof/libvirt.git/commit
build: work around broken kernel headers
authorEric Blake <eblake@redhat.com>
Tue, 23 Jul 2013 23:45:21 +0000 (17:45 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 24 Jul 2013 00:02:42 +0000 (18:02 -0600)
commitd12c281131fbe4d6b88218856013bbeb30704e77
tree5ed48b243f9da212bf234d3b686890aa29d8f383
parentb551d740f162252e07a71a89ee5f88d8f21dad0d
build: work around broken kernel headers

Thanks to a lack of coordination between kernel and glibc folks,
it has been impossible to mix code using <linux/in.h> and
<net/in.h> for some time now (see for example commit c308a9a).
On at least RHEL 6, <linux/if_bridge.h> tries to use the kernel
side, and fails due to our desire to use the glibc side elsewhere:

In file included from /usr/include/linux/if_bridge.h:17,
                 from util/virnetdevbridge.c:42:
/usr/include/linux/in6.h:31: error: redefinition of ‘struct in6_addr’
/usr/include/linux/in6.h:48: error: redefinition of ‘struct sockaddr_in6’
/usr/include/linux/in6.h:56: error: redefinition of ‘struct ipv6_mreq’

Thankfully, the kernel layout of these structs is ABI-compatible,
they only differ in the type system presented to the C compiler.
While there are other versions of kernel headers that avoid the
problem, it is easier to just work around the issue than to expect
all developers to upgrade to working kernel headers.

* src/util/virnetdevbridge.c (includes): Coerce the kernel version
of in.h to not collide with the normal version.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/util/virnetdevbridge.c