• E
    build: work around broken kernel headers · d12c2811
    Eric Blake 提交于
    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 c308a9ae).
    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: NEric Blake <eblake@redhat.com>
    d12c2811
virnetdevbridge.c 17.9 KB