You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
4.6 KiB

From afc450807c5e83c5312e9f88dd6911fe3b00f42e Mon Sep 17 00:00:00 2001
From: Quentin Armitage <quentin@armitage.org.uk>
Date: Mon, 23 Apr 2018 16:29:05 +0100
Subject: [PATCH] Fix namespace collision with musl if_ether.h
Using musl libc headers there is a namespace collision between
netinet/if_ether.h and linux/if_ether.h. This commit incorporates
a workaround.
Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
---
configure | 30 ++++++++++++++++++++++++++++++
configure.ac | 19 +++++++++++++++++++
keepalived/include/vrrp_arp.h | 4 ++++
keepalived/include/vrrp_vmac.h | 4 ++++
lib/config.h.in | 4 ++++
5 files changed, 61 insertions(+)
diff --git a/configure b/configure
index 0ba4b3b4..28f97e23 100755
--- a/configure
+++ b/configure
@@ -9165,6 +9165,36 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CPPFLAGS="$SAV_CPPFLAGS"
+# Including <linux/if_ether.h> and <netinet/if_ether.h> can cause a namespace collision (musl libc).
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linux/if_ether.h and netinet/if_ether.h namespace collision" >&5
+$as_echo_n "checking for linux/if_ether.h and netinet/if_ether.h namespace collision... " >&6; }
+SAV_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $kernelinc"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <linux/if_ether.h>
+ #include <netinet/if_ether.h>
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define _HAVE_NETINET_LINUX_IF_ETHER_H_COLLISION_ 1 " >>confdefs.h
+
+ BUILD_OPTIONS="$BUILD_OPTIONS NETINET_LINUX_IF_ETHER_H_COLLISION"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CPPFLAGS="$SAV_CPPFLAGS"
+
# Linux 4.5 to 4.5.4 has <libiptc/libiptc.h> indirectly including <net/if.h>
# and <linux/if.h> which causes a namespace collision.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiptc/libiptc.h linux/if.h and net/if.h namespace collision" >&5
diff --git a/configure.ac b/configure.ac
index 01a93be3..01dad94d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -930,6 +930,25 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
])
CPPFLAGS="$SAV_CPPFLAGS"
+dnl ----[Check if have linux/if_ether.h and netinet/if_ether.h namespace collision]----
+# Including <linux/if_ether.h> and <netinet/if_ether.h> can cause a namespace collision (musl libc).
+AC_MSG_CHECKING([for linux/if_ether.h and netinet/if_ether.h namespace collision])
+SAV_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $kernelinc"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ #include <linux/if_ether.h>
+ #include <netinet/if_ether.h>
+ ]])],
+ [
+ AC_MSG_RESULT([no])
+ ],
+ [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([_HAVE_NETINET_LINUX_IF_ETHER_H_COLLISION_], [ 1 ], [Define to 1 if have linux/if_ether.h followed by netinet/if_ether.h namespace collision])
+ add_build_opt([NETINET_LINUX_IF_ETHER_H_COLLISION])
+ ])
+CPPFLAGS="$SAV_CPPFLAGS"
+
# Linux 4.5 to 4.5.4 has <libiptc/libiptc.h> indirectly including <net/if.h>
# and <linux/if.h> which causes a namespace collision.
AC_MSG_CHECKING([for libiptc/libiptc.h linux/if.h and net/if.h namespace collision])
diff --git a/keepalived/include/vrrp_arp.h b/keepalived/include/vrrp_arp.h
index 07ee7765..3414d391 100644
--- a/keepalived/include/vrrp_arp.h
+++ b/keepalived/include/vrrp_arp.h
@@ -25,6 +25,10 @@
/* system includes */
#include <netinet/in.h>
+#ifdef _HAVE_NET_LINUX_IF_H_COLLISION_
+#define _NETINET_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
#include <net/ethernet.h>
#include <net/if_arp.h>
#include <linux/if_infiniband.h>
diff --git a/keepalived/include/vrrp_vmac.h b/keepalived/include/vrrp_vmac.h
index b6b107a4..da14b240 100644
--- a/keepalived/include/vrrp_vmac.h
+++ b/keepalived/include/vrrp_vmac.h
@@ -29,6 +29,10 @@
#include <arpa/inet.h>
#include <string.h>
#include <syslog.h>
+#ifdef _HAVE_NET_LINUX_IF_H_COLLISION_
+#define _NETINET_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
#include <net/ethernet.h>
/* local includes */
diff --git a/lib/config.h.in b/lib/config.h.in
index 7be4054a..21a7715a 100644
--- a/lib/config.h.in
+++ b/lib/config.h.in
@@ -580,6 +580,10 @@
/* Define to 1 if using libnl-3 */
#undef _HAVE_LIBNL3_
+/* Define to 1 if have linux/if_ether.h followed by netinet/if_ether.h
+ namespace collision */
+#undef _HAVE_NETINET_LINUX_IF_ETHER_H_COLLISION_
+
/* Define to 1 if have linux/if.h followed by net/if.h namespace collision */
#undef _HAVE_NET_LINUX_IF_H_COLLISION_
--
2.11.0