From patchwork Wed Jul 23 08:36:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristof Provost X-Patchwork-Id: 4323 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:3644:b0:671:5a2c:6455 with SMTP id a4csp21155mai; Wed, 23 Jul 2025 02:03:02 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXNGzzkAiZo47KOlyLOvxX9NCy48kIjh942O+9VHwIwbytlLQyAJXis04/+gYyBVVLzxGrG7oXTaNE=@openvpn.net X-Google-Smtp-Source: AGHT+IHLAH/x6lhtdxvAxCx7pCO8C7lZ+z8yO1egFPL7r4he3TOIA5vtC5PrD8tUuViPdKAcTe3q X-Received: by 2002:a05:6870:a413:b0:2ff:8c8e:c222 with SMTP id 586e51a60fabf-306c6fa7cbbmr1379574fac.14.1753261381697; Wed, 23 Jul 2025 02:03:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1753261381; cv=none; d=google.com; s=arc-20240605; b=gTFAQo8HCPhVAUEHTfCGCgCXgEEDfl/iYgQ/bL7CEOWrDGrW+DeXIpRWptshHigdNB t2kAwggO1Epip2GUK+xoKaNm5ApM9oVxk+65EIpE+sJMaqxXuTwT1QQoY1O9sAXq1yH7 3zj8dctcXEweSHqYjB/pz5YIdmn3dc74zpNLEu6ScQCtiROIdT/qwC+4CxAMghb5RaMj JwOfkBBmwhXTfqB0liUnDNEDhf1S5Q+wXFyqtMVCtq5OKdw5CQu8Mttf695o2eCSjUXa SEcOhdT/vFoSxFKYBugmWrYWRG6SULpubspcfswBx8tYltkAD7DPrw02/V6Flldmx2gn a3Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:content-transfer-encoding:reply-to:from:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:dkim-signature:dkim-signature:dkim-signature:dkim-signature; bh=SiV5qcQ6D8rXENF6e8MhyT4naHBG/1stQmtoqOly4kk=; fh=UWlByhJXNGJKzcJ5WmyoA1tw5ugXp4S86SRVYqcTfsM=; b=jvpVjzF78Gt3+MA5BiCHyMQ3P+htPsOPmUf1OF+72brPkoXJWYj2HsBiwY2EntONz6 T48dR/LYQ1iYOl1hOTiZSj1LNmu8QGP2s1dapl5l25fmNQ3MyWJ1jUnNSKOzceewooJ5 ncVrQI66eYBTGIPhc1EK8P9pnRzPuTZsxv7w6UQzza8b8//wT94/0Al9PbdJU73q7uNm WjF1Qv2N6X+2ipVa8ovtWMKiYPCgEamMP344hYzwOn8RmCYNSmRNLroKVcnXfUMkDWL+ dRvFtCHCWbAcYyVn9i+JnVKmyhRoMadGqE6XWtwnPlt5OQdDRRY3mWfVXJxAdX99/6Jm snzg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=NbxQxgPh; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=D46nOCua; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Mw056uF9; dkim=neutral (body hash did not verify) header.i=@netgate.com header.s=google header.b=qPx0CPtQ; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=lists.sourceforge.net; dara=fail header.i=@openvpn.net Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 586e51a60fabf-30103ad8a34si6390313fac.125.2025.07.23.02.03.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Jul 2025 02:03:01 -0700 (PDT) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=NbxQxgPh; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=D46nOCua; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Mw056uF9; dkim=neutral (body hash did not verify) header.i=@netgate.com header.s=google header.b=qPx0CPtQ; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=lists.sourceforge.net; dara=fail header.i=@openvpn.net DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:MIME-Version:References:In-Reply-To: Message-ID:Date:To:Sender:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=SiV5qcQ6D8rXENF6e8MhyT4naHBG/1stQmtoqOly4kk=; b=NbxQxgPhNCAxh1bPz2dcFbU2lv EowY2sYTp22uxh1D3v96rn8/dADROulqPLPpLzZbMiuNYsz59ov43N7bFQfDQUZSvG3Rkp6+TLfIv nJAn0pabICBkTsqbtOQ9uVYEEP1r8o88IC/A9RpvCITsDVPYzY12SA0U3cEEwHG663ps=; Received: from [127.0.0.1] (helo=sfs-ml-3.v29.lw.sourceforge.com) by sfs-ml-3.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1ueVNJ-0007do-Ri; Wed, 23 Jul 2025 09:02:57 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-3.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1ueVNH-0007dd-MU for openvpn-devel@lists.sourceforge.net; Wed, 23 Jul 2025 09:02:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=3notTs1oEScTBKhkFj5SONc6R7sipsFxNQ81GLtJpjw=; b=D46nOCuaA7td9ZUQgNlcf5KMxI +Lpuskj1laog1LbKWp5BX0CgAW/znXUYgxOGE1NwUC1JiHRlKqBevxEENJpyPh3FkIu5R6EZEg6mc Yyq4pRr3qHg/99/nQeAnwE5mVB07QabR9GckcdVdhwBUOH3KCipqpDUnc4DbxJ8Je3+U=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=3notTs1oEScTBKhkFj5SONc6R7sipsFxNQ81GLtJpjw=; b=Mw056uF9LsHkCjz0sQ0zKmHJX0 dnmAB9dEt28D9pr5fgplfrTSgWYtnt2uqTr4ubYUBboO4O7gbjnilyV6PtD04D62j8psEA2SyS6t8 zegPUUZYA05NUQ/iOW0LT4VD0bZajWgvsdZ/rwJ1s+mF6OZKVBvDBhyX6IeN2LWDxGmg=; Received: from mail-lf1-f54.google.com ([209.85.167.54]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1ueVNG-0003fE-OS for openvpn-devel@lists.sourceforge.net; Wed, 23 Jul 2025 09:02:55 +0000 Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-558fd84da64so256926e87.2 for ; Wed, 23 Jul 2025 02:02:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netgate.com; s=google; t=1753261363; x=1753866163; darn=lists.sourceforge.net; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=3notTs1oEScTBKhkFj5SONc6R7sipsFxNQ81GLtJpjw=; b=qPx0CPtQ/Azelql57maw/pakulmXj8j+TQSusAuxD71S5gGJjsTCO2ZaJhnqQ4j+k+ bXCMeYWgwmQySVfCK5aI5FOdjHzDTv7N5rMcmW6VzEGeomE3xToGL9XT85l8PV/erVWM Dv/7UubXm18iaCGVGVzCEJyGSbqXZQc+DtqS8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753261363; x=1753866163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3notTs1oEScTBKhkFj5SONc6R7sipsFxNQ81GLtJpjw=; b=IF3c4N4WepZgDdjy8teQGTJAHDlJ0lCpo/OJ4rFoCBnxRQ01tG38Mb0Yl6AqgC2yJ4 I8IXyLnNTsHa1aBsTfjEVSUT6I3SiwsKheiHdC1fruKkBBPtHoYy/7CV/rLVWaiPjUgo /+y3mHcaKyUTrTmruBTR1yoQjcRt63uO+hwUQeqHsWxHt3bjoOuuxtSm9krXNt9rj2OI Z6FuGEwm2+iQHlUAFuRmCPDIkKMKDJk9OarHXwHWRoJP4+T2+mPepaqeh7A1Zf9WRKx9 38cGILPdcnZHPLfS7eVO1cirWyqpC8QXWSU8dRCg8yhzg4mFX4BLQ6RJQHFizvsBYi1B jXng== X-Gm-Message-State: AOJu0YwnrTu8ByFLpXrJW4mB5aXsia4ZLmPkBBAJXVVLyeZz6WrmHTah VP2RH6HKuWprVb6Rih9QEBh7iD52gh5Kwy00XnxjCAWLWe6Uf7ha6Zxinjkny9Zf0nHU7L7qMMS h7pS2nw== X-Gm-Gg: ASbGncvPfJ9zt6QJupB3GHeTyQtdtUdBJotF5gUX6Ske2yGIv8lBGX/EenRBTEUyVyL mm5Q5aVTy8p+cbs2X61WIg5mf9HERFnyKQZNmbNdrF3SpHCHFPHmeHgxHeN5hLtqTqPCsEg+MMz +dMpS+lac49q7wuKWSKvgfO5DbpLDN4+LbKfu5KnneIHChr9gT+IESLeCaDMv7XUzoy13rLz87T 1atDRfD1ooEE1YigiJRsNHmIk2UtxrdS73ici9nk84+M/hhfYRm99qFqrOQtbcB/K24SRbt7cUo 0eKZeF+N0bRT95N0oiJb4eLIygDJUy9/BdipZUduWMClza3P2CuNbS+fUqHBZkG20M0x38Hiokj ustOku9KQKT+liVtc7jKZJs/PNuq71hPu4WJUD/4RKQgwGBCPDe9qAfeS0MYlXB0FuzYPrkCDqZ XoBMStff+ezqUydE+s0HR3a7N8zW4= X-Received: by 2002:a05:6000:18a9:b0:3a6:d256:c5db with SMTP id ffacd0b85a97d-3b768f2d546mr677888f8f.13.1753259901835; Wed, 23 Jul 2025 01:38:21 -0700 (PDT) Received: from nut.jupiter.sigsegv.be (ptr-8rhf62vj1z1egmd2c2g.18120a2.ip6.access.telenet.be. [2a02:1811:2410:bf00:f602:70ff:feae:6e98]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-458691b2b36sm15408105e9.34.2025.07.23.01.38.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Jul 2025 01:38:21 -0700 (PDT) To: openvpn-devel Date: Wed, 23 Jul 2025 10:36:49 +0200 Message-ID: <20250723083816.71604-2-kprovost@netgate.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250723083816.71604-1-kprovost@netgate.com> References: <20250723083816.71604-1-kprovost@netgate.com> MIME-Version: 1.0 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "sfi-spamd-1.hosts.colo.sdot.me", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Kristof Provost Signed-off-by: Kristof Provost --- configure.ac | 9 +++++ src/openvpn/dco_freebsd.c | 68 ++++++++++++++++++++++++++++++++++ src/openvpn/dco_freebsd.h | 2 + src/openvpn/multi.c | [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.167.54 listed in wl.mailspike.net] X-Headers-End: 1ueVNG-0003fE-OS Subject: [Openvpn-devel] [PATCH] dco: support float notifications on FreeBSD X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Kristof Provost via Openvpn-devel From: Kristof Provost Reply-To: Kristof Provost Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1838427806863124436?= X-GMAIL-MSGID: =?utf-8?q?1838427806863124436?= From: Kristof Provost Signed-off-by: Kristof Provost --- configure.ac | 9 +++++ src/openvpn/dco_freebsd.c | 68 ++++++++++++++++++++++++++++++++++ src/openvpn/dco_freebsd.h | 2 + src/openvpn/multi.c | 2 +- src/openvpn/ovpn_dco_freebsd.h | 1 + 5 files changed, 81 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 66cb79b1..50697b8e 100644 --- a/configure.ac +++ b/configure.ac @@ -848,6 +848,15 @@ if test "$enable_dco" != "no"; then else AC_MSG_ERROR([DCO support can't be enabled]) fi + else + AC_CHECK_DECLS( + [OVPN_NOTIF_FLOAT], + [AC_DEFINE([ENABLE_DCO_FLOAT_FREEBSD], [1], [We have DCO float notifications on FreeBSD])], + , + [[ + #include + ]] + ) fi ;; *-mingw*) diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c index b8816c63..b0cab389 100644 --- a/src/openvpn/dco_freebsd.c +++ b/src/openvpn/dco_freebsd.c @@ -72,6 +72,55 @@ sockaddr_to_nvlist(const struct sockaddr *sa) return (nvl); } +#ifdef ENABLE_DCO_FLOAT_FREEBSD +static bool +nvlist_to_sockaddr(const nvlist_t *nvl, struct sockaddr_storage *ss) +{ + if (! nvlist_exists_number(nvl, "af")) + return (false); + if (! nvlist_exists_binary(nvl, "address")) + return (false); + if (! nvlist_exists_number(nvl, "port")) + return (false); + + ss->ss_family = nvlist_get_number(nvl, "af"); + + switch (ss->ss_family) + { + case AF_INET: + { + struct sockaddr_in *in = (struct sockaddr_in *)ss; + const void *data; + size_t len; + + in->sin_len = sizeof(*in); + data = nvlist_get_binary(nvl, "address", &len); + assert(len == sizeof(in->sin_addr)); + memcpy(&in->sin_addr, data, sizeof(in->sin_addr)); + in->sin_port = nvlist_get_number(nvl, "port"); + break; + } + case AF_INET6: + { + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)ss; + const void *data; + size_t len; + + in6->sin6_len = sizeof(*in6); + data = nvlist_get_binary(nvl, "address", &len); + assert(len == sizeof(in6->sin6_addr)); + memcpy(&in6->sin6_addr, data, sizeof(in6->sin6_addr)); + in6->sin6_port = nvlist_get_number(nvl, "port"); + break; + } + default: + return (false); + } + + return (true); +} +#endif + int dco_new_peer(dco_context_t *dco, unsigned int peerid, int sd, struct sockaddr *localaddr, struct sockaddr *remoteaddr, @@ -571,6 +620,25 @@ dco_do_read(dco_context_t *dco) dco->dco_message_type = OVPN_CMD_SWAP_KEYS; break; +#ifdef ENABLE_DCO_FLOAT_FREEBSD + case OVPN_NOTIF_FLOAT: { + const nvlist_t *address; + + if (! nvlist_exists_nvlist(nvl, "address")) { + msg(M_WARN, "Float notification without address"); + break; + } + + address = nvlist_get_nvlist(nvl, "address"); + if (! nvlist_to_sockaddr(address, &dco->dco_float_peer_ss)) { + msg(M_WARN, "Failed to parse float notification"); + break; + } + dco->dco_message_type = OVPN_CMD_FLOAT_PEER; + break; + } +#endif + default: msg(M_WARN, "Unknown kernel notification %d", type); break; diff --git a/src/openvpn/dco_freebsd.h b/src/openvpn/dco_freebsd.h index e1a054e0..ab5891e8 100644 --- a/src/openvpn/dco_freebsd.h +++ b/src/openvpn/dco_freebsd.h @@ -36,6 +36,7 @@ enum ovpn_message_type_t { OVPN_CMD_DEL_PEER, OVPN_CMD_PACKET, OVPN_CMD_SWAP_KEYS, + OVPN_CMD_FLOAT_PEER, }; enum ovpn_del_reason_t { @@ -55,6 +56,7 @@ typedef struct dco_context { int dco_message_type; int dco_message_peer_id; int dco_del_peer_reason; + struct sockaddr_storage dco_float_peer_ss; uint64_t dco_read_bytes; uint64_t dco_write_bytes; } dco_context_t; diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c index 46966863..8e712e44 100644 --- a/src/openvpn/multi.c +++ b/src/openvpn/multi.c @@ -3400,7 +3400,7 @@ multi_process_incoming_dco(struct multi_context *m) { process_incoming_del_peer(m, mi, dco); } -#if defined(TARGET_LINUX) || defined(TARGET_WIN32) +#if defined(TARGET_LINUX) || defined(TARGET_WIN32) || defined(TARGET_FREEBSD) else if (dco->dco_message_type == OVPN_CMD_FLOAT_PEER) { ASSERT(mi->context.c2.link_sockets[0]); diff --git a/src/openvpn/ovpn_dco_freebsd.h b/src/openvpn/ovpn_dco_freebsd.h index 53f94dfd..7eb643b4 100644 --- a/src/openvpn/ovpn_dco_freebsd.h +++ b/src/openvpn/ovpn_dco_freebsd.h @@ -37,6 +37,7 @@ enum ovpn_notif_type { OVPN_NOTIF_DEL_PEER, OVPN_NOTIF_ROTATE_KEY, + OVPN_NOTIF_FLOAT, }; enum ovpn_del_reason {