Send connman mailing list submissions to
        connman@lists.01.org

To subscribe or unsubscribe via email, send a message with subject or
body 'help' to
        connman-requ...@lists.01.org

You can reach the person managing the list at
        connman-ow...@lists.01.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."

Today's Topics:

   1. [PATCH] openvpn: Add support for --ping, --ping-exit and --remap-usr1
      (Jussi Laakkonen)


----------------------------------------------------------------------

Date: Wed, 21 Oct 2020 14:57:18 +0300
From: Jussi Laakkonen <jussi.laakko...@jolla.com>
Subject: [PATCH] openvpn: Add support for --ping, --ping-exit and
        --remap-usr1
To: connman@lists.01.org
Message-ID: <20201021115718.22781-1-jussi.laakko...@jolla.com>

[openvpn] Add support for --ping, --ping-exit and --remap-usr1. Fixes JB#51497

Add support for --ping (OpenVPN.Ping) and --ping-exit (OpenVPN.PingExit)
configuration values. Set defaults of 10 for ping and 60 for ping exit
from https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage

Set --ping-restart only with TCP since with UDP it is more feasible to
use --ping and --ping-exit with the default values if the values are
unset. If with TCP --ping-exit is set ignore --ping-restart as the values
are mutually exclusive.

Add --remap-usr1 option which remaps SIGUSR1 as SIGHUP/SIGTERM in order
to restart the process when errors are detected. OpenVPN does handle
some errors internally and it may not always be good with ConnMan
monitoring it.
---
 vpn/plugins/openvpn.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/vpn/plugins/openvpn.c b/vpn/plugins/openvpn.c
index abbf20d4..f11750f5 100644
--- a/vpn/plugins/openvpn.c
+++ b/vpn/plugins/openvpn.c
@@ -83,6 +83,9 @@ struct {
        { "OpenVPN.ConfigFile", "--config", 1 },
        { "OpenVPN.DeviceType", NULL, 1 },
        { "OpenVPN.Verb", "--verb", 1 },
+       { "OpenVPN.Ping", "--ping", 1},
+       { "OpenVPN.PingExit", "--ping-exit", 1},
+       { "OpenVPN.RemapUsr1", "--remap-usr1", 1},
 };
 
 struct ov_private_data {
@@ -496,16 +499,13 @@ static int run_connect(struct ov_private_data *data,
        connman_task_add_argument(task, "--ifconfig-noexec", NULL);
 
        /*
-        * Disable client restarts because we can't handle this at the
-        * moment. The problem is that when OpenVPN decides to switch
+        * Disable client restarts with TCP because we can't handle this at
+        * the moment. The problem is that when OpenVPN decides to switch
         * from CONNECTED state to RECONNECTING and then to RESOLVE,
         * it is not possible to do a DNS lookup. The DNS server is
         * not accessible through the tunnel anymore and so we end up
         * trying to resolve the OpenVPN servers address.
-        */
-       connman_task_add_argument(task, "--ping-restart", "0");
-
-       /*
+        *
         * Disable connetion retrying when OpenVPN is connected over TCP.
         * With TCP OpenVPN attempts to handle reconnection silently without
         * reporting the error back when establishing a connection or
@@ -515,8 +515,24 @@ static int run_connect(struct ov_private_data *data,
         * including DNS.
        */
        option = vpn_provider_get_string(provider, "OpenVPN.Proto");
-       if (option && g_str_has_prefix(option, "tcp"))
+       if (option && g_str_has_prefix(option, "tcp")) {
+               option = vpn_provider_get_string(provider, "OpenVPN.PingExit");
+               if (!option)
+                       connman_task_add_argument(task, "--ping-restart", "0");
+
                connman_task_add_argument(task, "--connect-retry-max", "1");
+       /* Apply defaults for --ping and --ping-exit only with UDP protocol. */
+       } else {
+               /* Apply default of 10 second interval for ping if omitted. */
+               option = vpn_provider_get_string(provider, "OpenVPN.Ping");
+               if (!option)
+                       connman_task_add_argument(task, "--ping", "10");
+
+               /* Apply default of 60 seconds for ping exit if omitted. */
+               option = vpn_provider_get_string(provider, "OpenVPN.PingExit");
+               if (!option)
+                       connman_task_add_argument(task, "--ping-exit", "60");
+       }
 
        err = connman_task_run(task, ov_died, data, NULL, NULL, NULL);
        if (err < 0) {
-- 
2.20.1

------------------------------

Subject: Digest Footer

_______________________________________________
connman mailing list -- connman@lists.01.org
To unsubscribe send an email to connman-le...@lists.01.org


------------------------------

End of connman Digest, Vol 60, Issue 21
***************************************

Reply via email to