GitHunt
MM

mmitch/bgpgraph

graph BGP network and routing information from Bird and Quagga/vtysh

bgpgraph - print a network graph of routing information

Build status
GPL 3+

license/copyright

Copyright (C) 2011-2026 Christian Garbs mitch@cgarbs.de
Licensed under GNU GPL 3 or later.

bgpgraph is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

bgpgraph is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with bgpgraph. If not, see http://www.gnu.org/licenses/.

project homepage

https://github.com/mmitch/bgpgraph

dependencies

usage

Run

vtysh -c 'show ip bgp' | vtysh_bgp_to_dot 1234 | dot -Tpng > graph.png

to generate a graph, where 1234 is your local AS and graph.png
will be the generated graph. You need read-access with vtysh, of
course.

excluding the local node from the graph

If you pass no local AS to vtysh_bgp_to_dot, the local node will
not be included in the generated graph:

vtysh -c 'show ip bgp' | vtysh_bgp_to_dot | dot -Tpng > graph_without_local_node.png

using BIRD instead of quagga

Use the scripts birdc_bgp_to_dot or bird2c_bgp_to_dot instead
of vtysh_bgp_to_dot.

add information to the nodes in the graph

If there is an info.conf in your current directory, it will be
read to spice up the graph. The format of info.conf is whitespace
delimited fields:

  • First field contains an AS number.
  • Second field contains a name describing the AS.
  • Third field optionally contains a flag for marking a node in the output.

example info.conf

60001  this_is_me
60002  Network_A
60003  Network_B  important
60004  Network_C

This configuration will add labels to the graph nodes 60001 to 60004
and mark the node 60003 as important.

add status information to the graph

If you want to add additional information to the generated graph, you
could use convert from the Imagemagick
package like this:

vtysh -c 'show ip bgp' | ./vtysh_bgp_to_dot 60001 | dot -Tpng | \
convert - \
        -gravity Southwest -background white -splice 0x25 \
        -annotate +0+2 "  `hostname -f` - `date`  " graph.png

This will add a status text to the bottom of the graph containing the
hostname and the current date.

remote operation

As vtysh_bgp_to_dot reads from stdin, it does not need to be
installed on your router.

If you have SSH access to the router, you can execute vtysh
remotely and execute everything else locally like this:

ssh user@router 'vtysh -c "show ip bgp"' | vtysh_bgp_to_dot | ...

You can use the command= setting in ~/.ssh/authorized_keys to
enable key-based login without password while restricting access to
the vtysh command.

Instead of SSH you could also use netcat and (x)inetd or a
cronjob plus some sort of network file exchange or even send the
vtysh output by email and process it with procmail or
maildrop.

mmitch/bgpgraph | GitHunt