Skip to content
  • Mikko Rapeli's avatar
    uapi glibc compat: fix compile errors when glibc net/if.h included before linux/if.h · 4a91cb61
    Mikko Rapeli authored
    glibc's net/if.h contains copies of definitions from linux/if.h and these
    conflict and cause build failures if both files are included by application
    source code. Changes in uapi headers, which fixed header file dependencies to
    include linux/if.h when it was needed, e.g. commit 1ffad83d
    
    , made the
    net/if.h and linux/if.h incompatibilities visible as build failures for
    userspace applications like iproute2 and xtables-addons.
    
    This patch fixes compile errors when glibc net/if.h is included before
    linux/if.h:
    
    ./linux/if.h:99:21: error: redeclaration of enumerator ‘IFF_NOARP’
    ./linux/if.h:98:23: error: redeclaration of enumerator ‘IFF_RUNNING’
    ./linux/if.h:97:26: error: redeclaration of enumerator ‘IFF_NOTRAILERS’
    ./linux/if.h:96:27: error: redeclaration of enumerator ‘IFF_POINTOPOINT’
    ./linux/if.h:95:24: error: redeclaration of enumerator ‘IFF_LOOPBACK’
    ./linux/if.h:94:21: error: redeclaration of enumerator ‘IFF_DEBUG’
    ./linux/if.h:93:25: error: redeclaration of enumerator ‘IFF_BROADCAST’
    ./linux/if.h:92:19: error: redeclaration of enumerator ‘IFF_UP’
    ./linux/if.h:252:8: error: redefinition of ‘struct ifconf’
    ./linux/if.h:203:8: error: redefinition of ‘struct ifreq’
    ./linux/if.h:169:8: error: redefinition of ‘struct ifmap’
    ./linux/if.h:107:23: error: redeclaration of enumerator ‘IFF_DYNAMIC’
    ./linux/if.h:106:25: error: redeclaration of enumerator ‘IFF_AUTOMEDIA’
    ./linux/if.h:105:23: error: redeclaration of enumerator ‘IFF_PORTSEL’
    ./linux/if.h:104:25: error: redeclaration of enumerator ‘IFF_MULTICAST’
    ./linux/if.h:103:21: error: redeclaration of enumerator ‘IFF_SLAVE’
    ./linux/if.h:102:22: error: redeclaration of enumerator ‘IFF_MASTER’
    ./linux/if.h:101:24: error: redeclaration of enumerator ‘IFF_ALLMULTI’
    ./linux/if.h:100:23: error: redeclaration of enumerator ‘IFF_PROMISC’
    
    The cases where linux/if.h is included before net/if.h need a similar fix in
    the glibc side, or the order of include files can be changed userspace
    code as a workaround.
    
    This change was tested in x86 userspace on Debian unstable with
    scripts/headers_compile_test.sh:
    
    $ make headers_install && \
      cd usr/include && ../../scripts/headers_compile_test.sh -l -k
    ...
    cc -Wall -c -nostdinc -I /usr/lib/gcc/i586-linux-gnu/5/include -I /usr/lib/gcc/i586-linux-gnu/5/include-fixed -I . -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.2uX2zH -I /home/mcfrisk/src/linux-2.6/usr/headers_compile_test_include.2uX2zH/i586-linux-gnu -o /dev/null ./linux/if.h_libc_before_kernel.h
    PASSED libc before kernel test: ./linux/if.h
    
    Reported-by: default avatarJan Engelhardt <jengelh@inai.de>
    Reported-by: default avatarJosh Boyer <jwboyer@fedoraproject.org>
    Reported-by: default avatarStephen Hemminger <shemming@brocade.com>
    Reported-by: default avatarWaldemar Brodkorb <mail@waldemar-brodkorb.de>
    Cc: Gabriel Laskar <gabriel@lse.epita.fr>
    Signed-off-by: default avatarMikko Rapeli <mikko.rapeli@iki.fi>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4a91cb61