On Sep 19, 2011, at 16:05:27, JuanJo wrote:
> On Mon, Sep 19, 2011 at 5:56 PM, JuanJo Ciarlante <[email protected]> wrote:
>> On Mon, Sep 19, 2011 at 4:46 PM, Eric Crist <[email protected]>
>> wrote:
>>> After testing, this appears to compile and function, with David's
>>> tun-stuff.patch, which was attached to the first message.
>
> FYI indeed had to add tun-stuff.patch to compile under freebsd, quickly
> tested ok also.
>
>>
>> Great! ... thanks Eric for testing this (fwiw checked building+test under
>> openbsd ok - just to assert that I didn't broke any BSDism).
>>
>> Cheers,
JuanJo,
I forgot to mention the FreeBSD bit, that was something I already knew, sorry
for wasting your time by not saying something. For posterity, I've attached
the patches here, and added the openvpn-devel list as a CC.
Eric Crist
From f11d7ddb965c6bd65d7dd02cc57539ea4f1c5598 Mon Sep 17 00:00:00 2001
From: JuanJo Ciarlante <[email protected]>
List-Post: [email protected]
Date: Mon, 19 Sep 2011 16:07:14 +0200
Subject: [PATCH] fix ipv6 compilation under macosx >= 1070 - v3
- use __APPLE_USE_RFC_3542 for macosx build environment >= 1070
- define SOL_IP from IPPROTO_IP if it's missing
In Linux man 7 ip says:
"Using SOL_IP socket options level isn't portable, BSD-based
stacks use IPPROTO_IP level."
Signed-off-by: JuanJo Ciarlante <[email protected]>
---
socket.c | 3 +--
socket.h | 6 ++----
syshead.h | 14 ++++++++++++++
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/socket.c b/socket.c
index a2f9511..47e44ed 100644
--- a/socket.c
+++ b/socket.c
@@ -2878,8 +2878,7 @@ struct openvpn_in4_pktinfo
struct cmsghdr cmsghdr;
#ifdef HAVE_IN_PKTINFO
struct in_pktinfo pi4;
-#endif
-#ifdef IP_RECVDSTADDR
+#elif defined(IP_RECVDSTADDR)
struct in_addr pi4;
#endif
};
diff --git a/socket.h b/socket.h
index a9a29c5..4a4f75d 100644
--- a/socket.h
+++ b/socket.h
@@ -86,8 +86,7 @@ struct link_socket_actual
union {
#ifdef HAVE_IN_PKTINFO
struct in_pktinfo in4;
-#endif
-#ifdef IP_RECVDSTADDR
+#elif defined(IP_RECVDSTADDR)
struct in_addr in4;
#endif
struct in6_pktinfo in6;
@@ -589,8 +588,7 @@ addr_defined_ipi (const struct link_socket_actual *lsa)
switch (lsa->dest.addr.sa.sa_family) {
#ifdef HAVE_IN_PKTINFO
case AF_INET: return lsa->pi.in4.ipi_spec_dst.s_addr != 0;
-#endif
-#ifdef IP_RECVDSTADDR
+#elif defined(IP_RECVDSTADDR)
case AF_INET: return lsa->pi.in4.s_addr != 0;
#endif
case AF_INET6: return !IN6_IS_ADDR_UNSPECIFIED(&lsa->pi.in6.ipi6_addr);
diff --git a/syshead.h b/syshead.h
index e208d4c..66a2538 100644
--- a/syshead.h
+++ b/syshead.h
@@ -57,6 +57,12 @@
#define srandom srand
#endif
+#if defined(__APPLE__)
+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1070
+#define __APPLE_USE_RFC_3542 1
+#endif
+#endif
+
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -401,6 +407,14 @@
#endif
/*
+ * Does this platform define SOL_IP
+ * or only bsd-style IPPROTO_IP ?
+ */
+#ifndef SOL_IP
+#define SOL_IP IPPROTO_IP
+#endif
+
+/*
* Disable ESEC
*/
#if 0
--
1.7.3.1
diff --git a/tun.c b/tun.c
index aa17c36..5185f73 100644
--- a/tun.c
+++ b/tun.c
@@ -865,13 +865,13 @@ do_ifconfig (struct tuntap *tt,
/* Add a network route for the local tun interface */
struct route r;
CLEAR (r);
- r.defined = true;
+ r.flags = RT_DEFINED
r.network = tt->local & tt->remote_netmask;
r.netmask = tt->remote_netmask;
r.gateway = tt->local;
r.metric_defined = true;
r.metric = 0;
- add_route (&r, tt, 0, es);
+ add_route (&r, tt, 0, NULL, es);
}
tt->did_ifconfig = true;
@@ -1061,11 +1061,11 @@ do_ifconfig (struct tuntap *tt,
{
struct route r;
CLEAR (r);
- r.defined = true;
+ r.flags = RT_DEFINED;
r.network = tt->local & tt->remote_netmask;
r.netmask = tt->remote_netmask;
r.gateway = tt->local;
- add_route (&r, tt, 0, es);
+ add_route (&r, tt, 0, NULL, es);
}
if ( do_ipv6 )
@@ -1105,21 +1105,21 @@ do_ifconfig (struct tuntap *tt,
ifconfig_remote_netmask,
tun_mtu
);
-
+
argv_msg (M_INFO, &argv);
openvpn_execve_check (&argv, es, S_FATAL, "FreeBSD ifconfig failed");
tt->did_ifconfig = true;
/* Add a network route for the local tun interface */
if (!tun && tt->topology == TOP_SUBNET)
- {
+ {
struct route r;
- CLEAR (r);
- r.defined = true;
+ CLEAR (r);
+ r.flags = RT_DEFINED;
r.network = tt->local & tt->remote_netmask;
r.netmask = tt->remote_netmask;
- r.gateway = tt->local;
- add_route (&r, tt, 0, es);
+ r.gateway = tt->local;
+ add_route (&r, tt, 0, NULL, es);
}
if ( do_ipv6 )