From: Gert Doering Date: Tue, 22 Feb 2022 11:38:32 +0000 (+0100) Subject: Fix --mtu-disc maybe|yes on Linux. X-Git-Tag: v2.4.12~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d63d15ef9e1eb34ffdc4028a96f506decced99c;p=thirdparty%2Fopenvpn.git Fix --mtu-disc maybe|yes on Linux. --mtu-disc (on Linux) needs two components to work: - setsockopt() with IP_MTU_DISCOVER or IPV6_MTU_DISCOVER - "extended error reporting" (setsockopt(IP_RECVERR) and then via mtu.c/format_extended_socket_error()) to react on "packet too big" errors on sendto() / sendmsg() Some configure.ac reorganization broke detection of and "struct sock_extended_err". Re-add to configure.ac, remove all the other conditionals in syshead.h, and remove the "struct sock_extended_err" check completely (assumption: if errqueue.h exists, it contains what we need). Thus, the "non-helpful" socket error message turns into: 2022-02-22 12:31:42 write UDPv4 [EMSGSIZE Path-MTU=800]: Message too long (fd=3,code=90) 2022-02-22 12:31:42 Note adjusting 'mssfix 1400 mtu' to 'mssfix 800 mtu' according to path MTU discovery 2022-02-22 12:31:42 Note adjusting 'fragment 1400 mtu' to 'fragment 800 mtu' according to path MTU discovery ... while at it, fix extra space in first part of these messages, and print o->ce.fragment for the "fragment" message... v2: assume that "if it's linux, and has these two headers, everything else will be there as well" and get rid of most of the #ifdef checks Trac: #1452 Signed-off-by: Gert Doering Acked-by: Arne Schwabe Message-Id: <20220222113832.13383-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg23863.html Signed-off-by: Gert Doering (cherry picked from commit 4225114b96723bdecd68398f7a89765879b31b5d) (cherry picked from commit 3e0c506e5d9135ef4b08547db8679cc5bd2a7582) --- diff --git a/configure.ac b/configure.ac index 469002817..baeedf29e 100644 --- a/configure.ac +++ b/configure.ac @@ -441,7 +441,7 @@ AC_CHECK_HEADERS([ \ unistd.h signal.h libgen.h stropts.h \ syslog.h pwd.h grp.h \ sys/sockio.h sys/uio.h linux/sockios.h \ - linux/types.h sys/poll.h sys/epoll.h err.h \ + linux/types.h linux/errqueue.h sys/poll.h sys/epoll.h err.h \ ]) SOCKET_INCLUDES=" @@ -502,12 +502,6 @@ AC_CHECK_TYPE( , [[${SOCKET_INCLUDES}]] ) -AC_CHECK_TYPE( - [struct sock_extended_err], - [AC_DEFINE([HAVE_SOCK_EXTENDED_ERR], [1], [struct sock_extended_err needed for extended socket error support])], - , - [[${SOCKET_INCLUDES}]] -) AC_CHECK_TYPE( [struct msghdr], [AC_DEFINE([HAVE_MSGHDR], [1], [struct msghdr needed for extended socket error support])], diff --git a/src/openvpn/syshead.h b/src/openvpn/syshead.h index 3ac9d70c3..239c5b5be 100644 --- a/src/openvpn/syshead.h +++ b/src/openvpn/syshead.h @@ -415,7 +415,7 @@ typedef int MIB_TCP_STATE; /* * Do we have the capability to report extended socket errors? */ -#if defined(HAVE_LINUX_TYPES_H) && defined(HAVE_LINUX_ERRQUEUE_H) && defined(HAVE_SOCK_EXTENDED_ERR) && defined(HAVE_MSGHDR) && defined(HAVE_CMSGHDR) && defined(CMSG_FIRSTHDR) && defined(CMSG_NXTHDR) && defined(IP_RECVERR) && defined(MSG_ERRQUEUE) && defined(SOL_IP) && defined(HAVE_IOVEC) +#if defined(HAVE_LINUX_TYPES_H) && defined(HAVE_LINUX_ERRQUEUE_H) #define EXTENDED_SOCKET_ERROR_CAPABILITY 1 #else #define EXTENDED_SOCKET_ERROR_CAPABILITY 0