Add ProcessPriority option.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 28 May 2009 20:51:30 +0000 (22:51 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 28 May 2009 20:51:30 +0000 (22:51 +0200)
This option can be set to low, normal or high. On UNIX flavours, this changes
the nice value of the process by +10, 0 and -10 respectively. On Windows, it
sets the priority to BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS and
HIGH_PRIORITY_CLASS respectively.

A high priority might help to reduce latency and packet loss on the VPN.

doc/tinc.conf.5.in
doc/tinc.texi
src/tincd.c

index b3b94f8..223005f 100644 (file)
@@ -304,6 +304,10 @@ or
 .Va PrivateKeyFile
 specified in the configuration file.
 
+.It Va ProcessPriority Li = low | normal | high
+When this option is used the priority of the tincd process will be adjusted.
+Increasing the priority may help to reduce latency and packet loss on the VPN.
+
 .It Va TunnelServer Li = yes | no Po no Pc Bq experimental
 When this option is enabled tinc will no longer forward information between other tinc daemons,
 and will only allow nodes and subnets on the VPN which are present in the
index 23aa43d..5cd4a40 100644 (file)
@@ -929,6 +929,11 @@ Note that there must be exactly one of PrivateKey
 or PrivateKeyFile
 specified in the configuration file.
 
+@cindex ProcessPriority
+@item ProcessPriority = <low|normal|high>
+When this option is used the priority of the tincd process will be adjusted.
+Increasing the priority may help to reduce latency and packet loss on the VPN.
+
 @cindex TunnelServer
 @item TunnelServer = <yes|no> (no) [experimental]
 When this option is enabled tinc will no longer forward information between other tinc daemons,
index 257f9e4..27cd01e 100644 (file)
@@ -580,6 +580,35 @@ int main2(int argc, char **argv)
        if(!setup_network())
                goto end;
 
+        /* Change process priority */
+
+        char *priority = 0;
+
+        if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
+                if(!strcasecmp(priority, "Normal")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
+#else
+                        nice(0);
+#endif
+                } else if(!strcasecmp(priority, "Low")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
+#else
+                        nice(10);
+#endif
+                } else if(!strcasecmp(priority, "High")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
+#else
+                        nice(-10);
+#endif
+                } else {
+                        logger(LOG_ERR, _("Invalid priority `%s`!"), priority);
+                        goto end;
+                }
+        }
+
        /* drop privileges */
        if (!drop_privs())
                goto end;