From: JuanJo Ciarlante Date: Mon, 19 Sep 2011 14:07:14 +0000 (+0200) Subject: fix ipv6 compilation under macosx >= 1070 - v3 X-Git-Tag: v2.3-alpha1~182 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c02a84051297d97ba5955b93cdf479393b1dc1f8;p=thirdparty%2Fopenvpn.git 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 Tested-by: Eric F Crist Acked-by: David Sommerseth Signed-off-by: David Sommerseth --- diff --git a/socket.c b/socket.c index a2f9511c1..47e44edb3 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 a9a29c5ba..4a4f75df0 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 e208d4cdc..66a25386d 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 #endif @@ -400,6 +406,14 @@ #define ENABLE_IP_PKTINFO 0 #endif +/* + * Does this platform define SOL_IP + * or only bsd-style IPPROTO_IP ? + */ +#ifndef SOL_IP +#define SOL_IP IPPROTO_IP +#endif + /* * Disable ESEC */ diff --git a/tun.c b/tun.c index 5e645ca7b..d121fc1f6 100644 --- a/tun.c +++ b/tun.c @@ -1060,11 +1060,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 )