summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.php.example6
-rw-r--r--docs/configuration.md13
-rw-r--r--routers/bird.php58
-rw-r--r--routers/cisco.php12
-rw-r--r--routers/juniper.php23
-rw-r--r--routers/quagga.php58
6 files changed, 149 insertions, 21 deletions
diff --git a/config.php.example b/config.php.example
index 1126988..107ff1d 100644
--- a/config.php.example
+++ b/config.php.example
@@ -38,6 +38,8 @@ $config['routers']['router1']['pass'] = 'readonlypassword';
$config['routers']['router1']['auth'] = 'ssh-password';
// The router type (can be cisco, ios, juniper or junos)
$config['routers']['router1']['type'] = 'juniper';
+// The router source interface to be used
+$config['routers']['router1']['source-interface-id'] = 'lo0';
// The router description to be displayed in the router list
$config['routers']['router1']['desc'] = 'Example\'s Router 1';
@@ -54,6 +56,8 @@ $config['routers']['router2']['pass'] = 'mypassphrase';
$config['routers']['router2']['auth'] = 'ssh-key';
// The router type (can be cisco, ios, juniper or junos)
$config['routers']['router2']['type'] = 'juniper';
+// The router source interface to be used
+$config['routers']['router2']['source-interface-id'] = 'lo0';
// The router description to be displayed in the router list
$config['routers']['router2']['desc'] = 'Example\'s Router 2';
@@ -68,6 +72,8 @@ $config['routers']['router3']['pass'] = 'birduserpassword';
$config['routers']['router3']['auth'] = 'ssh-password';
// The router type (can only be bird)
$config['routers']['router3']['type'] = 'bird';
+// The router source address to be used
+$config['routers']['router3']['source-interface-id'] = '192.168.1.1';
// The router description to be displayed in the router list
$config['routers']['router3']['desc'] = 'Example\'s Router 3';
diff --git a/docs/configuration.md b/docs/configuration.md
index 8391492..39257da 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -107,6 +107,19 @@ $config['routers']['router1']['type'] = 'juniper';
The router type can be Juniper, Cisco, Quagga or BIRD. You can take a look at
the specific documentation for your router.
+It is also highly recommended to specify a source interface ID to be used by
+the router when it will try to ping or traceroute a destination. This is done
+with:
+
+```php
+$config['routers']['router1']['source-interface-id'] = 'lo0';
+```
+for Cisco and Juniper routers (change lo0 with your interface), and with:
+```php
+$config['routers']['router1']['source-interface-id'] = '192.168.1.1';
+```
+for BIRD and Quagga routers (use your own IP address).
+
After that you need to set the authentication information for the looking
glass to be able to log into the router. For this you select a type of
authentication and then supply the needed information.
diff --git a/routers/bird.php b/routers/bird.php
index b86315b..71a8602 100644
--- a/routers/bird.php
+++ b/routers/bird.php
@@ -63,10 +63,23 @@ final class Bird 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);
@@ -75,9 +88,17 @@ final class Bird 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.');
@@ -85,10 +106,23 @@ final class Bird 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);
@@ -97,9 +131,17 @@ final class Bird 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.');
diff --git a/routers/cisco.php b/routers/cisco.php
index bc34653..285653a 100644
--- a/routers/cisco.php
+++ b/routers/cisco.php
@@ -57,7 +57,11 @@ final class Cisco extends Router {
case 'ping':
if (match_ipv4($parameters) || match_ipv6($parameters) || match_fqdn($parameters)) {
- $commands[] = 'ping '.$parameters.' repeat 10';
+ $ping = 'ping '.$parameters.' repeat 10';
+ if (isset($this->config['source-interface-id'])) {
+ $ping .= ' source '.$this->config['source-interface-id'];
+ }
+ $commands[] = $ping;
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address.');
}
@@ -65,7 +69,11 @@ final class Cisco extends Router {
case 'traceroute':
if (match_ipv4($parameters) || match_ipv6($parameters) || match_fqdn($parameters)) {
- $commands[] = 'traceroute '.$parameters;
+ $traceroute = 'traceroute '.$parameters;
+ if (isset($this->config['source-interface-id'])) {
+ $traceroute .= ' source '.$this->config['source-interface-id'];
+ }
+ $commands[] = $traceroute;
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address.');
}
diff --git a/routers/juniper.php b/routers/juniper.php
index 6c6acf7..fefdf1c 100644
--- a/routers/juniper.php
+++ b/routers/juniper.php
@@ -64,17 +64,34 @@ final class Juniper extends Router {
case 'ping':
if (match_ipv4($parameters) || match_ipv6($parameters) ||
match_fqdn($parameters)) {
- $commands[] = 'ping count 10 '.$parameters.' rapid';
+ $ping = 'ping count 10 rapid '.$parameters;
+ if (isset($this->config['source-interface-id'])) {
+ $ping .= ' interface '.$this->config['source-interface-id'];
+ }
+ $commands[] = $ping;
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.');
}
break;
case 'traceroute':
+ $append = null;
+ if (isset($this->config['source-interface-id'])) {
+ $append = ' interface '.$this->config['source-interface-id'];
+ }
+
if (match_ipv4($parameters)) {
- $commands[] = 'traceroute '.$parameters.' as-number-lookup';
+ $traceroute = 'traceroute as-number-lookup '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] = $traceroute;
} else if (match_ipv6($parameters) || match_fqdn($parameters)) {
- $commands[] = 'traceroute '.$parameters;
+ $traceroute = 'traceroute '.$parameters;
+ if ($append != null) {
+ $traceroute .= $append;
+ }
+ $commands[] = $traceroute;
} else {
throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.');
}
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.');