On 1 June 2016 at 19:23, Daniele Di Proietto <diproiet...@vmware.com> wrote:
> linux/in.h (from linux uapi headers) carries many of the same
> definitions as netinet/in.h (from glibc).
>
> If linux/in.h is included after netinet/in.h, conflicts are avoided in
> two ways:
>
> 1) linux/libc-compat.h (included by linux/in.h) detects the include
>    guard of netinet/in.h and defines some macros (e.g.
>    __UAPI_DEF_IN_IPPROTO) to 0.  linux/in.h avoids exporting the same
>    enums if those macros are 0.
>
> 2) The two files are allowed to redefine the same macros as long as the
>    values are the same.
>
> Our include/sparse/netinet/in.h creates problems, because:
>
> 1) It uses a custom include guard
> 2) It uses dummy values for some macros.
>
> This commit changes include/sparse/netinet/in.h to use the same include
> guard as glibc netinet/in.h, and to use the same values for some macros.
>
> I think this problem is present with linux headers after
> a263653ed798("netfilter: don't pull include/linux/netfilter.h from netns
> headers") which cause our lib/netlink-conntrack.c to include linux/in.h
> after netinet/in.h.
>
> sample output from sparse:
>
> /usr/include/linux/in.h:29:9: warning: preprocessor token IPPROTO_IP
> redefined
> ../include/sparse/netinet/in.h:60:9: this was the original definition
> /usr/include/linux/in.h:31:9: warning: preprocessor token IPPROTO_ICMP
> redefined
> ../include/sparse/netinet/in.h:63:9: this was the original definition
> [...]
> /usr/include/linux/in.h:28:3: error: bad enum definition
> /usr/include/linux/in.h:28:3: error: Expected } at end of specifier
> /usr/include/linux/in.h:28:3: error: got 0
> /usr/include/linux/in.h:84:16: error: redefinition of struct in_addr
>
> Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com>

I was noticing these issues too, thanks for fixing them.

Tested-by: Joe Stringer <j...@ovn.org>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to