From: Gianmarco De Gregori Date: Wed, 2 Apr 2025 13:21:42 +0000 (+0200) Subject: Fix FreeBSD-DCO and Multisocket interaction X-Git-Tag: v2.7_alpha1~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a061b3a94c5489a2f207189343f1c235e8181b87;p=thirdparty%2Fopenvpn.git Fix FreeBSD-DCO and Multisocket interaction FreeBSD-DCO does not support TCP as transport protocol so in order to be able to use DCO in a multi-socket environment we need to check the local_list entries and disable DCO if any of the listening socket is TCP. While at it, removed some dead code left from Multisocket polishing. Github: closes OpenVPN/openvpn#710 Change-Id: I9b6359076a61ae2bbb8e5cea00e33969cb5f92cf Signed-off-by: Gianmarco De Gregori Acked-by: Gert Doering Message-Id: <20250402132148.18810-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31324.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/dco.c b/src/openvpn/dco.c index d00958da..7ad9cb33 100644 --- a/src/openvpn/dco.c +++ b/src/openvpn/dco.c @@ -260,10 +260,16 @@ dco_check_option_ce(const struct connection_entry *ce, int msglevel, int mode) } #if defined(TARGET_FREEBSD) - if (!proto_is_udp(ce->proto)) + if (ce->local_list) { - msg(msglevel, "NOTE: TCP transport disables data channel offload on FreeBSD."); - return false; + for (int i = 0; i < ce->local_list->len; i++) + { + if (!proto_is_dgram(ce->local_list->array[i]->proto)) + { + msg(msglevel, "NOTE: TCP transport disables data channel offload on FreeBSD."); + return false; + } + } } #endif diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 99dd60ab..6605a42b 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -9577,20 +9577,3 @@ has_udp_in_local_list(const struct options *options) return false; } - -bool -has_tcp_in_local_list(const struct options *options) -{ - if (options->ce.local_list) - { - for (int i = 0; i < options->ce.local_list->len; i++) - { - if (!proto_is_dgram(options->ce.local_list->array[i]->proto)) - { - return true; - } - } - } - - return false; -} diff --git a/src/openvpn/options.h b/src/openvpn/options.h index fa617c8f..8d1ef6c3 100644 --- a/src/openvpn/options.h +++ b/src/openvpn/options.h @@ -921,8 +921,6 @@ bool key_is_external(const struct options *options); bool has_udp_in_local_list(const struct options *options); -bool has_tcp_in_local_list(const struct options *options); - /** * Returns whether the current configuration has dco enabled. */