As a follow up to my previous post of the above topic, I finally put together a script. I have two scripts, one specifically written for the Internetworkexpert Dynamips topology. The second one can will log into any topology – it takes the name of the .net file as an argument for example:
$./tamonet.sh BGPlab.net
Just copy this code, put them in a file with the .sh extension and make then run them from a command line AFTER you have started your routers in GNS3.
#!/bin/bash
# The purpose of this scrip is to launch all running Dynamips router consoles in such a way that all consoles exist
# as tabs in a single terminal windows, rather than the
#default behavior to open multiple windows that just clutters the desktop.
#Script written by Mukom Akong TAMON [mukom to tamon at gmail dot com] .....
#Use and distribute freely .... just give me credit for creating it ok? ... ;-)
#Save this with an sh extension, make it executable and then you can run either from
#inside an existing terminal or you press ALT+F2 and then run it. You must pass it the name of the .net file of your current lab
#e.g ./tamonet.sh BGP-Lab01.net
#It is best if you copy the script so it is in the same directory as the directory in which the .net file is.
#Obviously, this script only works for Linux distributions that are using GNOME eg Ubuntu.
PORTS=/Users/mukom/tmp/ports
NAMES=/Users/mukom/tmp/devicenames
TELNETCMDS=/Users/mukom/tmp/telnetcmds
TELNETTABNAME1=/Users/mukom/tmp/telnettabname1 #Initial set of command arguments for gnome terminal
TELNETTABNAME2=/Users/mukom/tmp/telnettabname2 #Strip away the tab from the commands -- just in case
TELNETTABNAME=/Users/mukom/tmp/telnettabname #the commands sorted so we have things sequentially
LASTCMD=/Users/mukom/tmp/lastcmd.sh
#First delete the files if they exit
rm -f $PORTS
rm -f $NAMES
rm -f $TELNETTABNAME
rm -f $TELNETCMDS
rm -f $TELNETTABNAME1
rm -f $TELNETTABNAME2
rm -f $LASTCMD
#Xtract the ports from .net file and put them into ports file in /tmp
grep -E console $1 | sed s/console\ =\ // | tr -d [] | tr -s '[:blank:]' >> $PORTS
#Create corresponding file that containts the names
#grep -E ROUTER $1 | sed s/ROUTER\ // | tr -d [] | tr -s '[:blank:]' >> $NAMES
grep -E '\[\[ROUTER' $1 | sed s/ROUTER\ // | tr -d [] | tr -s '[:blank:]' >> $NAMES
#This block constructs the telnet commands for each router and writes them to $TELNETTABNAME
#inst=0
for i in $( cat $PORTS ); do
# let inst=inst+1
#echo >> $TELNETCMDS "telnet localhost $i -t"
# echo >> $TELNETCMDS "\"telnet localhost $i\" -t"
echo >> $TELNETCMDS "\"telnet localhost" "$i\"" ' -t'
done
#Combine the telnet command with the device name on same line
paste $TELNETCMDS $NAMES>>$TELNETTABNAME1
#replace all tabs with a single space.
expand -t 1 $TELNETTABNAME1>>$TELNETTABNAME2
#cat $TELNETTABNAME #| tr '\t' '" -t "'
#Now sort the file
sort $TELNETTABNAME2>>$TELNETTABNAME
#how many lines [routers] in the file?
routers=`wc -l $TELNETTABNAME` #count lines in the file and set result as variable routers.
routers=${routers%$TELNETTABNAME} #Make the routers variable an integer?
echo "There are $routers Routers in this topology"
let "routers = $routers+1"
#declare -i routers #This seems not to serve any useful purpose that I know of
# echo "I now start with a router count of $routers"
#This block reads in the commands from a file and assign each line to a dimensioned variable R[x]
{
counter=0
while [ "$counter" -lt "$routers" ]
do
read R[$counter]
let "counter=$counter+1"
done
} < $TELNETTABNAME
#This block just prints out the contents of the dimension - I want to be sure I read the right things into the variables
counter=0
while [ "$counter" -lt "$routers" ]
do
echo ${R[$counter]}
let "counter=$counter+1"
done
#Build the gnome-terminal command and options from the contents of the R[x] dimension
counter=0
let "routers=$routers-2" #One main window and then the -2 so we cover just the right number of tabbed auxilliary windows
command="gnome-terminal --window --maximize -e ${R[$counter]}"
while [ "$counter" -lt "$routers" ]
do
let "counter=$counter+1"
command="$command --tab -e ${R[$counter]}"
#echo $command
done
echo >>$LASTCMD $command
chmod 777 $LASTCMD
#I can delete these files now, since I no longer need them --- just house cleaning
rm -f $PORTS
rm -f $NAMES
rm -f $TELNETTABNAME
rm -f $TELNETCMDS
rm -f $TELNETTABNAME1
rm -f $TELNETTABNAME2
$LASTCMD
I appreciate any modifications …. and this works for me … so I don’t have to get KDEbase libararies just for konsole4KDE. I hope u enjoy it.