summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac15
-rw-r--r--pimd/pim_mroute.h28
2 files changed, 39 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index 174090d3a9..d602354456 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1581,6 +1581,21 @@ FRR_INCLUDES
#endif
])dnl
+AC_CHECK_HEADERS([netinet6/ip6_mroute.h], [], [],[
+ #include <sys/socket.h>
+ #include <sys/param.h>
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ #include <net/route.h>
+])
+
+m4_define([FRR_INCLUDES],
+FRR_INCLUDES
+[#ifdef HAVE_NETINET_IP6_MROUTE_H
+# include <netinet6/ip6_mroute.h>
+#endif
+])dnl
+
AC_MSG_CHECKING([for RFC3678 protocol-independed API])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
diff --git a/pimd/pim_mroute.h b/pimd/pim_mroute.h
index 8706f42206..fd4913ca42 100644
--- a/pimd/pim_mroute.h
+++ b/pimd/pim_mroute.h
@@ -25,8 +25,19 @@
#include <netinet/in.h>
#if defined(HAVE_LINUX_MROUTE_H)
#include <linux/mroute.h>
-#else
-#include "linux/mroute.h"
+#endif
+
+#if defined(HAVE_NETINET_IP_MROUTE_H)
+#include <netinet/ip_mroute.h>
+/*
+ * MRT_TABLE of 155 is needed because it is not defined
+ * on FreeBSD. MRT_TABLE is for vrf's. There is no
+ * equivalent on BSD at this point in time. Let's
+ * just get it compiling
+ */
+#ifndef MRT_TABLE
+#define MRT_TABLE 155
+#endif
#endif
typedef struct vifctl pim_vifctl;
@@ -70,8 +81,17 @@ typedef struct sioc_sg_req pim_sioc_sg_req;
#if defined(HAVE_LINUX_MROUTE6_H)
#include <linux/mroute6.h>
-#else
-#include "linux/mroute6.h"
+#endif
+#if defined(HAVE_NETINET_IP6_MROUTE_H)
+#include <sys/param.h>
+#include <netinet6/ip6_mroute.h>
+
+/*
+ * See the v4 discussion above
+ */
+#ifndef MRT_TABLE
+#define MRT_TABLE 155
+#endif
#endif
#ifndef MRT_INIT