Attention is currently required from: flichtenheld, plaisthos. Hello plaisthos, flichtenheld,
I'd like you to do a code review. Please visit http://gerrit.openvpn.net/c/openvpn/+/677?usp=email to review the following change. Change subject: route: copied 'gateway_needed' logic from add_route_ipv6 to add_route ...................................................................... route: copied 'gateway_needed' logic from add_route_ipv6 to add_route Under certain circumstances it may not be necessary to pass the gateway when adding a new route via net_route_v4_add() API function. add_route_ipv6() already accounts for some of these cases and therefore this patch copies the same logic to add_route(). Change-Id: Id1ec0c6e4c391604ec5dbb8b7122f2e47ad186d1 Signed-off-by: Marco Baffo <ma...@mandelbit.com> --- M src/openvpn/route.c 1 file changed, 31 insertions(+), 3 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/77/677/1 diff --git a/src/openvpn/route.c b/src/openvpn/route.c index 91f2032..bc8f561 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -1571,6 +1571,7 @@ { int status = 0; int is_local_route; + bool gateway_needed = false; if (!(r->flags & RT_DEFINED)) { @@ -1580,8 +1581,20 @@ struct argv argv = argv_new(); struct gc_arena gc = gc_new(); -#if !defined(TARGET_LINUX) +#if defined(TARGET_LINUX) + const char *iface = tt->actual_name; + if (rgi && rgi->iface[0] != '\0') /* vpn server special route */ + { + iface = rgi->iface; + if (r->gateway != 0) + { + gateway_needed = true; + } + } +#endif + const char *network = print_in_addr_t(r->network, 0, &gc); +#if !defined(TARGET_LINUX) #if !defined(TARGET_AIX) const char *netmask = print_in_addr_t(r->netmask, 0, &gc); #endif @@ -1594,8 +1607,22 @@ goto done; } + if (tt->type == DEV_TYPE_TAP && !(r->flags & RT_METRIC_DEFINED && r->metric == 0)) + { + gateway_needed = true; + } + + if (gateway_needed && r->gateway == 0) + { + msg(M_WARN, "ROUTE WARNING: " PACKAGE_NAME " needs a gateway " + "parameter for a --route option and no default was set via " + "--route-gateway or --ifconfig option. Not installing " + "IPv4 route to %s/%d.", network, netmask_to_netbits2(r->netmask)); + status = 0; + goto done; + } + #if defined(TARGET_LINUX) - const char *iface = NULL; int metric = -1; if (is_on_link(is_local_route, flags, rgi)) @@ -1610,7 +1637,8 @@ status = RTA_SUCCESS; int ret = net_route_v4_add(ctx, &r->network, netmask_to_netbits2(r->netmask), - &r->gateway, iface, 0, metric); + gateway_needed ? &r->gateway : NULL, + iface, 0, metric); if (ret == -EEXIST) { msg(D_ROUTE, "NOTE: Linux route add command failed because route exists"); -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/677?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: Id1ec0c6e4c391604ec5dbb8b7122f2e47ad186d1 Gerrit-Change-Number: 677 Gerrit-PatchSet: 1 Gerrit-Owner: mrbff <ma...@mandelbit.com> Gerrit-Reviewer: flichtenheld <fr...@lichtenheld.com> Gerrit-Reviewer: plaisthos <arne-open...@rfc2549.org> Gerrit-CC: openvpn-devel <openvpn-devel@lists.sourceforge.net> Gerrit-Attention: plaisthos <arne-open...@rfc2549.org> Gerrit-Attention: flichtenheld <fr...@lichtenheld.com> Gerrit-MessageType: newchange
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel