luci-mod-network: diagnostics: peg max traceroute hops to rpc timeout
authorJo-Philipp Wich <jo@mein.io>
Wed, 27 Apr 2022 18:43:05 +0000 (20:43 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 27 Apr 2022 18:43:05 +0000 (20:43 +0200)
In the worst case, traceroute might take up to 30s to complete when tracing
a completely unreachable path, due to the default limit of 30 hops multiplied
by the per-hop deadline of 1 second (-w 1).

Limit the maximum amount of hops to the configured rpc execution timeout,
20 second by default, in order to avoid running into timed out rpc requests.

Fixes: #5782
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js

index 50ab6ef77ce5eaec64b8896b20438edd037398dd..da7cd95bdc7ae8efbd2aa3f83746c4191747ebd8 100644 (file)
@@ -29,7 +29,7 @@ return view.extend({
        handlePing: function(ev, cmd) {
                var exec = cmd || 'ping',
                    addr = ev.currentTarget.parentNode.previousSibling.value,
-                   args = (exec == 'ping') ? [ '-4', '-c', '5', '-W', '1', addr ] : [ '-c', '5', addr ];
+                   args = (exec == 'ping') ? [ '-4', '-c', '5', '-W', '1', addr ] : [ '-6', '-c', '5', addr ];
 
                return this.handleCommand(exec, args);
        },
@@ -37,7 +37,7 @@ return view.extend({
        handleTraceroute: function(ev, cmd) {
                var exec = cmd || 'traceroute',
                    addr = ev.currentTarget.parentNode.previousSibling.value,
-                   args = (exec == 'traceroute') ? [ '-4', '-q', '1', '-w', '1', '-n', addr ] : [ '-q', '1', '-w', '2', '-n', addr ];
+                   args = (exec == 'traceroute') ? [ '-4', '-q', '1', '-w', '1', '-n', '-m', String(L.env.rpctimeout || 20), addr ] : [ '-q', '1', '-w', '2', '-n', addr ];
 
                return this.handleCommand(exec, args);
        },