@@ -121,11 +121,17 @@
set(TARGET_FREEBSD YES)
set(ENABLE_DCO YES)
link_libraries(-lnv)
+elseif (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
+ set(TARGET_SOLARIS YES)
+ set(HAVE_SYS_SOCKIO_H 1)
+ link_libraries(-lnsl -lsocket -lresolv)
elseif (WIN32)
set(ENABLE_DCO YES)
elseif (APPLE)
set(TARGET_DARWIN YES)
set(HAVE_NET_IF_UTUN_H YES)
+else()
+ message(FATAL_ERROR "Unknown system name: \"${CMAKE_SYSTEM_NAME}\"")
endif ()
if (UNIX)
@@ -336,7 +336,7 @@
#cmakedefine HAVE_SYS_SOCKET_H
/* Define to 1 if you have the <sys/sockio.h> header file. */
-#undef HAVE_SYS_SOCKIO_H
+#cmakedefine HAVE_SYS_SOCKIO_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
@@ -443,6 +443,9 @@
/* Are we running on Linux? */
#cmakedefine TARGET_LINUX
+/* Are we running on Solaris/OpenIndiana? */
+#cmakedefine TARGET_SOLARIS
+
/* Are we running WIN32? */
#cmakedefine TARGET_WIN32
@@ -2342,12 +2342,11 @@
return;
}
-#ifndef _WIN32
+#if !defined(_WIN32)
#if !defined(TARGET_LINUX)
const char *gateway;
-#else
- int metric;
#endif
+#if !defined(TARGET_SOLARIS)
bool gateway_needed = false;
const char *device = tt->actual_name;
if (r6->iface != NULL) /* vpn server special route */
@@ -2365,6 +2364,7 @@
gateway_needed = true;
}
#endif
+#endif
struct gc_arena gc = gc_new();
struct argv argv = argv_new();
@@ -2395,7 +2395,7 @@
msg( M_INFO, "delete_route_ipv6(%s/%d)", network, r6->netbits );
#if defined(TARGET_LINUX)
- metric = -1;
+ int metric = -1;
if ((r6->flags & RT_METRIC_DEFINED) && (r6->metric > 0))
{
metric = r6->metric;
@@ -1900,7 +1900,7 @@
#endif
-#if !(defined(_WIN32) || defined(TARGET_LINUX))
+#if !(defined(_WIN32) || defined(TARGET_LINUX) || defined(TARGET_SOLARIS))
static void
open_tun_generic(const char *dev, const char *dev_type, const char *dev_node,
struct tuntap *tt)
@@ -2061,7 +2061,7 @@
}
#endif /* TARGET_LINUX || TARGET_FREEBSD*/
-#if !defined(_WIN32)
+#if !(defined(_WIN32) || defined(TARGET_SOLARIS))
static void
close_tun_generic(struct tuntap *tt)
{
@@ -2398,13 +2398,12 @@
open_tun(const char *dev, const char *dev_type, const char *dev_node, struct tuntap *tt,
openvpn_net_ctx_t *ctx)
{
- int if_fd, ip_muxid, arp_muxid, arp_fd, ppa = -1;
+ int if_fd = -1, ip_muxid = -1, arp_muxid = -1, arp_fd = -1, ppa = -1;
struct lifreq ifr;
const char *ptr;
- const char *ip_node, *arp_node;
+ const char *ip_node = NULL, *arp_node = NULL;
const char *dev_tuntap_type;
int link_type;
- bool is_tun;
struct strioctl strioc_if, strioc_ppa;
/* improved generic TUN/TAP driver from
@@ -2428,7 +2427,6 @@
}
dev_tuntap_type = "tun";
link_type = I_PLINK;
- is_tun = true;
}
else if (tt->type == DEV_TYPE_TAP)
{
@@ -2440,7 +2438,6 @@
arp_node = dev_node;
dev_tuntap_type = "tap";
link_type = I_PLINK; /* was: I_LINK */
- is_tun = false;
}
else
{