often it is very good for the understanding of a mesh network to have
the ability to show the network topology graphically. newer versions of
OLSR (<=0.4.6) have a plugin which outputs the topology in the
dot file format on localhost(!) port 2004/tcp. the
graphviz tools can then be used to draw the graphs. for now you can only get the topology of the local machine!
first install the following packages
-
graphviz
-
imagemagick
you have to compile the libraries seperately and install them
make libs make install_libs
to load the plugin add the following line to /etc/olsrd.conf
LOAD_PLUGIN olsrd_dot_draw.so.0.1
then restart olsr and check if you get output on port 2004
telnet localhost 2004after a while you should get some text output
now you can use the following script to automatically draw a new picture of the topology to the screen when something changes:
#!/usr/bin/perl
use IO::Socket;
$TOPPATH = "/tmp";
$NAME = "topology";
$FILENAME = "$TOPPATH/$NAME.dot";
$EXT = "png";
`touch $TOPPATH/$NAME.$EXT`;
$remote = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "localhost",
PeerPort => "2004",
)
or die "cannot connect to daytime port at localhost";
$f;
system "display -backdrop -size 1024x800 -geometry 1024x800 -update 5 $TOPPATH/$NAME.$EXT &";
while ( <$remote> ) {
$line = $_;
$f = $f . $line;
if ( $line =~ /}/i ) {
print "* ";
open DOTFILE, ">$FILENAME";
print DOTFILE $f;
close DOTFILE;
$f = "";
`neato -Tpng -Gsize=9,6 -Gbgcolor=black -Gsplines=true -Nstyle=filled -Nfontsize=15 -Ncolor=white -Nfillcolor=white -Nfontname=verdana -Ecolor=grey -Elen=4 -Earrowsize=2 $FILENAME -o $TOPPATH/$NAME.new`;
`mv $TOPPATH/$NAME.new $TOPPATH/$NAME.$EXT`;
`cp $TOPPATH/$NAME.dot $TOPPATH/$NAME-\$(date +'%Y-%m-%d-%H-%M-%S').dot`;
}
}
it is also here: Upload new attachment "oslrd_dot_file.pl"
