Files
openairinterface5g/openair3/EMULATIONS/INTER/utils.tcl
T
2013-06-25 09:05:02 +00:00

372 lines
14 KiB
Tcl

#
# Utilities for Proxy Mobile IPv6
# Author Huu-Nghia.Nguyen@eurecom.fr
#
#==========================================================================
proc progress { start end } {
global ns
set now [$ns now]
if {$now <= $end && $now >= $start} {
set percent [expr floor(($now-$start)*100/($end-$start))]
puts "Progress: $percent%"
$ns at [expr $now + 1] "progress $start $end"
} else {
puts "Progres: 100% Completed!"
}
}
#==========================================================================
#Install radvd.conf in to the virtual machine <vmid> = {MN, AR1, AR2, CN, Router}
#You need to create the file <vmid>_radvd.conf first (Attention: No check for file existence)
#
proc install-radvd vmid {
global vms
exec cp $vmid\_radvd.conf [$vms($vmid) set opt(uml_dir)]/hostfs/radvd.conf
job $vmid cp /mnt/hostfs/radvd.conf /etc/radvd.conf
}
#==========================================================================
proc start-all-pmip6d { options } {
job CH1 /mnt/hostfs/pmip6d $options -i -c -L 2001:100::1 -A 2001:200::1
job MR1 /mnt/hostfs/pmip6d $options -i -m -s -L 2001:100::1 -E 2001:100::2 -N 2001:1::1
job CH2 /mnt/hostfs/pmip6d $options -i -c -L 2001:200::1 -A 2001:100::1
job MR2 /mnt/hostfs/pmip6d $options -i -m -s -L 2001:200::1 -E 2001:200::2 -N 2001:1::2
}
#==========================================================================
proc stop-all-pmip6d {} {
job CH1 killall -INT pmip6d
job CH2 killall -INT pmip6d
job MR1 killall -INT pmip6d
job MR2 killall -INT pmip6d
job MN1 ifconfig eth0 down
job MN2 ifconfig eth0 down
}
#==========================================================================
proc config-chorist {} {
job RELAY sysctl -w net.ipv6.conf.all.forwarding=1
install-radvd MR1
install-radvd MR2
job MR1 sysctl -w net.ipv6.conf.eth0.proxy_ndp=1
job MR2 sysctl -w net.ipv6.conf.eth0.proxy_ndp=1
job MR1 service radvd restart
job MR2 service radvd restart
global vms
exec cp /usr/bin/telnet [$vms(CH1) set opt(uml_dir)]/hostfs/
exec cp /usr/bin/telnet [$vms(CH2) set opt(uml_dir)]/hostfs/
exec cp /usr/bin/telnet [$vms(MR1) set opt(uml_dir)]/hostfs/
exec cp /usr/bin/telnet [$vms(MR2) set opt(uml_dir)]/hostfs/
}
#==========================================================================
proc progress { start end } {
global ns
set now [$ns now]
if {$now <= $end && $now >= $start} {
set percent [expr floor(($now-$start)*100/($end-$start))]
puts "Progress: $percent%"
$ns at [expr $now + 1] "progress $start $end"
} else {
puts "Progres: 100% Completed!"
}
}
#==========================================================================
proc start-test-ro { options {filename "ro.log"} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 25]
setdest_1 150 100 100
setdest_2 450 100 100
job MN1 ifconfig eth0 down
job MN2 ifconfig eth0 down
#Start pmip6d
$ns at [expr $now+5] "start-all-pmip6d $options"
#MN1 joins the network
$ns at [expr $now+10] "job MN1 ifconfig eth0 up"
$ns at [expr $now +11] "job MN2 ifconfig eth0 up"
$ns at [expr $now+25] "job MN2 ping6 2001:1::fcfd:ff:fe00:600"
}
#==========================================================================
proc stop-test-ro {} {
global ns
set now [$ns now]
progress $now [expr $now + 6]
$ns at [expr $now+5] "job MN1 ifconfig eth0 down"
$ns at [expr $now+5] "job MN2 ifconfig eth0 down"
#Finish
$ns at [expr $now+5] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+5] "stop-all-pmip6d"
$ns at [expr $now+6] "job MN2 killall -INT ping6"
}
#==========================================================================
proc chorist-mobility { {filename "mobility.log"} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 200]
setdest_1 150 100 100
setdest_2 450 100 100
job MN1 ifconfig eth0 down
job MN2 ifconfig eth0 down
#Observation
$ns at [expr $now+5] "start-all-pmip6d"
#MN1 joins the network
$ns at [expr $now+10] "job MN1 ifconfig eth0 up"
$ns at [expr $now +10] "job MN2 ifconfig eth0 up"
#MN1 is moving to MR2
$ns at [expr $now+25] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+100] "setdest_1 100 100 100"
#MN1 power off
$ns at [expr $now+175] "job MN1 ifconfig eth0 down"
#Finish
$ns at [expr $now+200] "puts \"Finish, stop all processes and services\""
#$ns at [expr $now+150] "stop-all-pmip6d"
$ns at [expr $now+201] "puts \"chorist-mobility: DONE!\""
}
#==========================================================================
proc chorist-basic { {filename "basic.log"} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 150]
setdest_1 150 100 100
job MN1 ifconfig eth0 down
#Observation
$ns at [expr $now+5] "start-all-pmip6d"
$ns at [expr $now+5] "job CH tcpdump -s 256 -i eth1 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
#MN1 joins the network & CN start to ping down; MN1 ping up
$ns at [expr $now+10] "job MN1 ifconfig eth0 up"
$ns at [expr $now+15] "job CN ping6 2001:1::fcfd:ff:fe00:500"
$ns at [expr $now+15] "job MN1 ping6 2000::1"
#MN1 is moving to MR2
$ns at [expr $now+25] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+75] "setdest_1 100 100 100"
#MN1 power off
$ns at [expr $now+125] "job MN1 ifconfig eth0 down"
#Finish
$ns at [expr $now+150] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+150] "job CN killall -INT ping6"
$ns at [expr $now+150] "job MN1 killall -INT ping6"
$ns at [expr $now+150] "job CH killall -INT tcpdump"
$ns at [expr $now+150] "job MR1 killall -INT tcpdump"
$ns at [expr $now+150] "job MR2 killall -INT tcpdump"
#$ns at [expr $now+150] "stop-all-pmip6d"
$ns at [expr $now+151] "puts \"chorist-basic: DONE!\""
}
proc chorist-tcp-basic { {filename "tcp_basic.log"} {copt "-l 4M"} {options ""} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 150]
setdest_1 150 100 100
job MN1 ifconfig eth0 down
job CN ifconfig eth0 mtu 1300
#Observation
$ns at [expr $now+5] "start-all-pmip6d"
$ns at [expr $now+5] "job CN iperf -V -s $options"
$ns at [expr $now+5] "job CH tcpdump -s 256 -i eth1 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job CN tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
#MN1 joins the network & send tcp traffic to CN
$ns at [expr $now+10] "job MN1 ifconfig eth0 up mtu 1300"
$ns at [expr $now+20] "job MN1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+20] "job MN1 iperf -V -c 2000::1 $copt $options"
#MN1 is moving to MR2
$ns at [expr $now+45] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+75] "setdest_1 100 100 100"
#MN1 power off
$ns at [expr $now+124] "job MN1 killall -INT tcpdump"
$ns at [expr $now+125] "job MN1 ifconfig eth0 down"
#Finish
$ns at [expr $now+150] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+150] "job CN killall -INT iperf"
$ns at [expr $now+149] "job MN1 killall -INT iperf"
$ns at [expr $now+150] "job CH killall -INT tcpdump"
$ns at [expr $now+150] "job MR1 killall -INT tcpdump"
$ns at [expr $now+150] "job MR2 killall -INT tcpdump"
$ns at [expr $now+150] "job CN killall -INT tcpdump"
#$ns at [expr $now+150] "stop-all-pmip6d"
$ns at [expr $now+151] "puts \"chorist-basic: DONE!\""
}
proc chorist-udp-basic { {filename "udp_basic.log"} {copt "-t 100"} {options "-u"} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 150]
setdest_1 150 100 100
job MN1 ifconfig eth0 down
job CN ifconfig eth0 mtu 1300
#Observation
$ns at [expr $now+5] "start-all-pmip6d"
$ns at [expr $now+5] "job CH tcpdump -s 256 -i eth1 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job CN tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
#MN1 joins the network & send tcp traffic to CN
$ns at [expr $now+10] "job MN1 ifconfig eth0 up mtu 1300"
$ns at [expr $now+20] "job MN1 iperf -V -s $options"
$ns at [expr $now+20] "job MN1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+25] "job CN iperf -V -c 2001:1::fcfd:ff:fe00:500 $copt $options"
#MN1 is moving to MR2
$ns at [expr $now+45] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+75] "setdest_1 100 100 100"
#MN1 power off
$ns at [expr $now+124] "job MN1 killall -INT tcpdump"
$ns at [expr $now+125] "job MN1 ifconfig eth0 down"
#Finish
$ns at [expr $now+150] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+150] "job CN killall -INT iperf"
$ns at [expr $now+149] "job MN1 killall -INT iperf"
$ns at [expr $now+150] "job CH killall -INT tcpdump"
$ns at [expr $now+150] "job MR1 killall -INT tcpdump"
$ns at [expr $now+150] "job MR2 killall -INT tcpdump"
$ns at [expr $now+150] "job CN killall -INT tcpdump"
#$ns at [expr $now+150] "stop-all-pmip6d"
$ns at [expr $now+151] "puts \"chorist-udp-basic: DONE!\""
}
#==========================================================================
proc chorist-intra { {filename "intra.log"} } {
global ns stdout
set now [$ns now]
#Step 1:
progress $now [expr $now + 201]
setdest_1 150 100 100
job MN1 ifconfig eth0 down
job MN2 ifconfig eth0 down
#Observation
set stdout "/mnt/hostfs/pmip6d.log"
$ns at [expr $now+5] "start-all-pmip6d"
$ns at [expr $now+5] "job CH tcpdump -s 256 -i eth1 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
set stdout "/dev/null"
#MN1 & MN2 joins the network
$ns at [expr $now+10] "job MN1 ifconfig eth0 up"
$ns at [expr $now+10] "job MN2 ifconfig eth0 up"
#MN1 & MN2 ping each other
set stdout "/mnt/hostfs/ping6.log"
$ns at [expr $now+20] "job MN2 ping6 2001:1::fcfd:ff:fe00:500"
$ns at [expr $now+20] "job MN1 ping6 2001:1::fcfd:ff:fe00:600"
#MN1 is moving to MR2
$ns at [expr $now+35] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+100] "setdest_1 100 100 100"
#MN1 & MN2 power off
set stdout "/dev/null"
$ns at [expr $now+175] "job MN1 ifconfig eth0 down"
$ns at [expr $now+175] "job MN2 ifconfig eth0 down"
#Finish
$ns at [expr $now+200] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+200] "job MN2 killall -INT ping6"
$ns at [expr $now+200] "job MN1 killall -INT ping6"
$ns at [expr $now+200] "job CH killall -INT tcpdump"
$ns at [expr $now+200] "job MR1 killall -INT tcpdump"
$ns at [expr $now+200] "job MR2 killall -INT tcpdump"
#$ns at [expr $now+200] "stop-all-pmip6d"
$ns at [expr $now+200] "puts \"chorist-intra: DONE!\""
set stdout "/mnt/hostfs/stdout"
}
proc chorist-tcp-intra { {filename "tcp_intra.log"} {copt "-l 4M"} {options ""} } {
global ns
set now [$ns now]
#Step 1:
progress $now [expr $now + 150]
setdest_1 150 100 100
setdest_2 450 100 100
job MN1 ifconfig eth0 down
job MN2 ifconfig eth0 down
#Observation
$ns at [expr $now+5] "start-all-pmip6d"
$ns at [expr $now+5] "job CH tcpdump -s 256 -i eth1 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR1 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+5] "job MR2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
#MN1 joins the network & CN start to ping down; MN1 ping up
$ns at [expr $now+10] "job MN1 ifconfig eth0 up mtu 1300"
$ns at [expr $now+10] "job MN2 ifconfig eth0 up mtu 1300"
$ns at [expr $now+20] "job MN2 iperf -V -s $options"
$ns at [expr $now+20] "job MN2 tcpdump -s 256 -i eth0 -v -w /mnt/hostfs/$filename "
$ns at [expr $now+25] "job MN1 iperf -V -c 2001:1::fcfd:ff:fe00:600 $copt $options"
#MN1 is moving to MR2
$ns at [expr $now+35] "setdest_1 450 100 100"
#MN1 is moving back MR1
$ns at [expr $now+75] "setdest_1 100 100 100"
#MN1 MN2 power off
$ns at [expr $now+124] "job MN2 killall -INT tcpdump"
$ns at [expr $now+125] "job MN1 ifconfig eth0 down"
$ns at [expr $now+125] "job MN2 ifconfig eth0 down"
#Finish
$ns at [expr $now+150] "puts \"Finish, stop all processes and services\""
$ns at [expr $now+150] "job MN2 killall -INT iperf"
$ns at [expr $now+149] "job MN1 killall -INT iperf"
$ns at [expr $now+150] "job CH killall -INT tcpdump"
$ns at [expr $now+150] "job MR1 killall -INT tcpdump"
$ns at [expr $now+150] "job MR2 killall -INT tcpdump"
#$ns at [expr $now+150] "stop-all-pmip6d"
$ns at [expr $now+151] "puts \"chorist-basic: DONE!\""
}