From patchwork Sun Jan 15 16:48:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 3003 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7300:c95:b0:82:e4b3:40a0 with SMTP id p21csp1071139dyk; Sun, 15 Jan 2023 08:49:11 -0800 (PST) X-Google-Smtp-Source: AMrXdXsdSplSzOwWeqbyhNtILQsEmVIrrNXcKgVQ62aE10MP1KiIeOwUoeArcIxdIT8wE+mstsCk X-Received: by 2002:a17:902:cf12:b0:194:7ca9:70a7 with SMTP id i18-20020a170902cf1200b001947ca970a7mr7202806plg.3.1673801351346; Sun, 15 Jan 2023 08:49:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673801351; cv=none; d=google.com; s=arc-20160816; b=GlLU2Sxt3FBSUUWs9cL5RPE1zj10uVGkZ8v2n0/LSDRLTqym0ZHekurnxIfVQopq0q GJIwwQtltbBT71aQlLjqQQ7wzhdNCR2TXInmEfBp7OQ/rsixUerPJDRiKPBCJpXFOS2Q TerU+4ZMfkztAOXZOU3UHik3TwNuiLD1+GGFbYwRN4cVYRGz+lttX1A7y+2C1x/Er+l9 mJpXFCra8Zkr4ZmPTzXf7jjiKV9LZCVBaXm9Y7y3aTabDms2F1d0F6e1BKyJ/nfK1C7q QXfpd4vGdfCqs/PLUliB/kCfPYPJNIDhdvqmoSHIB3PS73H/sBzXeYnUn9o1XgvQoWck T7WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=+ThUjONkO3nOzTstf/PlIBMf28RDB04gVj6yFW0LHP4=; b=PTVnAG8yLJlHWh2xVLvl4GrVcL0ebHiKfwKn0sG278nUHlojpIkdVV9+zgu3hpTM88 w58TVt0GsGgMrW9Ih76h0USDIBt5TZk9A5f9vNWobeGENb09NjE6gL4O1xz/xobDgca8 EI+wytNdHf1L9rtrnBFP1oNrEmz6BIO+AJFgGBSxU33bHp8w9+tiJwKq28gJu+RHa+x7 6mZnyp/JiYQGcoPQcgOEDTAnTnVsjEMxJIIHMAsvl3b3w+EiS5I7pPCvkup/lcC73Gv4 S3bheuHEIHEyebr3ZnQG3wI0hlaztJ9ru5ak/Vh80uDOEaniE2IRw65opuVg5gs3j3wu O4ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=d788s8xp; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Hpgrvc3o; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=EumskDNv; 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 n1-20020a170902f60100b00192f3e95af8si26984574plg.256.2023.01.15.08.49.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Jan 2023 08:49:11 -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=d788s8xp; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Hpgrvc3o; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=EumskDNv; 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-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pH6BM-0006ko-Jn; Sun, 15 Jan 2023 16:48:31 +0000 Received: from [172.30.20.202] (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 1pH6BK-0006kU-Lj for openvpn-devel@lists.sourceforge.net; Sun, 15 Jan 2023 16:48:29 +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=rnux7/XfZM9EJ03MGpek4zGzNbC0RqjhBeLmtZLAQZc=; b=d788s8xpKqd726iZAI1AOxfG2v aUdFcq1DicJee2t9vIsV0xXq2FJ2ebxXxR3uSUYaaBRJoDltwPApwouTvvOsqwNlU1h9A/Ct7Wo89 YPQumd0OajUfc6CxgEaokd5m++Vpl83acXd5Ziy+kZxH6pBzdoY5ghFoY+feNkceJlu8=; 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=rnux7/XfZM9EJ03MGpek4zGzNbC0RqjhBeLmtZLAQZc=; b=Hpgrvc3odf6CyKW5wbK4pfbrmu RBSOEPcT2WACUOJFVajCOcQOgXHxDRpCp0A816venCRmiYxPBcfCmEnX+MQJNwe24ZnaI4utcFam1 l8lHXFrk+NTuv/lOXYNa48Q6mRrkQ7HVSVgSRwXCDpLkHR8qHtIZmmMNdV1Zd3DGqiE8=; Received: from mail-io1-f41.google.com ([209.85.166.41]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1pH6BH-004onF-RQ for openvpn-devel@lists.sourceforge.net; Sun, 15 Jan 2023 16:48:29 +0000 Received: by mail-io1-f41.google.com with SMTP id z194so820151iof.10 for ; Sun, 15 Jan 2023 08:48:27 -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=rnux7/XfZM9EJ03MGpek4zGzNbC0RqjhBeLmtZLAQZc=; b=EumskDNvCjNwcUd5/I4uQpu9APBCW90gV6ALFB2y/cJ/m2W79Bbvbj+lJbwIsPpWM4 ddA1oNm97BqdaWmwbnjclxZznsLBGh7Jgs9ORJlWDb07gO2xOXaX29w9VqFU66RFGe2z cRs2PfIc0vwWQza6IwDYf1lz7SKQd3dYHgspmg8GcomKLxATW92Y8ITiKPYnNJGrCILk A8fsDgnNtQfqUqh4wfciSWcMSOL4+4wbVACDqPGN+ugBTu3We2oQDSONmlpJxreRNIt1 sRyJ6HnjzFvg3EHn3EtQYrVzJzcCpmQ0YytFOhYsmeCttH+m6W1Jb7fuR2mX0pAGoklC vnTw== 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=rnux7/XfZM9EJ03MGpek4zGzNbC0RqjhBeLmtZLAQZc=; b=g0W6DZLv/LHZmpQiay+LBNjAgbp7jC6cOxpQ5/RmaW1EG6AlLu2D7czwQjzNiIauQo VtAN64eD/8kJ07ceE9sN0543+9PUtxW/ilOhw5NjIVj7MYZw7fZsmy9bop+M5r2POM8d DqJsdOErY+Emnct0pCJXqrbBYAPOBZ+7eD/C9joUHCnN2JnABphY/wK6f8VaPhq7BSY5 MGkhahOwUaXyHVDqYemZcmh/2/YzjkS23Q7X19XOPjUWbUjcjps2buKNAAT8tOx6rwtR t8tmuuDPMpbzhP+HTpoR1Xpjx7fFLfmtWqoTmN+7HoFpEtLYQh4KLNmdlAijTTTHJsNq MSzA== X-Gm-Message-State: AFqh2kqktlhZhQRvcg+TLnUd9jYP9HABP9/jpKDYB7LILD816YjhAxew YafzFMSzMp7rMVI3wlYgXibPp/FPpGQ= X-Received: by 2002:a05:6602:1cf:b0:6ed:95f:92e7 with SMTP id w15-20020a05660201cf00b006ed095f92e7mr10196619iot.0.1673801301851; Sun, 15 Jan 2023 08:48:21 -0800 (PST) Received: from uranus.sansel.ca (bras-vprn-tnhlon4053w-lp130-01-70-51-222-66.dsl.bell.ca. [70.51.222.66]) by smtp.gmail.com with ESMTPSA id k5-20020a0566022a4500b006df19c8671fsm8901591iov.27.2023.01.15.08.48.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Jan 2023 08:48:21 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Sun, 15 Jan 2023 11:48:18 -0500 Message-Id: <20230115164818.1973210-1-selva.nair@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230113235754.1942385-1-selva.nair@gmail.com> References: <20230113235754.1942385-1-selva.nair@gmail.com> MIME-Version: 1.0 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-1.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: Selva Nair - Instead of 0, 1, 2 use RTA_ERROR, RTA_SUCCESS, RTA_EEXIST as the return code of route addition functions. - Also fix a logging error: status -> (status == RTA_SUCCESS) Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.166.41 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.166.41 listed in list.dnswl.org] -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 X-Headers-End: 1pH6BH-004onF-RQ Subject: [Openvpn-devel] [PATCH v2 1/2] Define and use macros for route addition status code 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?1754953753243464959?= X-GMAIL-MSGID: =?utf-8?q?1755107925873042325?= From: Selva Nair - Instead of 0, 1, 2 use RTA_ERROR, RTA_SUCCESS, RTA_EEXIST as the return code of route addition functions. - Also fix a logging error: status -> (status == RTA_SUCCESS) v2: fold long lines use "bool ret = .." pattern for android too fix two more lines where status was directly assigned to bool Signed-off-by: Selva Nair Acked-by: Gert Doering --- - Hope I did not introduce any typos -- hard to check when there are so many platform-specific cases involved. - Some lines are still long after folding: uncrustify seems to want the second line to be aligned with the opening parenthesis. Feel free to reformat/beautify or ask for a v3. src/openvpn/route.c | 130 ++++++++++++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 46 deletions(-) diff --git a/src/openvpn/route.c b/src/openvpn/route.c index 21dce6af..61a40ff1 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -96,6 +96,11 @@ print_bypass_addresses(const struct route_bypass *rb) #endif +/* Route addition return status codes */ +#define RTA_ERROR 0 /* route addition failed */ +#define RTA_SUCCESS 1 /* route addition succeeded */ +#define RTA_EEXIST 2 /* route not added as it already exists */ + static bool add_bypass_address(struct route_bypass *rb, const in_addr_t a) { @@ -1593,12 +1598,12 @@ add_route(struct route_ipv4 *r, metric = r->metric; } - status = 1; + status = RTA_SUCCESS; if (net_route_v4_add(ctx, &r->network, netmask_to_netbits2(r->netmask), &r->gateway, iface, 0, metric) < 0) { msg(M_WARN, "ERROR: Linux route add command failed"); - status = 0; + status = RTA_ERROR; } #elif defined (TARGET_ANDROID) @@ -1612,7 +1617,8 @@ add_route(struct route_ipv4 *r, { openvpn_snprintf(out, sizeof(out), "%s %s %s", network, netmask, gateway); } - status = management_android_control(management, "ROUTE", out); + bool ret = management_android_control(management, "ROUTE", out); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined (_WIN32) { @@ -1638,28 +1644,35 @@ add_route(struct route_ipv4 *r, if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_SERVICE) { status = add_route_service(r, tt); - msg(D_ROUTE, "Route addition via service %s", (status == 1) ? "succeeded" : "failed"); + msg(D_ROUTE, "Route addition via service %s", + (status == RTA_SUCCESS) ? "succeeded" : "failed"); } else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_IPAPI) { status = add_route_ipapi(r, tt, ai); - msg(D_ROUTE, "Route addition via IPAPI %s", (status == 1) ? "succeeded" : "failed"); + msg(D_ROUTE, "Route addition via IPAPI %s", + (status == RTA_SUCCESS) ? "succeeded" : "failed"); } else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_EXE) { netcmd_semaphore_lock(); - status = openvpn_execve_check(&argv, es, 0, "ERROR: Windows route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: Windows route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; netcmd_semaphore_release(); } else if ((flags & ROUTE_METHOD_MASK) == ROUTE_METHOD_ADAPTIVE) { status = add_route_ipapi(r, tt, ai); - msg(D_ROUTE, "Route addition via IPAPI %s [adaptive]", (status == 1) ? "succeeded" : "failed"); - if (status == 0) + msg(D_ROUTE, "Route addition via IPAPI %s [adaptive]", + (status == RTA_SUCCESS) ? "succeeded" : "failed"); + if (status == RTA_ERROR) { msg(D_ROUTE, "Route addition fallback to route.exe"); netcmd_semaphore_lock(); - status = openvpn_execve_check(&argv, es, 0, "ERROR: Windows route add command failed [adaptive]"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: Windows route add command failed [adaptive]"); + status = ret ? RTA_SUCCESS : RTA_ERROR; netcmd_semaphore_release(); } } @@ -1694,7 +1707,9 @@ add_route(struct route_ipv4 *r, } argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: Solaris route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_FREEBSD) @@ -1716,7 +1731,9 @@ add_route(struct route_ipv4 *r, /* FIXME -- add on-link support for FreeBSD */ argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: FreeBSD route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: FreeBSD route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_DRAGONFLY) @@ -1738,7 +1755,9 @@ add_route(struct route_ipv4 *r, /* FIXME -- add on-link support for Dragonfly */ argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: DragonFly route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: DragonFly route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_DARWIN) @@ -1770,7 +1789,9 @@ add_route(struct route_ipv4 *r, } argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: OS X route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: OS X route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_OPENBSD) || defined(TARGET_NETBSD) @@ -1792,7 +1813,9 @@ add_route(struct route_ipv4 *r, /* FIXME -- add on-link support for OpenBSD/NetBSD */ argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD/NetBSD route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: OpenBSD/NetBSD route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_AIX) @@ -1802,7 +1825,9 @@ add_route(struct route_ipv4 *r, ROUTE_PATH, network, netbits, gateway); argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: AIX route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; } #else /* if defined(TARGET_LINUX) */ @@ -1810,7 +1835,7 @@ add_route(struct route_ipv4 *r, #endif /* if defined(TARGET_LINUX) */ done: - if (status == 1) + if (status == RTA_SUCCESS) { r->flags |= RT_ADDED; } @@ -1823,7 +1848,7 @@ done: /* release resources potentially allocated during route setup */ net_ctx_reset(ctx); - return (status != 0); + return (status != RTA_ERROR); } @@ -1937,13 +1962,13 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, metric = r6->metric; } - status = 1; + status = RTA_SUCCESS; if (net_route_v6_add(ctx, &r6->network, r6->netbits, gateway_needed ? &r6->gateway : NULL, device, 0, metric) < 0) { msg(M_WARN, "ERROR: Linux IPv6 route can't be added"); - status = 0; + status = RTA_ERROR; } #elif defined (TARGET_ANDROID) @@ -1989,7 +2014,9 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, } argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add -inet6 command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: Solaris route add -inet6 command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_FREEBSD) || defined(TARGET_DRAGONFLY) @@ -2008,7 +2035,9 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, } argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: *BSD route add -inet6 command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: *BSD route add -inet6 command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_DARWIN) @@ -2026,7 +2055,9 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, } argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: MacOS X route add -inet6 command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: MacOS X route add -inet6 command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_OPENBSD) @@ -2035,7 +2066,9 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, network, r6->netbits, gateway ); argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD route add -inet6 command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: OpenBSD route add -inet6 command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_NETBSD) @@ -2044,7 +2077,9 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, network, r6->netbits, gateway ); argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: NetBSD route add -inet6 command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: NetBSD route add -inet6 command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #elif defined(TARGET_AIX) @@ -2052,14 +2087,16 @@ add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt, ROUTE_PATH, network, r6->netbits, gateway); argv_msg(D_ROUTE, &argv); - status = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add command failed"); + bool ret = openvpn_execve_check(&argv, es, 0, + "ERROR: AIX route add command failed"); + status = ret ? RTA_SUCCESS : RTA_ERROR; #else /* if defined(TARGET_LINUX) */ msg(M_FATAL, "Sorry, but I don't know how to do 'route ipv6' commands on this operating system. Try putting your routes in a --route-up script"); #endif /* if defined(TARGET_LINUX) */ done: - if (status == 1) + if (status == RTA_SUCCESS) { r6->flags |= RT_ADDED; } @@ -2072,7 +2109,7 @@ done: /* release resources potentially allocated during route setup */ net_ctx_reset(ctx); - return (status != 0); + return (status != RTA_ERROR); } static void @@ -2759,11 +2796,12 @@ done: gc_free(&gc); } +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int add_route_ipapi(const struct route_ipv4 *r, const struct tuntap *tt, DWORD adapter_index) { struct gc_arena gc = gc_new(); - int ret = 0; + int ret = RTA_ERROR; DWORD status; const DWORD if_index = (adapter_index == TUN_ADAPTER_INDEX_INVALID) ? windows_route_find_if_index(r, tt) : adapter_index; @@ -2797,11 +2835,11 @@ add_route_ipapi(const struct route_ipv4 *r, const struct tuntap *tt, DWORD adapt if (status == NO_ERROR) { - ret = 1; + ret = RTA_SUCCESS; } else if (status == ERROR_OBJECT_ALREADY_EXISTS) { - ret = 2; + ret = RTA_EEXIST; } else { @@ -2820,7 +2858,7 @@ add_route_ipapi(const struct route_ipv4 *r, const struct tuntap *tt, DWORD adapt msg(D_ROUTE, "ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=%u and dwForwardType=%u", (unsigned int)fr.dwForwardMetric1, (unsigned int)fr.dwForwardType); - ret = 1; + ret = RTA_SUCCESS; goto doublebreak; } else if (status != ERROR_BAD_ARGUMENTS) @@ -2839,7 +2877,7 @@ doublebreak: (unsigned int)if_index); if (status == ERROR_OBJECT_ALREADY_EXISTS) { - ret = 2; + ret = RTA_EEXIST; } } } @@ -2885,11 +2923,11 @@ del_route_ipapi(const struct route_ipv4 *r, const struct tuntap *tt) return ret; } -/* Returns 1 on success, 2 if route exists, 0 on error */ +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int do_route_service(const bool add, const route_message_t *rt, const size_t size, HANDLE pipe) { - int ret = 0; + int ret = RTA_ERROR; ack_message_t ack; struct gc_arena gc = gc_new(); @@ -2903,25 +2941,25 @@ do_route_service(const bool add, const route_message_t *rt, const size_t size, H msg(M_WARN, "ROUTE: route %s failed using service: %s [status=%u if_index=%d]", (add ? "addition" : "deletion"), strerror_win32(ack.error_number, &gc), ack.error_number, rt->iface.index); - ret = (ack.error_number == ERROR_OBJECT_ALREADY_EXISTS) ? 2 : 0; + ret = (ack.error_number == ERROR_OBJECT_ALREADY_EXISTS) ? RTA_EEXIST : RTA_ERROR; goto out; } - ret = 1; + ret = RTA_SUCCESS; out: gc_free(&gc); return ret; } -/* Returns 1 on success, 2 if route exists, 0 on error */ +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int do_route_ipv4_service(const bool add, const struct route_ipv4 *r, const struct tuntap *tt) { DWORD if_index = windows_route_find_if_index(r, tt); if (if_index == ~0) { - return 0; + return RTA_ERROR; } route_message_t msg = { @@ -2947,13 +2985,13 @@ do_route_ipv4_service(const bool add, const struct route_ipv4 *r, const struct t } /* Add or delete an ipv6 route - * Returns 1 on success, 2 if route exists, 0 on error + * Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int route_ipv6_ipapi(const bool add, const struct route_ipv6 *r, const struct tuntap *tt) { DWORD err; - int ret = 0; + int ret = RTA_ERROR; PMIB_IPFORWARD_ROW2 fwd_row; struct gc_arena gc = gc_new(); @@ -3006,18 +3044,18 @@ out: { msg(M_WARN, "ROUTE: route %s failed using ipapi: %s [status=%lu if_index=%lu]", (add ? "addition" : "deletion"), strerror_win32(err, &gc), err, fwd_row->InterfaceIndex); - ret = (err == ERROR_OBJECT_ALREADY_EXISTS) ? 2 : 0; + ret = (err == ERROR_OBJECT_ALREADY_EXISTS) ? RTA_EEXIST : RTA_ERROR; } else { msg(D_ROUTE, "IPv6 route %s using ipapi", add ? "added" : "deleted"); - ret = 1; + ret = RTA_SUCCESS; } gc_free(&gc); return ret; } -/* Returns 1 on success, 2 if route exists, 0 on error */ +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int do_route_ipv6_service(const bool add, const struct route_ipv6 *r, const struct tuntap *tt) { @@ -3060,11 +3098,11 @@ do_route_ipv6_service(const bool add, const struct route_ipv6 *r, const struct t status = do_route_service(add, &msg, sizeof(msg), tt->options.msg_channel); msg(D_ROUTE, "IPv6 route %s via service %s", add ? "addition" : "deletion", - status ? "succeeded" : "failed"); + (status == RTA_SUCCESS) ? "succeeded" : "failed"); return status; } -/* Returns 1 on success, 2 if route exists, 0 on error */ +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int add_route_service(const struct route_ipv4 *r, const struct tuntap *tt) { @@ -3077,7 +3115,7 @@ del_route_service(const struct route_ipv4 *r, const struct tuntap *tt) return do_route_ipv4_service(false, r, tt); } -/* Returns 1 on success, 2 if route exists, 0 on error */ +/* Returns RTA_SUCCESS on success, RTA_EEXIST if route exists, RTA_ERROR on error */ static int add_route_ipv6_service(const struct route_ipv6 *r, const struct tuntap *tt) {