Unfortunately this feature is not yet supported under NaCl, and it results in a compile error. Signed-off-by: Kevin Cernekee <cernekee at gmail.com> --- configure.ac | 10 ++++++++++ dtls.c | 16 ++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 0851f9f..ff381a0 100644 --- a/configure.ac +++ b/configure.ac @@ -183,6 +183,16 @@ if test "$have_inet_aton" = "yes"; then AC_DEFINE(HAVE_INET_ATON, 1, [Have inet_aton()]) fi +AC_MSG_CHECKING([for IPV6_PATHMTU socket option]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include <netinet/in.h> + #include <sys/socket.h> + #include <sys/types.h>],[ + int foo = IPV6_PATHMTU; (void)foo;])], + [AC_DEFINE(HAVE_IPV6_PATHMTU, 1, [Have IPV6_PATHMTU socket option]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + AC_CHECK_FUNC(__android_log_vprint, [], AC_CHECK_LIB(log, __android_log_vprint, [], [])) AC_ENABLE_SHARED diff --git a/dtls.c b/dtls.c index 3b9cbbe..cc56067 100644 --- a/dtls.c +++ b/dtls.c @@ -18,6 +18,8 @@ #include <config.h> #include <errno.h> +#include <netinet/in.h> +#include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> @@ -1069,11 +1071,6 @@ int dtls_mainloop(struct openconnect_info *vpninfo, int *timeout) #if defined(DTLS_GNUTLS) -/* Old glibc doesn't define that */ -#if defined(__linux__) && !defined(IPV6_PATHMTU) -# define IPV6_PATHMTU 61 -#endif - static int is_cancelled(struct openconnect_info *vpninfo) { fd_set rd_set; @@ -1195,6 +1192,13 @@ static int detect_mtu_ipv4(struct openconnect_info *vpninfo, unsigned char *buf) } #if defined(IPPROTO_IPV6) + +/* This symbol is missing in glibc < 2.22 (bug 18643). */ +#if defined(__linux__) && !defined(HAVE_IPV6_PATHMTU) +# define HAVE_IPV6_PATHMTU 1 +# define IPV6_PATHMTU 61 +#endif + /* Verifies whether current MTU is ok, or detects new MTU using IPv6's ICMP6 messages * @buf: is preallocated with MTU size * @id: a unique ID for our DPD exchange @@ -1265,7 +1269,7 @@ static int detect_mtu_ipv6(struct openconnect_info *vpninfo, unsigned char *buf) break; } while(max_resends-- > 0); -#ifndef _WIN32 +#ifdef HAVE_IPV6_PATHMTU /* If we received back our DPD packet, do nothing; otherwise, * attempt to get MTU from the ICMP6 packet we received */ if (ret <= 0) { -- 1.9.1