Skip to content

Testing graphpath ASCII network diagram tool

This lab shows a jail/vnet-based topology used to test BSDRP's graphpath.

Overview

graphpath generates an ASCII network diagram of the path, seen from the host, from a source IP address toward a destination IP address.

To test this tool, we need to create a network topology that exercises all graphpath use cases.

Network diagram

graphpath.png

Setting up the lab

Downloading BSD Router Project images

Download the BSDRP serial image (which avoids the need for an X display).

Download lab scripts

More information on the BSDRP lab scripts is available in How to build a BSDRP router lab.

Start the lab with only one router. Example with bhyve under FreeBSD:

user:~ # tools/BSDRP-lab-bhyve.sh -i /usr/obj/BSDRPstable.amd64/BSDRP-1.801-full-amd64-serial.img.xz
BSD Router Project (http://bsdrp.net) - bhyve full-meshed lab script
Setting-up a virtual lab with 1 VM(s):
- Working directory: /tmp/BSDRP
- Each VM has 1 core(s) and 512M RAM
- Emulated NIC: virtio-net
- Switch mode: bridge + tap
- 1 LAN(s) between all VM
- Full mesh Ethernet links between each VM
VM 1 have the following NIC:
- vtnet0 connected to LAN number 1
For connecting to VM'serial console, you can use:
- VM 1 : cu -l /dev/nmdm1B

Network setup

From BSDRP, you can configure all of this with a single command:

labconfig graphpath

Host (me)

sysrc hostname="me"
sysrc cloned_interfaces="bridge1 bridge2 bridge11 bridge12 bridge21"
sysrc ifconfig_bridge1="inet 10.0.1.1/24"
sysrc ifconfig_bridge1_ipv6="inet6 2001:db8:1::1 prefixlen 64"
sysrc ifconfig_bridge2="inet 10.0.2.1/24"
sysrc ifconfig_bridge2_ipv6="inet6 2001:db8:2::1 prefixlen 64"
sysrc ifconfig_bridge11="up"
sysrc ifconfig_bridge12="up"
sysrc ifconfig_bridge21="up"
sysrc static_routes="host11 host12 host21"
sysrc route_host11="-net 10.0.11.0/24 10.0.1.11"
sysrc route_host12="-net 10.0.12.0/24 10.0.1.12"
sysrc route_host21="-net 10.0.21.0/24 10.0.2.21"
sysrc ipv6_static_routes="host11 host12 host21"
sysrc ipv6_route_host11="2001:db8:11:: -prefixlen 64 2001:db8:1::11"
sysrc ipv6_route_host12="2001:db8:12:: -prefixlen 64 2001:db8:1::12"
sysrc ipv6_route_host21="2001:db8:21:: -prefixlen 64 2001:db8:2::21"
hostname me
service netif restart
service routing restart

Jail host11

host11 is configured as a simple host:

tenant -c -j host11 -i bridge11
cat > /etc/jails/host11/rc.conf <<EOF
hostname="host11"
ifconfig_epair111b="inet 10.0.11.11/24"
ifconfig_epair111b_ipv6="inet6 2001:db8:11::11 prefixlen 64"
defaultrouter="10.0.11.254"
ipv6_defaultrouter="2001:db8:11::254"
EOF

Jail host12

host12 is configured as a simple host:

tenant -c -j host12 -i bridge12
cat > /etc/jails/host12/rc.conf <<EOF
hostname="host12"
ifconfig_epair212b="inet 10.0.12.12/24"
ifconfig_epair212b_ipv6="inet6 2001:db8:12::12 prefixlen 64"
defaultrouter="10.0.12.254"
ipv6_defaultrouter="2001:db8:12::254"
EOF

Jail router11

router11 is configured as a router:

tenant -c -j router11 -i bridge1,bridge11
cat > /etc/jails/router11/rc.conf <<EOF
hostname="router11"
gateway_enable=YES
ipv6_gateway_enable=YES
ifconfig_epair31b="inet 10.0.1.11/24"
ifconfig_epair31b_ipv6="inet6 2001:db8:1::11 prefixlen 64"
ifconfig_epair311b="inet 10.0.11.254/24"
ifconfig_epair311b_ipv6="inet6 2001:db8:11::254 prefixlen 64"
defaultrouter="10.0.1.1"
ipv6_defaultrouter="2001:db8:1::1"
EOF

Jail router12

router12 is configured as a router:

tenant -c -j router12 -i bridge1,bridge12
cat > /etc/jails/router12/rc.conf <<EOF
hostname=router12
gateway_enable=YES
ipv6_gateway_enable=YES
ifconfig_epair41b="inet 10.0.1.12/24"
ifconfig_epair41b_ipv6="inet6 2001:db8:1::12 prefixlen 64"
ifconfig_epair412b="inet 10.0.12.254/24"
ifconfig_epair412b_ipv6="inet6 2001:db8:12::254 prefixlen 64"
defaultrouter="10.0.1.1"
ipv6_defaultrouter="2001:db8:1::1"
EOF

Jail router21

router21 is configured as a router:

tenant -c -j router21 -i bridge2,bridge21
cat > /etc/jails/router21/rc.conf <<EOF
hostname="router21"
gateway_enable=YES
ipv6_gateway_enable=YES
ifconfig_epair52b="inet 10.0.2.21/24"
ifconfig_epair52b_ipv6="inet6 2001:db8:2::21 prefixlen 64"
ifconfig_epair521b="inet 10.0.21.254/24"
ifconfig_epair521b_ipv6="inet6 2001:db8:21::254 prefixlen 64"
defaultrouter="10.0.2.1"
ipv6_defaultrouter="2001:db8:2::1"
EOF

Jail host21

host21 is configured as a simple host:

tenant -c -j host21 -i bridge21
cat > /etc/jails/host21/rc.conf <<EOF
hostname="host21"
ifconfig_epair621b="inet 10.0.21.21/24"
ifconfig_epair621b_ipv6="inet6 2001:db8:21::21 prefixlen 64"
defaultrouter="10.0.21.254"
ipv6_defaultrouter="2001:db8:21::254"
EOF

Start the jails

[root@me]~# service jail start
Starting jails:epair111a: Ethernet address: 02:ff:c0:00:09:0a
epair111b: Ethernet address: 02:00:90:00:0a:0b
epair212a: Ethernet address: 02:ff:c0:00:0b:0a
epair212b: Ethernet address: 02:00:90:00:0c:0b
epair31a: Ethernet address: 02:ff:c0:00:0a:0a
epair31b: Ethernet address: 02:00:90:00:0d:0b
epair41a: Ethernet address: 02:ff:c0:00:0c:0a
epair41b: Ethernet address: 02:00:90:00:0e:0b
epair311a: Ethernet address: 02:ff:c0:00:0f:0a
epair311b: Ethernet address: 02:00:90:00:10:0b
epair52a: Ethernet address: 02:ff:c0:00:11:0a
epair52b: Ethernet address: 02:00:90:00:12:0b
epair412a: Ethernet address: 02:ff:c0:00:13:0a
epair412b: Ethernet address: 02:00:90:00:14:0b
epair621a: Ethernet address: 02:ff:c0:00:0d:0a
epair621b: Ethernet address: 02:00:90:00:10:0b
epair521a: Ethernet address: 02:ff:c0:00:15:0a
epair521b: Ethernet address: 02:00:90:00:16:0b
 host11 host12 host21 router21 router11 router12.

Test that host11 can reach host21:

[root@me]~# jexec host11 traceroute 10.0.21.21
traceroute to 10.0.21.21 (10.0.21.21), 64 hops max, 40 byte packets
 1  10.0.11.254 (10.0.11.254)  0.055 ms  0.051 ms  0.039 ms
 2  10.0.1.1 (10.0.1.1)  0.043 ms  0.048 ms  0.041 ms
 3  10.0.2.21 (10.0.2.21)  0.044 ms  0.056 ms  0.043 ms
 4  10.0.21.21 (10.0.21.21)  0.047 ms  0.052 ms  0.045 ms
[root@me]~# jexec host11 traceroute6 2001:db8:21::21
traceroute6 to 2001:db8:21::21 (2001:db8:21::21) from 2001:db8:11::11, 64 hops max, 20 byte packets
 1  2001:db8:11::254  0.127 ms  0.103 ms  0.091 ms
 2  2001:db8:1::1  0.101 ms  0.106 ms  0.094 ms
 3  2001:db8:2::21  0.139 ms  0.108 ms  0.098 ms
 4  2001:db8:21::21  0.159 ms  0.112 ms  0.102 ms

Testing graphpath

Now, from the main host, we can generate some ASCII network diagrams.

IPv4

[root@me]~# ping -c 1 10.0.11.11
[root@me]~# ping -c 1 10.0.12.12
[root@me]~# ping -c 1 10.0.21.21
[root@me]~# graphpath 10.0.11.11 10.0.12.12
+-----------------------------+  +-----------------------------+
| SOURCE HOST                 |  | DESTINATION HOST            |
| IP:   10.0.11.11            |  | IP:   10.0.12.12            |
+-----------------------------+  +-----------------------------+
              |                            |
+-----------------------------+  +-----------------------------+
| ROUTER TOWARDS SOURCE       |  | ROUTER TOWARDS DESTINATION  |
| IP:   10.0.1.11             |  | IP:   10.0.1.12             |
| ARP:  02:01:6c:01:b0:03     |  | ARP:  02:01:6c:01:b0:04     |
+-----------------------------+  +-----------------------------+
              |                            |
            --+---+------------------------+---
                  |
+-----------------------------+
| IF:   bridge1               |
| MAC:  02:e7:49:ed:fc:01     |
| IP:   10.0.1.1              |
| net:  10.0.11.0             |
| mask: 255.255.255.0         |
|                             |
|         THIS ROUTER         |
+-----------------------------+

[root@me]~# graphpath 10.0.11.11 10.0.21.21
+-----------------------------+
| SOURCE HOST                 |
| IP:   10.0.11.11            |
+-----------------------------+
              |
+-----------------------------+
| ROUTER TOWARDS SOURCE       |
| IP:   10.0.1.11             |
| ARP:  02:01:6c:01:b0:03     |
+-----------------------------+
              |
+-----------------------------+
| IF:   bridge1               |
| MAC:  02:e7:49:ed:fc:01     |
| IP:   10.0.1.1              |
| net:  10.0.11.0             |
| mask: 255.255.255.0         |
|                             |
|         THIS ROUTER         |
|                             |
| net:  10.0.21.0             |
| mask: 255.255.255.0         |
| IP:   10.0.2.1              |
| MAC:  02:e7:49:ed:fc:02     |
| IF:   bridge2               |
+-----------------------------+
              |
+-----------------------------+
| ROUTER TOWARDS DESTINATION  |
| IP:   10.0.2.21             |
| ARP:  02:02:6c:01:b0:05     |
+-----------------------------+
              |
+-----------------------------+
| DESTINATION HOST            |
| IP:   10.0.21.21            |
+-----------------------------+

[root@me]~# graphpath 10.0.11.11 10.0.1.12
+-----------------------------+  +-----------------------------+
| SOURCE HOST                 |  | DESTINATION HOST            |
| IP:   10.0.11.11            |  | IP:   10.0.1.12             |
|                             |  | ARP:  02:01:6c:01:b0:04     |
+-----------------------------+  +-----------------------------+
              |                            |
+-----------------------------+            |
| ROUTER TOWARDS SOURCE       |            |
| IP:   10.0.1.11             |            |
| ARP:  02:01:6c:01:b0:03     |            |
+-----------------------------+            |
              |                            |
            --+---+------------------------+---
                  |
+-----------------------------+
| IF:   bridge1               |
| MAC:  02:e7:49:ed:fc:01     |
| IP:   10.0.1.1              |
| net:  10.0.11.0             |
| mask: 255.255.255.0         |
|                             |
|         THIS ROUTER         |
+-----------------------------+

[root@me]~#  graphpath 10.0.1.12 10.0.11.11
+-----------------------------+  +-----------------------------+
| SOURCE HOST                 |  | DESTINATION HOST            |
| IP:   10.0.1.12             |  | IP:   10.0.11.11            |
| ARP:  02:01:c9:01:b0:04     |  |                             |
+-----------------------------+  +-----------------------------+
              |                            |
              |                  +-----------------------------+
              |                  | ROUTER TOWARDS DESTINATION  |
              |                  | IP:   10.0.1.11             |
              |                  | ARP:  02:01:c9:01:b0:03     |
              |                  +-----------------------------+
              |                            |
            --+---+------------------------+---
                  |
+-----------------------------+
| IF:   bridge1               |
| MAC:  02:de:f2:41:54:01     |
| IP:   10.0.1.1              |
| net:  10.0.1.0              |
| mask: 255.255.255.0         |
|                             |
|         THIS ROUTER         |
+-----------------------------+

IPv6

[root@me]~# ping6 -c 1 2001:db8:11::11
[root@me]~# ping6 -c 1 2001:db8:12::12
[root@me]~# ping6 -c 1 2001:db8:21::21
[root@me]~# graphpath 2001:db8:11::11 2001:db8:12::12
+---------------------------------------------------+  +---------------------------------------------------+
| SOURCE HOST                                       |  | DESTINATION HOST                                  |
| IP:   2001:db8:11::11                             |  | IP:   2001:db8:12::12                             |
+---------------------------------------------------+  +---------------------------------------------------+
                         |                                                  |
+---------------------------------------------------+  +---------------------------------------------------+
| ROUTER TOWARDS SOURCE                             |  | ROUTER TOWARDS DESTINATION                        |
| IP:   2001:db8:1::11                              |  | IP:   2001:db8:1::12                              |
| NDP:  02:01:c9:01:b0:03                           |  | NDP:  02:01:c9:01:b0:04                           |
+---------------------------------------------------+  +---------------------------------------------------+
                         |                                                  |
                       --+---+----------------------------------------------+---
                             |
+---------------------------------------------------+
| IF:   bridge1                                     |
| MAC:  02:de:f2:41:54:01                           |
| IP:   2001:db8:1::1                               |
| net:  2001:db8:11::                               |
| mask: ffff:ffff:ffff:ffff::                       |
|                                                   |
|                    THIS ROUTER                    |
+---------------------------------------------------+

[root@me]~# graphpath 2001:db8:11::11 2001:db8:21::21
+---------------------------------------------------+
| SOURCE HOST                                       |
| IP:   2001:db8:11::11                             |
+---------------------------------------------------+
                         |
+---------------------------------------------------+
| ROUTER TOWARDS SOURCE                             |
| IP:   2001:db8:1::11                              |
| NDP:  02:01:c9:01:b0:03                           |
+---------------------------------------------------+
                         |
+---------------------------------------------------+
| IF:   bridge1                                     |
| MAC:  02:de:f2:41:54:01                           |
| IP:   2001:db8:1::1                               |
| net:  2001:db8:11::                               |
| mask: ffff:ffff:ffff:ffff::                       |
|                                                   |
|                    THIS ROUTER                    |
|                                                   |
| net:  2001:db8:21::                               |
| mask: ffff:ffff:ffff:ffff::                       |
| IP:   2001:db8:2::1                               |
| MAC:  02:de:f2:41:54:02                           |
| IF:   bridge2                                     |
+---------------------------------------------------+
                         |
+---------------------------------------------------+
| ROUTER TOWARDS DESTINATION                        |
| IP:   2001:db8:2::21                              |
| NDP:  02:02:c9:01:b0:05                           |
+---------------------------------------------------+

[root@me]~# graphpath 2001:db8:11::11 2001:db8:1::12
+---------------------------------------------------+  +---------------------------------------------------+
| SOURCE HOST                                       |  | DESTINATION HOST                                  |
| IP:   2001:db8:11::11                             |  | IP:   2001:db8:1::12                              |
|                                                   |  | NDP:  02:01:c9:01:b0:04                           |
+---------------------------------------------------+  +---------------------------------------------------+
                         |                                                  |
+---------------------------------------------------+                       |
| ROUTER TOWARDS SOURCE                             |                       |
| IP:   2001:db8:1::11                              |                       |
| NDP:  02:01:c9:01:b0:03                           |                       |
+---------------------------------------------------+                       |
                         |                                                  |
                       --+---+----------------------------------------------+---
                             |
+---------------------------------------------------+
| IF:   bridge1                                     |
| MAC:  02:de:f2:41:54:01                           |
| IP:   2001:db8:1::1                               |
| net:  2001:db8:11::                               |
| mask: ffff:ffff:ffff:ffff::                       |
|                                                   |
|                    THIS ROUTER                    |
+---------------------------------------------------+

[root@me]~# graphpath 2001:db8:1::12 2001:db8:11::11
+---------------------------------------------------+  +---------------------------------------------------+
| SOURCE HOST                                       |  | DESTINATION HOST                                  |
| IP:   2001:db8:1::12                              |  | IP:   2001:db8:11::11                             |
| NDP:  02:01:c9:01:b0:04                           |  |                                                   |
+---------------------------------------------------+  +---------------------------------------------------+
                         |                                                  |
                         |                             +---------------------------------------------------+
                         |                             | ROUTER TOWARDS DESTINATION                        |
                         |                             | IP:   2001:db8:1::11                              |
                         |                             | NDP:  02:01:c9:01:b0:03                           |
                         |                             +---------------------------------------------------+
                         |                                                  |
                       --+---+----------------------------------------------+---
                             |
+---------------------------------------------------+
| IF:   bridge1                                     |
| MAC:  02:de:f2:41:54:01                           |
| IP:   2001:db8:1::1                               |
| net:  2001:db8:1::                                |
| mask: ffff:ffff:ffff:ffff::                       |
|                                                   |
|                    THIS ROUTER                    |
+---------------------------------------------------+