summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2013-08-20 16:50:51 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2013-08-20 16:50:51 +0200
commit4d2db5dbd2a84bee7d69bf8929ce4914ae528547 (patch)
tree3db94cd184e968d11992fd6b6e395e67afb8aae1
parentd52f208d9fb6381f3c3656c5916866a4b779fa82 (diff)
downloadfastd-4d2db5dbd2a84bee7d69bf8929ce4914ae528547.tar
fastd-4d2db5dbd2a84bee7d69bf8929ce4914ae528547.zip
OpenBSD doesn't support IPv4 on IPv6 sockets
-rw-r--r--CMakeLists.txt6
-rw-r--r--config.h.in1
-rw-r--r--src/config.c15
3 files changed, 22 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 606ce93..5c617b5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,12 @@ set(USE_BINDTODEVICE ${LINUX})
set(USE_PMTU ${LINUX})
set(USE_PKTINFO ${LINUX})
+if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
+ set(USE_MULTIAF_BIND FALSE)
+else()
+ set(USE_MULTIAF_BIND TRUE)
+endif()
+
set(WITH_CAPABILITIES ${LINUX} CACHE BOOL "Include support for POSIX capabilities")
set(WITH_CMDLINE_USER TRUE CACHE BOOL "Include support for setting user/group related options on the command line")
diff --git a/config.h.in b/config.h.in
index 676a180..5be4660 100644
--- a/config.h.in
+++ b/config.h.in
@@ -35,6 +35,7 @@
#cmakedefine USE_BINDTODEVICE
#cmakedefine USE_PMTU
#cmakedefine USE_PKTINFO
+#cmakedefine USE_MULTIAF_BIND
#cmakedefine WITH_CAPABILITIES
diff --git a/src/config.c b/src/config.c
index ed1c332..7dd3e7f 100644
--- a/src/config.c
+++ b/src/config.c
@@ -218,6 +218,21 @@ bool fastd_config_bind_address(fastd_context_t *ctx UNUSED, fastd_config_t *conf
return false;
#endif
+#ifndef USE_MULTIAF_BIND
+ if (address->sa.sa_family == AF_UNSPEC) {
+ fastd_peer_address_t addr4 = { .in = { .sin_family = AF_INET, .sin_port = address->in.sin_port } };
+ fastd_peer_address_t addr6 = { .in6 = { .sin6_family = AF_INET6, .sin6_port = address->in.sin_port } };
+
+ if (!fastd_config_bind_address(ctx, conf, &addr4, bindtodev, default_v4, default_v6))
+ return false;
+
+ if (!fastd_config_bind_address(ctx, conf, &addr6, bindtodev, default_v4, default_v6))
+ return false;
+
+ return true;
+ }
+#endif
+
fastd_bind_address_t *addr = malloc(sizeof(fastd_bind_address_t));
addr->next = conf->bind_addrs;
conf->bind_addrs = addr;