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

Reply via email to