summaryrefslogtreecommitdiff
path: root/routers/quagga.php
diff options
context:
space:
mode:
Diffstat (limited to 'routers/quagga.php')
-rw-r--r--routers/quagga.php58
1 files changed, 50 insertions, 8 deletions
diff --git a/routers/quagga.php b/routers/quagga.php
index 9d7ee77..d12c9e3 100644
--- a/routers/quagga.php
+++ b/routers/quagga.php
@@ -58,10 +58,23 @@ final class Quagga extends Router {
break;
case 'ping':
+ $append = null;
+ if (isset($this->config['source-interface-id'])) {
+ $append = ' -I '.$this->config['source-interface-id'];
+ }
+
if (match_ipv4($parameters)) {
- $commands[] = 'ping -A -c 10 '.$parameters;
+ $ping = 'ping -A -c 10 '.$parameters;
+ if ($append != null) {
+ $ping .= $append;
+ }
+ $commands[] = $ping;
} else if (match_ipv6($parameters)) {
- $commands[] = 'ping6 -A -c 10 '.$parameters;
+ $ping = 'ping6 -A -c 10 '.$parameters;
+ if ($append != null) {
+ $ping .= $append;
+ }
+ $commands[] = $ping;
} else if (match_fqdn($parameters)) {
$ip_address = fqdn_to_ip_address($parameters);
@@ -70,9 +83,17 @@ final class Quagga extends Router {
}
if (match_ipv4($ip_address)) {
- $commands[] = 'ping -A -c 10 '.$parameters;
+ $ping = 'ping -A -c 10 '.$parameters;
+ if ($append != null) {
+ $ping .= $append;
+ }
+ $commands[] = $ping;
} else if (match_ipv6($ip_address)) {
- $commands[] = 'ping6 -A -c 10 '.$parameters;
+ $ping = 'ping6 -A -c 10 '.$parameters;
+ if ($append != null) {
+ $ping .= $append;
+ }
+ $commands[] = $ping;
}
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address.');
@@ -80,10 +101,23 @@ final class Quagga extends Router {
break;
case 'traceroute':
+ $append = null;
+ if (isset($this->config['source-interface-id'])) {
+ $append = ' -s '.$this->config['source-interface-id'];
+ }
+
if (match_ipv4($parameters)) {
- $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters;
+ $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] .= $traceroute;
} else if (match_ipv6($parameters)) {
- $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters;
+ $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] = $traceroute;
} else if (match_fqdn($parameters)) {
$ip_address = fqdn_to_ip_address($parameters);
@@ -92,9 +126,17 @@ final class Quagga extends Router {
}
if (match_ipv4($ip_address)) {
- $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters;
+ $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] .= $traceroute;
} else if (match_ipv6($ip_address)) {
- $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters;
+ $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] = $traceroute;
}
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address.');