From patchwork Wed Dec 14 21:14:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lev Stipakov X-Patchwork-Id: 2912 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:622a:418d:b0:3a5:7962:c21f with SMTP id cd13csp534742qtb; Wed, 14 Dec 2022 13:15:44 -0800 (PST) X-Google-Smtp-Source: AA0mqf6zu9RSvtXxhKbLoQfqN73/8Rdm24iQ/OgfOXizUlvxL9BXD/8cNCeSLxBOi1FJQ08WQlDT X-Received: by 2002:a05:6a21:c019:b0:af:8128:757 with SMTP id bm25-20020a056a21c01900b000af81280757mr2532471pzc.61.1671052543935; Wed, 14 Dec 2022 13:15:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671052543; cv=none; d=google.com; s=arc-20160816; b=Kr861cXN2u4R5bhU9smALJMZAs+Zn5TTWOysTtD3dGVhNIXhkCkxsMz3r6enPPzHxS hF2+TzUk9IAZR0VW/es8jMDLRfjEuKkRoKbgAmIw0zmyBEnIhgj8i0OEtsnI0yg1h7ur jsTgk7fyhqJNJbIDcYhjyUssE/ss9wxHIkjKKknb4cr0/NfxQ7tvdAY4jOwPJZlch0mE nrHQBx6TZ3UTaARepCkFp134ZV5az7Ia07G9Z9pdVBjXR0FgtXwlPDOw1Kj8EWyydefT hCjyJbUE1i8kBzF9cJAr1WROCTxhkPcOQU7TU3d0pGfZRkI0/Lwtxpa4rdusCfyr3i8N doQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:content-transfer-encoding:cc:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature:dkim-signature; bh=yLj73fKBkxfP4oZEkKqI9KzYp4YLE1sfdMEUj9Bvc+8=; b=MrQZmNYZxbzjCTgJjC45DS/ij8xCgO1x6X3DAb47e44HzbIgMXybpUgKjppW/qIZgx Rs1XkNm6d3vtU2plquDfJKcTU0Ql4CSEQfyb9ZwD5u73JuoXQYvqSnBFVfHra2lyVHHC KBgz7WEBKh+P0EdcGVS9chCjZp7+RFbueV7ISmWzyX2soqh34ISkqIVe+K+/NikwN4A6 8uiw1LORCUmXxC1hdtZ7EfDV33AL4+9oqOCLQY0cIYQpbnN0ylTiJdAvBVgZdch7SwHG 8duV7FFrWgCNmjb9Fjxl4Wa1/CoHihvlC43TE8G1xoUHbD0ygfc3ja0I+LwdPrz2aXvv ZLAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=OPxxgs3W; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=FdWTm6wD; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=g6cMwwgg; 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=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id n5-20020a632705000000b0047767ded526si981775pgn.100.2022.12.14.13.15.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Dec 2022 13:15:43 -0800 (PST) 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=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=OPxxgs3W; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=FdWTm6wD; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=g6cMwwgg; 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=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1p5Z5Y-0006MD-8J; Wed, 14 Dec 2022 21:14:52 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1p5Z5V-0006M6-Vk for openvpn-devel@lists.sourceforge.net; Wed, 14 Dec 2022 21:14:49 +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:Cc:To:From:Sender:Reply-To: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=d+hsZYICfWg5be+uWwTV18TywTv3wXEkD7oncTmmF1I=; b=OPxxgs3W+iVn2NfDtecSH4wJ9b 9j5C5PFd/ixKImVaGKQIn7/dLA+bLbaM7SGUaDVgAWBhDTaVMcpHavMKO8WJcxdn2FJLUFmvGsfki oIm8RcyMrqBc0R1lf5VuYXWwuBhfh6ty2AOIPTaA00mrsBYU7TR3Cezql/Xavh84EuxI=; 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:Cc:To:From:Sender:Reply-To: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=d+hsZYICfWg5be+uWwTV18TywTv3wXEkD7oncTmmF1I=; b=FdWTm6wDl7ExmmGUbifkK98TtH oZyjoGqZgcMTRg8Yj+7RHn8WRT1lpZfX2uphLwfopIOu+3jqqvniAeoWcMLRHW4OTIOaU1+d4m4bW TIS4FFvbXZHOIaYQHu08JifRBX62sYnB8jD+J2cpfW0m4xxXkIg+Btl/Bo7X7KYHDBvM=; Received: from mail-lf1-f41.google.com ([209.85.167.41]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1p5Z5V-0003TP-AE for openvpn-devel@lists.sourceforge.net; Wed, 14 Dec 2022 21:14:49 +0000 Received: by mail-lf1-f41.google.com with SMTP id b3so12589598lfv.2 for ; Wed, 14 Dec 2022 13:14:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d+hsZYICfWg5be+uWwTV18TywTv3wXEkD7oncTmmF1I=; b=g6cMwwggQ30aMJ/mir4WCfI3b2DmErG24hJqR8d2p1toOBS3rnXWZMYJ3pz35+3iDv XYJIgbhrOee4UV9YkDTS43WanL0ufLJpycqwGAAGQgdO+gXQG2QJGdTgZ2Pm09HXLY0B wU79kkg7Af0pFKOrq03K2sY8Mag4QuAJPVYCZfGNkOta9LqryIN7S3/jPmBsh5Fpt1Ih kcmBppM1iDkolE0GGE25ByT7YNXzf/T7lBbQlO69APuYW9tnHv+hkYqglnrnwifv+pi4 ZbBG9Hsi/HKBerKidSaqzLzNAGlhZHo8WcSFnaNpVAyqf5e6OwniWibkIF18ebD8Pp2I Dmfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d+hsZYICfWg5be+uWwTV18TywTv3wXEkD7oncTmmF1I=; b=AsimPq9xXa3yPND0Zv3zmtGz1m9oE+rJkN96dCnA27VqLOavh8Pr2kha+EmcwpI1RJ xnHKMq9r21Ma6bbR6vj/bQvnFo2quZ8pWRozaQ5DdzTuDmJLjQF8OvC/CWJ3d20fzAk8 RZhdNjk7MjWS4Mmtz3DJDMjXr+/0BOuPu1XyqJqOr3I6yoFIalwzguiZ+q7Ch0/dal1L H7mZUCoZ7NIUh+d3ymKH4NVqsmhth6Yo13nVKIorlSlaIaJ6J7HlhvpWdvBQniUuxkcO QcKjmkHdCqR487joIbZsrwfZK1HpFCne0/uuML/W+86iAoczHVlkR0XOf7szg/yucF8Q o/gg== X-Gm-Message-State: ANoB5pkCzj9RIG7aUC2jj5+tE5wrNGGdwri4f2EMX7dx9MeFsrp9uuHR pArdD3iLkGrbemvAAYF0uy6VFRoo2Q0= X-Received: by 2002:a05:6512:138d:b0:4b4:b8fc:4aba with SMTP id p13-20020a056512138d00b004b4b8fc4abamr9800724lfa.25.1671052481989; Wed, 14 Dec 2022 13:14:41 -0800 (PST) Received: from LAPTOP-4L3N7KFS.localdomain (81-175-157-115.bb.dnainternet.fi. [81.175.157.115]) by smtp.gmail.com with ESMTPSA id z14-20020a056512370e00b004aa95889063sm947429lfr.43.2022.12.14.13.14.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 13:14:41 -0800 (PST) From: Lev Stipakov To: openvpn-devel@lists.sourceforge.net Date: Wed, 14 Dec 2022 23:14:26 +0200 Message-Id: <20221214211426.227-1-lstipakov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221214164824.172-1-lstipakov@gmail.com> References: <20221214164824.172-1-lstipakov@gmail.com> MIME-Version: 1.0 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-2.v13.lw.sourceforge.com", 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: Lev Stipakov dco_get_peer_stats fetches stats for a single peer. This is mostly useful in client mode. So far only Windows implements that. Signed-off-by: Lev Stipakov --- v2: fix error message text Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.167.41 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [lstipakov[at]gmail.com] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.167.41 listed in wl.mailspike.net] -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-Headers-End: 1p5Z5V-0003TP-AE Subject: [Openvpn-devel] [PATCH v2] Introduce dco_get_peer_stats API and Windows implementation 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: , Cc: Lev Stipakov Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1752208818666694775?= X-GMAIL-MSGID: =?utf-8?q?1752225592116295205?= From: Lev Stipakov dco_get_peer_stats fetches stats for a single peer. This is mostly useful in client mode. So far only Windows implements that. Signed-off-by: Lev Stipakov Acked-by: Gert Doering --- v2: fix error message text src/openvpn/dco.h | 13 +++++++++++++ src/openvpn/dco_freebsd.c | 7 +++++++ src/openvpn/dco_linux.c | 7 +++++++ src/openvpn/dco_win.c | 28 ++++++++++++++++++++++++++++ src/openvpn/manage.c | 9 +++++++-- 5 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/openvpn/dco.h b/src/openvpn/dco.h index 9a34d5b6..866aa0fb 100644 --- a/src/openvpn/dco.h +++ b/src/openvpn/dco.h @@ -235,6 +235,13 @@ void dco_delete_iroutes(struct multi_context *m, struct multi_instance *mi); **/ int dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context *m); +/** + * Update traffic statistics for single peer + * + * @param c instance context of the peer + **/ +int dco_get_peer_stats(struct context *c); + /** * Retrieve the list of ciphers supported by the current platform * @@ -362,6 +369,12 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context *m) return 0; } +static inline int +dco_get_peer_stats(struct context *c) +{ + return 0; +} + static inline const char * dco_get_supported_ciphers() { diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c index 8d342159..7c46f64e 100644 --- a/src/openvpn/dco_freebsd.c +++ b/src/openvpn/dco_freebsd.c @@ -722,6 +722,13 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context *m) return 0; } +int +dco_get_peer_stats(struct context *c) +{ + /* Not implemented. */ + return 0; +} + const char * dco_get_supported_ciphers() { diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c index 200d0b19..222537fc 100644 --- a/src/openvpn/dco_linux.c +++ b/src/openvpn/dco_linux.c @@ -924,6 +924,13 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context *m) return 0; } +int +dco_get_peer_stats(struct context *c) +{ + /* Not implemented. */ + return 0; +} + bool dco_available(int msglevel) { diff --git a/src/openvpn/dco_win.c b/src/openvpn/dco_win.c index 675dece2..0d0d7946 100644 --- a/src/openvpn/dco_win.c +++ b/src/openvpn/dco_win.c @@ -33,6 +33,7 @@ #include "tun.h" #include "crypto.h" #include "ssl_common.h" +#include "openvpn.h" #include #include @@ -406,6 +407,33 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context *m) return 0; } +int +dco_get_peer_stats(struct context *c) +{ + struct tuntap *tt = c->c1.tuntap; + + if (!tuntap_defined(tt)) + { + return -1; + } + + OVPN_STATS stats; + ZeroMemory(&stats, sizeof(OVPN_STATS)); + + DWORD bytes_returned = 0; + if (!DeviceIoControl(tt->hand, OVPN_IOCTL_GET_STATS, NULL, 0, + &stats, sizeof(stats), &bytes_returned, NULL)) + { + msg(M_WARN | M_ERRNO, "DeviceIoControl(OVPN_IOCTL_GET_STATS) failed"); + return -1; + } + + c->c2.dco_read_bytes = stats.TransportBytesReceived; + c->c2.dco_write_bytes = stats.TransportBytesSent; + + return 0; +} + void dco_event_set(dco_context_t *dco, struct event_set *es, void *arg) { diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c index 435efaf8..2c0bb6a8 100644 --- a/src/openvpn/manage.c +++ b/src/openvpn/manage.c @@ -43,6 +43,7 @@ #include "common.h" #include "manage.h" #include "openvpn.h" +#include "dco.h" #include "memdbg.h" @@ -4051,11 +4052,15 @@ management_check_bytecount(struct context *c, struct management *man, struct tim if (event_timeout_trigger(&man->connection.bytecount_update_interval, timeval, ETT_DEFAULT)) { - /* TODO: get stats from DCO */ - counter_type dco_read_bytes = 0; counter_type dco_write_bytes = 0; + if (dco_enabled(&c->options) && (dco_get_peer_stats(c) == 0)) + { + dco_read_bytes = c->c2.dco_read_bytes; + dco_write_bytes = c->c2.dco_write_bytes; + } + if (!(man->persist.callback.flags & MCF_SERVER)) { man_bytecount_output_client(man, dco_read_bytes, dco_write_bytes);