radvd: add a patch to fix build failure on architectures without sysctl()

Modern architectures such as ARC do not provide the sysctl() system
call, since it is deprecated. However, uClibc still installs
<sys/sysctl.h> in such cases, which defeats radvd check for the
availability of sysctl(). This commit adds a patch to radvd which
improves the sysctl() checking.

Fixes:

  http://autobuild.buildroot.org/results/458/4581c4220adeaebbf6761e3b923088d8de8522d5/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
This commit is contained in:
Thomas Petazzoni 2014-11-23 18:36:03 +01:00
parent 870b94c944
commit cb54da1b03
1 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,49 @@
From 4c86b3cbf52f810615d92835e98d83e9555a4d88 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sun, 23 Nov 2014 12:13:47 +0100
Subject: [PATCH 3/3] Improve check of the sysctl() function
Since sysctl is a deprecated system call, new architectures such as
ARC don't implement it. In such cases, uClibc installs the
<sys/sysctl.h> header, but dos not implement the sysctl()
function. This has the annoying side effect of breaking the sysctl
detection of radvd, which is purely based on the header file being
present.
To fix this, this commit adds a check based on the existence of the
sysctl() function.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
configure.ac | 1 +
device-linux.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 5dde3b2..5518f71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,6 +161,7 @@ AC_CHECK_HEADERS( \
time.h \
)
AC_HEADER_TIME
+AC_CHECK_FUNCS([sysctl])
dnl Checks for typedefs, structures, and compiler characteristics.
AC_MSG_CHECKING(whether struct sockaddr_in6 has sin6_scope_id)
diff --git a/device-linux.c b/device-linux.c
index 1ecaa6b..d9b56b8 100644
--- a/device-linux.c
+++ b/device-linux.c
@@ -183,7 +183,7 @@ int check_ip6_forwarding(void)
value = -1;
}
-#ifdef HAVE_SYS_SYSCTL_H
+#if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL)
int forw_sysctl[] = { SYSCTL_IP6_FORWARDING };
size_t size = sizeof(value);
if (!fp && sysctl(forw_sysctl, sizeof(forw_sysctl) / sizeof(forw_sysctl[0]), &value, &size, NULL, 0) < 0) {
--
2.1.0