From patchwork Sat May 17 08:32:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 4253 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:a32a:b0:656:592e:a137 with SMTP id jh42csp2030661mab; Sat, 17 May 2025 01:32:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX3BxV1s3HEsa9pZ3mlfnA29R0V28ldnccmIP5DtZHfjJnqVXpv61YSiefrfw2sq8FlAu1zlNeNV2U=@openvpn.net X-Google-Smtp-Source: AGHT+IGDkjqa8ih1qIkX1BwRBy/UIWz4sOv4TnnzNGvRHfjQwEUfrLWsAWncGxsYGULhzFyj8sYc X-Received: by 2002:a05:6602:2989:b0:867:2374:49cd with SMTP id ca18e2360f4ac-86a23191856mr740549639f.2.1747470775755; Sat, 17 May 2025 01:32:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747470775; cv=none; d=google.com; s=arc-20240605; b=kAaLC2t94RDOyTHa4phoZ5Rcj9o3Uztspfw8DayEMM1FfXK7wibWKVulC1cVZI+1HT 9tSO4izBYt4Ya0XEUVdrkRxzcRb0x5/zOyALCmbSChsuFudym3i8lXMjTmgRKiG9sAPK xH7XatQpZRiLJYmtfcktOJVYuP5NO5wyzvx9DP3WCz8XGaDccVHWTCZZALncu6OoWTEX WU+gs1e1WdohgpYDs+L8eWeZULM2BnX33STF1NM8M06dcvJFfm8uIWIy6QNYKHMMepi0 NpJ81u6/BPJY0YonToFcDYyyRnMoxojZUPqceIw+j/F9/LA7ozdxUKDgcfT1YqjaDRrm Ilog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:content-transfer-encoding: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=4auhrptkqlIW98ZMpKK/qMCIPGudNTrEC7HG6OfeNjE=; fh=4NbAC/LsuMLI0S0hprUlLSLCiHwg6SCAifhH718Jh0Q=; b=gtizPVG0BWydWvRh8/A2P9IMOpcDU5xAelOVlKA2VJafDuQnr5rcEG+i6CNfjCJK/k wXM7kxLQoOa+wvciemXYxCLDlSvuNt/DQ19iNg4qE6IYv3Ot/dvo38TzejLIxkuDZQsb kPXxvAI/ce8NJtQIwEJD0GSwd952vZCy9zrAp9spnvvvQ8pFs8PJbnH3Ol+16yAk+oge npsGXf/H/h+xNxl2bkRBiR+P2XGSrh3dD8C5TWasBV/G9NVQ06/qHJ6Q+3030mqGsGLW jU1ZfBsuLugseygNaXjkfunp96Zp84uos7VBN3fy4+Xct++E94Qwvfm9NkL/0vD8saTS nWoA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=iXWbpwh+; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=htzFy5B0; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=c6nRLMpf; 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=NONE dis=NONE) header.from=muc.de Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id ca18e2360f4ac-86a236f96d1si16920839f.80.2025.05.17.01.32.55 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 17 May 2025 01:32:55 -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=iXWbpwh+; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=htzFy5B0; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=c6nRLMpf; 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=NONE dis=NONE) header.from=muc.de 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: List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Subject:MIME-Version:References:In-Reply-To:Message-ID:Date:To:From:Sender: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=4auhrptkqlIW98ZMpKK/qMCIPGudNTrEC7HG6OfeNjE=; b=iXWbpwh+BwPoXNK09aNkKJljYd pFE1mTreCLU8KeNJazcucM2MZjdF6jo1OvsG1uOKdVuWiCTL1oH1j6aRkRA46z5+gUszsBQXIzRnY Nsek1jb6MO5zoARlLGxML9y4vFAjAanQathP20j7hoID6G79ijABeRxBi030ZNeLfqtc=; Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1uGCyL-0007Zs-S9; Sat, 17 May 2025 08:32:45 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1uGCyJ-0007Z9-N7 for openvpn-devel@lists.sourceforge.net; Sat, 17 May 2025 08:32:43 +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=CXZOZESgqglfybhzc7dFbQWw7/nvV8mUc1RSHjyNLNo=; b=htzFy5B0mUSig6slW7YkqdwULX /AH3q3lngzUe0QIJOs8rRi1jkjEM5s1QDOm0H/USio55/+zYeYBnisWvVzzgLNvcJdBYyTo2kNYpn fwHMCp5yvVDhp1934lG+Y/RMBfO7yChF9vVp09ImzcT2LWYuE2JBcivcp2Ki4gVHZP3g=; 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=CXZOZESgqglfybhzc7dFbQWw7/nvV8mUc1RSHjyNLNo=; b=c6nRLMpfuk/uX0e6KOdpfhe/bK xFy3hI0ESzhOyxh0JQrdl+PB2jgedyV6auEg7Bl7Mal9sUdq/GBhDpIgygS23O9gpAm8GY6InOGHk f4WyLj5RMDBWH8oqIAs0UoEF9sVwwTgJulflWwVJFayQdkrcmPA+byKvgZfyBQlrHDJQ=; Received: from [193.149.48.143] (helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1uGCyI-0004bh-7m for openvpn-devel@lists.sourceforge.net; Sat, 17 May 2025 08:32:43 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.17.1.9/8.17.1.9) with ESMTP id 54H8WZI6028017 for ; Sat, 17 May 2025 10:32:35 +0200 Received: (from gert@localhost) by blue.greenie.muc.de (8.17.1.9/8.17.1.9/Submit) id 54H8WZQo028016 for openvpn-devel@lists.sourceforge.net; Sat, 17 May 2025 10:32:35 +0200 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Sat, 17 May 2025 10:32:23 +0200 Message-ID: <20250517083231.27977-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "6901ab67b84d", 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: Antonio Quartulli The new ovpn kernel module has changed the netlink attribute type of the fields containing the pkt/bytes counters in the peer stats. We moved from uint64 to uint (a dynamic type can be either 32 or 64 bits), therefore the parsing code must be adapted accordingly. Content analysis details: (1.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS X-Headers-End: 1uGCyI-0004bh-7m Subject: [Openvpn-devel] [PATCH v2] dco_linux: fix peer stats parsing with new ovpn kernel module 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: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1832355915880113565?= X-GMAIL-MSGID: =?utf-8?q?1832355915880113565?= From: Antonio Quartulli The new ovpn kernel module has changed the netlink attribute type of the fields containing the pkt/bytes counters in the peer stats. We moved from uint64 to uint (a dynamic type can be either 32 or 64 bits), therefore the parsing code must be adapted accordingly. While at it, also fix the peer object parsing in the P2P code path. The fix can be verified by enabling --status with verb 6 and watching the counters increasing: 2025-05-16 22:23:56 us=649488 dco_get_peer_stats_multi 2025-05-16 22:23:56 us=651008 dco_parse_peer_multi: parsing message... 2025-05-16 22:23:56 us=651734 dco_update_peer_stat / dco_read_bytes: 116280 2025-05-16 22:23:56 us=652682 dco_update_peer_stat / dco_write_bytes: 115776 2025-05-16 22:23:56 us=653467 dco_update_peer_stat / tun_read_bytes: 90048 2025-05-16 22:23:56 us=654110 dco_update_peer_stat / tun_write_bytes: 90048 Change-Id: I104b4adeb9f65cce3487b82f35470174acba92bc Closes: https://github.com/OpenVPN/openvpn/issues/746 Signed-off-by: Antonio Quartulli Acked-by: Gert Doering --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1025 This mail reflects revision 2 of this Change. Acked-by according to Gerrit (reflected above): Gert Doering diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c index a5f9e06..3f7965e 100644 --- a/src/openvpn/dco_linux.c +++ b/src/openvpn/dco_linux.c @@ -908,12 +908,26 @@ return ovpn_nl_recvmsgs(dco, __func__); } +/* libnl < 3.11.0 does not implement nla_get_uint() */ +static uint64_t +ovpn_nla_get_uint(struct nlattr *attr) +{ + if (nla_len(attr) == sizeof(uint32_t)) + { + return nla_get_u32(attr); + } + else + { + return nla_get_u64(attr); + } +} + static void dco_update_peer_stat(struct context_2 *c2, struct nlattr *tb[], uint32_t id) { if (tb[OVPN_A_PEER_LINK_RX_BYTES]) { - c2->dco_read_bytes = nla_get_u64(tb[OVPN_A_PEER_LINK_RX_BYTES]); + c2->dco_read_bytes = ovpn_nla_get_uint(tb[OVPN_A_PEER_LINK_RX_BYTES]); msg(D_DCO_DEBUG, "%s / dco_read_bytes: " counter_format, __func__, c2->dco_read_bytes); } @@ -925,7 +939,7 @@ if (tb[OVPN_A_PEER_LINK_TX_BYTES]) { - c2->dco_write_bytes = nla_get_u64(tb[OVPN_A_PEER_LINK_TX_BYTES]); + c2->dco_write_bytes = ovpn_nla_get_uint(tb[OVPN_A_PEER_LINK_TX_BYTES]); msg(D_DCO_DEBUG, "%s / dco_write_bytes: " counter_format, __func__, c2->dco_write_bytes); } @@ -937,7 +951,7 @@ if (tb[OVPN_A_PEER_VPN_RX_BYTES]) { - c2->tun_read_bytes = nla_get_u64(tb[OVPN_A_PEER_VPN_RX_BYTES]); + c2->tun_read_bytes = ovpn_nla_get_uint(tb[OVPN_A_PEER_VPN_RX_BYTES]); msg(D_DCO_DEBUG, "%s / tun_read_bytes: " counter_format, __func__, c2->tun_read_bytes); } @@ -949,7 +963,7 @@ if (tb[OVPN_A_PEER_VPN_TX_BYTES]) { - c2->tun_write_bytes = nla_get_u64(tb[OVPN_A_PEER_VPN_TX_BYTES]); + c2->tun_write_bytes = ovpn_nla_get_uint(tb[OVPN_A_PEER_VPN_TX_BYTES]); msg(D_DCO_DEBUG, "%s / tun_write_bytes: " counter_format, __func__, c2->tun_write_bytes); } @@ -1028,12 +1042,12 @@ dco_parse_peer(struct nl_msg *msg, void *arg) { struct context *c = arg; - struct nlattr *tb[OVPN_A_MAX]; + struct nlattr *tb[OVPN_A_MAX + 1]; struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); msg(D_DCO_DEBUG, "%s: parsing message...", __func__); - nla_parse(tb, OVPN_A_PEER_MAX, genlmsg_attrdata(gnlh, 0), + nla_parse(tb, OVPN_A_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); if (!tb[OVPN_A_PEER]) @@ -1043,10 +1057,7 @@ } struct nlattr *tb_peer[OVPN_A_PEER_MAX + 1]; - - nla_parse(tb_peer, OVPN_A_PEER, - nla_data(tb[OVPN_A_PEER]), - nla_len(tb[OVPN_A_PEER]), NULL); + nla_parse_nested(tb_peer, OVPN_A_PEER_MAX, tb[OVPN_A_PEER], NULL); if (!tb_peer[OVPN_A_PEER_ID]) {