Attention is currently required from: Arne Schwabe.
Hello Arne Schwabe,
I'd like you to do a code review.
Please visit
https://gerrit.openvpn.net/c/openvpn/+/2150?usp=email
to review the following change.
Change subject: route: add route_exec() for the per-OS route commands
......................................................................
route: add route_exec() for the per-OS route commands
The non-Linux, non-Windows add and delete paths all log the route
command, run it with openvpn_execve_check() and turn the result into
RTA_SUCCESS or RTA_ERROR. Do that in one helper.
Change-Id: Ie9b2723486214232aad33991b267dc0ff4d1c535
Signed-off-by: Razvan Cojocaru <[email protected]>
---
M src/openvpn/route.c
1 file changed, 38 insertions(+), 70 deletions(-)
git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/50/2150/1
diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 53550c4..d483c5f 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1446,6 +1446,16 @@
}
#endif
+#if !defined(TARGET_LINUX) && !defined(TARGET_ANDROID) && !defined(_WIN32)
+/* Log and run a route command, returning RTA_SUCCESS or RTA_ERROR */
+static int
+route_exec(const struct argv *argv, const struct env_set *es, const char
*error_message)
+{
+ argv_msg(D_ROUTE, argv);
+ return openvpn_execve_check(argv, es, 0, error_message) ? RTA_SUCCESS :
RTA_ERROR;
+}
+#endif
+
bool
add_route(struct route_ipv4 *r, const struct tuntap *tt, unsigned int flags,
const struct route_gateway_info *rgi, /* may be NULL */
@@ -1601,9 +1611,7 @@
argv_printf_cat(&argv, "%d", r->metric);
}
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: Solaris route add command failed");
#elif defined(TARGET_FREEBSD)
@@ -1620,9 +1628,7 @@
/* FIXME -- add on-link support for FreeBSD */
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: FreeBSD route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: FreeBSD route add command failed");
#elif defined(TARGET_DRAGONFLY)
@@ -1639,9 +1645,7 @@
/* FIXME -- add on-link support for Dragonfly */
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: DragonFly route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: DragonFly route add command
failed");
#elif defined(TARGET_DARWIN)
@@ -1666,9 +1670,7 @@
argv_printf_cat(&argv, "-net %s %s %s", network, gateway, netmask);
}
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OS X route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: OS X route add command failed");
#elif defined(TARGET_OPENBSD) || defined(TARGET_NETBSD)
@@ -1685,18 +1687,14 @@
/* FIXME -- add on-link support for OpenBSD/NetBSD */
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD/NetBSD route
add command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: OpenBSD/NetBSD route add command
failed");
#elif defined(TARGET_AIX)
{
int netbits = netmask_to_netbits2(r->netmask);
argv_printf(&argv, "%s add -net %s/%d %s", ROUTE_PATH, network,
netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: AIX route add command failed");
}
#elif defined(TARGET_HAIKU)
@@ -1704,9 +1702,7 @@
/* ex: route add /dev/net/ipro1000/0 0.0.0.0 gw 192.168.1.1 netmask
128.0.0.0 */
argv_printf(&argv, "%s add %s inet %s gw %s netmask %s", ROUTE_PATH,
rgi->iface, network,
gateway, netmask);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: Haiku inet route add command
failed");
#else /* if defined(TARGET_LINUX) */
msg(M_FATAL,
@@ -1898,9 +1894,7 @@
argv_printf_cat(&argv, "0");
}
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add
-inet6 command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: Solaris route add -inet6 command
failed");
#elif defined(TARGET_FREEBSD) || defined(TARGET_DRAGONFLY)
@@ -1915,9 +1909,7 @@
argv_printf_cat(&argv, "-iface %s", device);
}
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: *BSD route add
-inet6 command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: *BSD route add -inet6 command
failed");
#elif defined(TARGET_DARWIN)
@@ -1932,42 +1924,32 @@
argv_printf_cat(&argv, "-iface %s", device);
}
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: MacOS X route add
-inet6 command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: MacOS X route add -inet6 command
failed");
#elif defined(TARGET_OPENBSD)
argv_printf(&argv, "%s add -inet6 %s -prefixlen %d %s", ROUTE_PATH,
network, r6->netbits,
gateway);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD route add
-inet6 command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: OpenBSD route add -inet6 command
failed");
#elif defined(TARGET_NETBSD)
argv_printf(&argv, "%s add -inet6 %s/%d %s", ROUTE_PATH, network,
r6->netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: NetBSD route add
-inet6 command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: NetBSD route add -inet6 command
failed");
#elif defined(TARGET_AIX)
argv_printf(&argv, "%s add -inet6 %s/%d %s", ROUTE_PATH, network,
r6->netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add
command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: AIX route add command failed");
#elif defined(TARGET_HAIKU)
/* ex: route add /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen 64 */
argv_printf(&argv, "%s add %s inet6 %s gw %s prefixlen %d", ROUTE_PATH,
r6->iface, network,
gateway, r6->netbits);
- argv_msg(D_ROUTE, &argv);
- bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet6 route
add command failed");
- status = ret ? RTA_SUCCESS : RTA_ERROR;
+ status = route_exec(&argv, es, "ERROR: Haiku inet6 route add command
failed");
#else /* if defined(TARGET_LINUX) */
msg(M_FATAL,
@@ -2086,22 +2068,19 @@
argv_printf(&argv, "%s delete %s -netmask %s %s", ROUTE_PATH, network,
netmask, gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route delete command
failed");
+ route_exec(&argv, es, "ERROR: Solaris route delete command failed");
#elif defined(TARGET_FREEBSD)
argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network,
gateway, netmask);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: FreeBSD route delete command
failed");
+ route_exec(&argv, es, "ERROR: FreeBSD route delete command failed");
#elif defined(TARGET_DRAGONFLY)
argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network,
gateway, netmask);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: DragonFly route delete command
failed");
+ route_exec(&argv, es, "ERROR: DragonFly route delete command failed");
#elif defined(TARGET_DARWIN)
@@ -2115,15 +2094,13 @@
argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network,
gateway, netmask);
}
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: OS X route delete command
failed");
+ route_exec(&argv, es, "ERROR: OS X route delete command failed");
#elif defined(TARGET_OPENBSD) || defined(TARGET_NETBSD)
argv_printf(&argv, "%s delete -net %s %s -netmask %s", ROUTE_PATH,
network, gateway, netmask);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD/NetBSD route delete
command failed");
+ route_exec(&argv, es, "ERROR: OpenBSD/NetBSD route delete command failed");
#elif defined(TARGET_ANDROID)
/* Avoids the unused variables warnings that all other platforms use
@@ -2138,8 +2115,7 @@
{
int netbits = netmask_to_netbits2(r->netmask);
argv_printf(&argv, "%s delete -net %s/%d %s", ROUTE_PATH, network,
netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: AIX route delete command
failed");
+ route_exec(&argv, es, "ERROR: AIX route delete command failed");
}
#elif defined(TARGET_HAIKU)
@@ -2147,8 +2123,7 @@
/* ex: route delete /dev/net/ipro1000/0 inet 192.168.0.0 gw 192.168.1.1
netmask 255.255.0.0 */
argv_printf(&argv, "%s delete %s inet %s gw %s netmask %s", ROUTE_PATH,
rgi->iface, network,
gateway, netmask);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet route delete command
failed");
+ route_exec(&argv, es, "ERROR: Haiku inet route delete command failed");
#else /* if defined(TARGET_LINUX) */
msg(M_FATAL,
@@ -2255,8 +2230,7 @@
argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network,
r6->netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route delete -inet6
command failed");
+ route_exec(&argv, es, "ERROR: Solaris route delete -inet6 command failed");
#elif defined(TARGET_FREEBSD) || defined(TARGET_DRAGONFLY)
@@ -2271,8 +2245,7 @@
argv_printf_cat(&argv, "-iface %s", device);
}
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: *BSD route delete -inet6
command failed");
+ route_exec(&argv, es, "ERROR: *BSD route delete -inet6 command failed");
#elif defined(TARGET_DARWIN)
@@ -2287,29 +2260,25 @@
argv_printf_cat(&argv, "-iface %s", device);
}
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: MacOS X route delete -inet6
command failed");
+ route_exec(&argv, es, "ERROR: MacOS X route delete -inet6 command failed");
#elif defined(TARGET_OPENBSD)
argv_printf(&argv, "%s delete -inet6 %s -prefixlen %d %s", ROUTE_PATH,
network, r6->netbits,
gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD route delete -inet6
command failed");
+ route_exec(&argv, es, "ERROR: OpenBSD route delete -inet6 command failed");
#elif defined(TARGET_NETBSD)
argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network,
r6->netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: NetBSD route delete -inet6
command failed");
+ route_exec(&argv, es, "ERROR: NetBSD route delete -inet6 command failed");
#elif defined(TARGET_AIX)
argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network,
r6->netbits, gateway);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: AIX route delete command
failed");
+ route_exec(&argv, es, "ERROR: AIX route delete command failed");
#elif defined(TARGET_ANDROID)
msg(D_ROUTE_DEBUG, "Deleting routes on Android is not possible/not "
@@ -2323,8 +2292,7 @@
/* ex: route delete /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen
64 */
argv_printf(&argv, "%s delete %s inet6 %s gw %s prefixlen %d", ROUTE_PATH,
r6->iface, network,
gateway, r6->netbits);
- argv_msg(D_ROUTE, &argv);
- openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet6 route delete
command failed");
+ route_exec(&argv, es, "ERROR: Haiku inet6 route delete command failed");
#else /* if defined(TARGET_LINUX) */
msg(M_FATAL,
--
To view, visit https://gerrit.openvpn.net/c/openvpn/+/2150?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.openvpn.net/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: Ie9b2723486214232aad33991b267dc0ff4d1c535
Gerrit-Change-Number: 2150
Gerrit-PatchSet: 1
Gerrit-Owner: Răzvan Cojocaru <[email protected]>
Gerrit-Reviewer: Arne Schwabe <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: Arne Schwabe <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel