From patchwork Fri Sep 3 06:11:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonio Quartulli X-Patchwork-Id: 1933 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director13.mail.ord1d.rsapps.net ([172.31.255.6]) by backend30.mail.ord1d.rsapps.net with LMTP id 8MwvIm5JMmHoIwAAIUCqbw (envelope-from ) for ; Fri, 03 Sep 2021 12:12:30 -0400 Received: from proxy14.mail.iad3b.rsapps.net ([172.31.255.6]) by director13.mail.ord1d.rsapps.net with LMTP id 0LfnIW5JMmE1SAAA91zNiA (envelope-from ) for ; Fri, 03 Sep 2021 12:12:30 -0400 Received: from smtp19.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy14.mail.iad3b.rsapps.net with LMTPS id mLqQHG5JMmEGEAAA+7ETDg (envelope-from ) for ; Fri, 03 Sep 2021 12:12:30 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp19.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dmarc=none (p=nil; dis=none) header.from=unstable.cc X-Suspicious-Flag: YES X-Classification-ID: bc91e208-0cd1-11ec-ab0a-525400cbaf6c-1-1 Received: from [216.105.38.7] ([216.105.38.7:56382] helo=lists.sourceforge.net) by smtp19.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id D7/39-05396-D6942316; Fri, 03 Sep 2021 12:12:30 -0400 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.90_1) (envelope-from ) id 1mMBmz-0005RD-0A; Fri, 03 Sep 2021 16:11:37 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMBmx-0005Qp-6f for openvpn-devel@lists.sourceforge.net; Fri, 03 Sep 2021 16:11:35 +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=dgojB9QfluXUjF0HXLyjtMOFcBaNC+/PkdQ6Qc9+rEw=; b=LN8jgXyGUXifTKd3kofS7UpkUW iIgz3x4BK3SNqzvcup6FRyXa3oDAfbbEk+1MmNahitMRi4OOvEwlNfJhhq+Vpz6isynr4Rb0/hl1B cRmAPLl3IwtUm2MqqzaYF89C7IsmmeqoezlPfPBTJmOeVFaU/Fo3rzDyc99DSb0sSL/c=; 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=dgojB9QfluXUjF0HXLyjtMOFcBaNC+/PkdQ6Qc9+rEw=; b=Gjt/5qKzShDQ5cYwcq1zeHLuQJ zxdYxjUjw/bc67Rrvkp4WUmz1YAyYa820vfcPyzQs8VfR8IXlqkCreAFZ75OPGRvgpyZKnK+bVGLB kLtwGomUb8X2Pz3iAYyQg/Zpmywx1UJrG8PuGiVg8G87515VL5NAVydoqd7fQaK5DJ1g=; Received: from s2.neomailbox.net ([5.148.176.60]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1mMBmv-0006NJ-4k for openvpn-devel@lists.sourceforge.net; Fri, 03 Sep 2021 16:11:35 +0000 From: Antonio Quartulli To: openvpn-devel@lists.sourceforge.net Date: Fri, 3 Sep 2021 18:11:13 +0200 Message-Id: <20210903161113.30498-2-a@unstable.cc> In-Reply-To: <20210903161113.30498-1-a@unstable.cc> References: <20210903161113.30498-1-a@unstable.cc> MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: betterbe.com] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.2 AWL AWL: Adjusted score from AWL reputation of From: address X-Headers-End: 1mMBmv-0006NJ-4k Subject: [Openvpn-devel] [PATCH 2/2] set_lladdr: use networking API net_addr_ll_set() on Linux 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: Antonio Quartulli , Jan Hugo Prins Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox Make sure that set_addr() uses the proper networking backend when setting the LL address of a TAP interface. This operation was overlooked while implementing the networking APIs on the Linux platform. Reported-by: Jan Hugo Prins Signed-off-by: Antonio Quartulli Acked-by: Gert Doering --- This patch (along with 1/2) has been tested on buildbots, but I couldn't run any specific test on any *BSD or Windows platform. Linux with both iproute2 and sitnl works as expected. src/openvpn/init.c | 5 +++-- src/openvpn/lladdr.c | 30 +++++++++++++----------------- src/openvpn/lladdr.h | 3 ++- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/openvpn/init.c b/src/openvpn/init.c index 386aee23..a17fe859 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -1176,7 +1176,7 @@ do_persist_tuntap(const struct options *options, openvpn_net_ctx_t *ctx) ctx); if (options->persist_mode && options->lladdr) { - set_lladdr(options->dev, options->lladdr, NULL); + set_lladdr(ctx, options->dev, options->lladdr, NULL); } return true; #else /* ifdef ENABLE_FEATURE_TUN_PERSIST */ @@ -1853,7 +1853,8 @@ do_open_tun(struct context *c) /* set the hardware address */ if (c->options.lladdr) { - set_lladdr(c->c1.tuntap->actual_name, c->options.lladdr, c->c2.es); + set_lladdr(&c->net_ctx, c->c1.tuntap->actual_name, c->options.lladdr, + c->c2.es); } /* do ifconfig */ diff --git a/src/openvpn/lladdr.c b/src/openvpn/lladdr.c index 22857eb7..f12c146f 100644 --- a/src/openvpn/lladdr.c +++ b/src/openvpn/lladdr.c @@ -15,10 +15,9 @@ #include "lladdr.h" int -set_lladdr(const char *ifname, const char *lladdr, +set_lladdr(openvpn_net_ctx_t *ctx, const char *ifname, const char *lladdr, const struct env_set *es) { - struct argv argv = argv_new(); int r; if (!ifname || !lladdr) @@ -27,17 +26,13 @@ set_lladdr(const char *ifname, const char *lladdr, } #if defined(TARGET_LINUX) -#ifdef ENABLE_IPROUTE - argv_printf(&argv, - "%s link set addr %s dev %s", - iproute_path, lladdr, ifname); -#else - argv_printf(&argv, - "%s %s hw ether %s", - IFCONFIG_PATH, - ifname, lladdr); -#endif -#elif defined(TARGET_SOLARIS) + uint8_t addr[ETH_ALEN]; + + sscanf(lladdr, MAC_FMT, MAC_SCAN_ARG(addr)); + r = net_addr_ll_set(ctx, ifname, addr) == 0; +#else /* if defined(TARGET_LINUX) */ + struct argv argv = argv_new(); +#if defined(TARGET_SOLARIS) argv_printf(&argv, "%s %s ether %s", IFCONFIG_PATH, @@ -57,18 +52,19 @@ set_lladdr(const char *ifname, const char *lladdr, "%s %s ether %s", IFCONFIG_PATH, ifname, lladdr); -#else /* if defined(TARGET_LINUX) */ +#else /* if defined(TARGET_SOLARIS) */ msg(M_WARN, "Sorry, but I don't know how to configure link layer addresses on this operating system."); return -1; -#endif /* if defined(TARGET_LINUX) */ - +#endif /* if defined(TARGET_SOLARIS) */ argv_msg(M_INFO, &argv); r = openvpn_execve_check(&argv, es, M_WARN, "ERROR: Unable to set link layer address."); + argv_free(&argv); +#endif /* if defined(TARGET_LINUX) */ + if (r) { msg(M_INFO, "TUN/TAP link layer address set to %s", lladdr); } - argv_free(&argv); return r; } diff --git a/src/openvpn/lladdr.h b/src/openvpn/lladdr.h index f6ea2b12..0c8b4164 100644 --- a/src/openvpn/lladdr.h +++ b/src/openvpn/lladdr.h @@ -3,6 +3,7 @@ */ #include "misc.h" +#include "networking.h" -int set_lladdr(const char *ifname, const char *lladdr, +int set_lladdr(openvpn_net_ctx_t *ctx, const char *ifname, const char *lladdr, const struct env_set *es);