Subject: Re: [PATCH net-next 2/4] xfrm: simplify xfrm_address_t use

From: Stephen Hemminger <[email-masked]>
Date: Tue, 7 Apr 2015 09:01:33 -0700

On Sun, 29 Mar 2015 16:59:24 +0200
Jiri Benc <[email-masked]> wrote:

> In many places, the a6 field is typecasted to struct in6_addr. As the
> fields are in union anyway, just add in6_addr type to the union and
> get rid of the typecasting.
> 
> Modifying the uapi header is okay, the union has still the same size.
> 
> Signed-off-by: Jiri Benc <[email-masked]>

This change to the uapi header ends up breaking the iproute2 build
when the headers are used.

gcc -Wall -Wstrict-prototypes  -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wformat=2 -O2 -I../include -DRESOLVE_HOSTNAMES -DLIBDIR=\"/usr/lib\" -DCONFDIR=\"/etc/iproute2\" -D_GNU_SOURCE -DHAVE_SETNS   -c -o xfrm_monitor.o xfrm_monitor.c
In file included from ../include/linux/xfrm.h:4:0,
                 from xfrm_monitor.c:30:
../include/linux/in6.h:131:26: error: expected identifier before numeric constant
 #define IPPROTO_HOPOPTS  0 /* IPv6 hop-by-hop options */
                          ^
In file included from /usr/include/resolv.h:57:0,
                 from ../include/utils.h:6,
                 from xfrm_monitor.c:31:
/usr/include/netinet/in.h:209:8: error: redefinition of ‘struct in6_addr’
 struct in6_addr
        ^
In file included from ../include/linux/xfrm.h:4:0,
                 from xfrm_monitor.c:30:
../include/linux/in6.h:32:8: note: originally defined here
 struct in6_addr {
        ^
In file included from /usr/include/resolv.h:57:0,
                 from ../include/utils.h:6,
                 from xfrm_monitor.c:31:
/usr/include/netinet/in.h:252:8: error: redefinition of ‘struct sockaddr_in6’
 struct sockaddr_in6
        ^
In file included from ../include/linux/xfrm.h:4:0,
                 from xfrm_monitor.c:30:
../include/linux/in6.h:49:8: note: originally defined here
 struct sockaddr_in6 {
        ^
In file included from /usr/include/resolv.h:57:0,
                 from ../include/utils.h:6,
                 from xfrm_monitor.c:31:
/usr/include/netinet/in.h:288:8: error: redefinition of ‘struct ipv6_mreq’
 struct ipv6_mreq
        ^
In file included from ../include/linux/xfrm.h:4:0,
                 from xfrm_monitor.c:30:
../include/linux/in6.h:59:8: note: originally defined here
 struct ipv6_mreq {
        ^
<builtin>: recipe for target 'xfrm_monitor.o' failed
make[1]: *** [xfrm_monitor.o] Error 1
make[1]: Leaving directory '/var/src/iproute2/ip'
Makefile:48: recipe for target 'all' failed