#!/bin/bash #### VARIABILI SCRIPTNAME=`echo $0 | awk -vFS='/' '{print $NF}'` EXEC=/hosthome${PWD#$HOME}${0#'.'} waitfinish() { SEMAPHORE=$1.boot touch $SEMAPHORE while [ -f $SEMAPHORE ]; do sleep 2 done sleep 2 } notifyfinish() { rm $1.boot } r_20_1=r_20_1-as20r1 r_20_2=r_20_2-as20r2 r_100_1=r_100_1-as100r1 r_100_2=r_100_2-as100r2 r_100_3=r_100_3-as100r3 r_200_1=r_200_1-as200r1 if ! [ `uname -r|tail -c 3` = "um" ]; then # only realhost takes arguments case "$1" in start) ############## CREATE THE HOSTS FROM SCRATCH if [ -e $r_20_1.disk ] || [ -e $r_20_2.disk ] || [ -e $r_100_1.disk ] || [ -e $r_100_2.disk ] || [ -e $r_100_3.disk ] || [ -e $r_200_1.disk ] ; then echo "$0: some .disk file exists in this directory!" echo " launch "$0 clean" first" exit 1 fi vstart $r_20_1 --eth0=A --eth2=C --eth1=F --new --exec=$EXEC waitfinish $r_20_1 vstart $r_20_2 --eth1=C --eth0=E --new --exec=$EXEC waitfinish $r_20_2 vstart $r_100_1 --eth3=D --eth0=E --eth1=F --eth2=J --new --exec=$EXEC waitfinish $r_100_1 vstart $r_100_2 --eth0=D --eth1=H --eth2=L --new --exec=$EXEC waitfinish $r_100_2 vstart $r_100_3 --eth1=H --eth0=J --eth2=K --new --exec=$EXEC waitfinish $r_100_3 vstart $r_200_1 --eth0=A --eth1=B --new --exec=$EXEC waitfinish $r_200_1 ;; restart) ############## CREATE THE HOSTS FROM SCRATCH if [ -e $r_20_1.disk ] || [ -e $r_20_2.disk ] || [ -e $r_100_1.disk ] || [ -e $r_100_2.disk ] || [ -e $r_100_3.disk ] || [ -e $r_200_1.disk ] ; then echo "$0: some .disk file does not exist!" echo " launch "$0 start" instead" exit 1 fi vstart $r_20_1 --eth0=A --eth2=C --eth1=F --exec=$EXEC waitfinish $r_20_1 vstart $r_20_2 --eth1=C --eth0=E --exec=$EXEC waitfinish $r_20_2 vstart $r_100_1 --eth3=D --eth0=E --eth1=F --eth2=J --exec=$EXEC waitfinish $r_100_1 vstart $r_100_2 --eth0=D --eth1=H --eth2=L --exec=$EXEC waitfinish $r_100_2 vstart $r_100_3 --eth1=H --eth0=J --eth2=K --exec=$EXEC waitfinish $r_100_3 vstart $r_200_1 --eth0=A --eth1=B --exec=$EXEC waitfinish $r_200_1 ;; halt) vhalt $r_20_1 & vhalt $r_20_2 & vhalt $r_100_1 & vhalt $r_100_2 & vhalt $r_100_3 & vhalt $r_200_1 & ;; crash) vcrash $r_20_1 & vcrash $r_20_2 & vcrash $r_100_1 & vcrash $r_100_2 & vcrash $r_100_3 & vcrash $r_200_1 & ;; clean) rm -f $r_20_1.disk rm -f $r_20_2.disk rm -f $r_100_1.disk rm -f $r_100_2.disk rm -f $r_100_3.disk rm -f $r_200_1.disk ;; *) echo "Usage:$0 {start | halt | restart | crash | clean}" exit 1 ;; esac else # not realhost (virtual host to configure, does not take arguments) SCRIPTFILE=`cat /proc/cmdline | awk -v FS== -v RS=' ' '{if($1=="exec") print $2}' ` SCRIPTDIR=${SCRIPTFILE%/${SCRIPTNAME}} cd $SCRIPTDIR if [ $HOSTNAME = $r_20_1 ]; then /sbin/ifconfig eth0 11.0.0.34 netmask 255.255.255.252 up /sbin/ifconfig eth1 11.0.0.6 netmask 255.255.255.252 up /sbin/ifconfig eth2 20.1.1.1 netmask 255.255.255.0 up ## NORIP ## OKBGP cat > /etc/zebra/bgpd.conf < /etc/zebra/daemons < /etc/zebra/bgpd.conf < /etc/zebra/daemons < /etc/zebra/ripd.conf << EOF ! password zebra !Start of Policy Configuration ! route-map metricOut permit 10 match ip address myAggregate ! !End of Policy Configuration ! !Start of Access or Prefix List Configuration ! ! !Start of Prefix List Configuration ! ip prefix-list mineOutOnly permit 100.1.0.0/16 ! ip prefix-list defaultIn permit 0.0.0.0/0 ! !End of Prefix List Configuration ! !End of Access or Prefix List Configuration ! ! Start of ripconf router rip network 100.1.0.0/24 redistribute bgp !End of ripconf ! ! EOF ## OKBGP cat > /etc/zebra/bgpd.conf < /etc/zebra/daemons < /etc/zebra/ripd.conf << EOF ! password zebra !Start of Policy Configuration ! !End of Policy Configuration ! ! Start of ripconf router rip network 100.1.0.0/24 !End of ripconf ! ! EOF ## NOBGP ## ZEBRAOK cat > /etc/zebra/daemons < /etc/zebra/ripd.conf << EOF ! password zebra !Start of Policy Configuration ! !End of Policy Configuration ! ! Start of ripconf router rip network 100.1.0.0/24 !End of ripconf ! ! EOF ## NOBGP ## ZEBRAOK cat > /etc/zebra/daemons < /etc/zebra/bgpd.conf < /etc/zebra/daemons <