proc nexec { args } {
global remote_exec editor_only
global execSock
+ global debug
if { $remote_exec } {
if { ![info exists execSock] || $execSock == "" } {
}
if { $remote_exec } {
- rexec $execSock $args
+ rexec $execSock $args
} else {
- puts " -- running: $args"
- eval exec $args
+ if { $debug } {
+ puts " -- running: $args"
+ }
+ eval exec $args
}
}
global execMode
if {$execMode == "batch"} {
- puts $line
+ puts $line
} else {
.bottom.textbox config -text "$line"
animateCursor
# * name -- the name of the new interface
#****
proc createIfc { eid type hook } {
- puts "usli u createIfc $eid $type $hook"
+ global debug
+ if { $debug } {
+ puts "usli u createIfc $eid $type $hook"
+ }
}
# * node -- node id
#****
proc l3node.instantiate { eid node } {
-
- puts "\nl3node.INSTANTIATE $eid $node"
+ global debug
+ if { $debug } {
+ puts "\nl3node.INSTANTIATE $eid $node"
+ }
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
upvar 0 ::cf::[set ::curcfg]::[set node]::ve_id ve_id
proc l3node.start { eid node } {
global remote_exec execSock
global viewcustomid
+ global debug
+ if { $debug } {
puts "\nl3node.START $eid $node"
+ }
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
upvar 0 ::cf::[set ::curcfg]::[set node]::ve_id ve_id
# nam omoguci razne korisne stvari tipa proc filesystem itd
upvar 0 ::cf::[set ::curcfg]::[set node]::ve_dir ve_dir
set ve_boot_done "$ve_dir/tmp/imunes-boot-done"
- puts -nonewline " Waiting for VE $node ($ve_id) to actually start "
- while { ! [ file exists $ve_boot_done ] } {
- after 300
- puts -nonewline "."
+ if { $debug } {
+ puts -nonewline " Waiting for VE $node ($ve_id) to actually start "
+ while { ! [ file exists $ve_boot_done ] } {
+ after 300
+ puts -nonewline "."
+ }
+ puts " detected VE $ve_id done"
}
- puts " detected VE $ve_id done"
file delete $ve_boot_done
# OpenVZ zahtijeva da VE bude started za --netif_add
set ifid "e${node_id}_${ifc}"
set peer [peerByIfc $node $ifc]
-
- puts " Interface $ifc at $node links to $peer"
-
+
+ if { $debug } {
+ puts " Interface $ifc at $node links to $peer"
+ }
# vzctl ne prima ako nije properly padded
set ether 40:00:aa:aa:[format %02x $mac_byte4]:[format %02x $mac_byte5]
set bootcfg [[typemodel $node].cfggen $node]
set bootcmd [[typemodel $node].bootcmd $node]
}
- puts " typemodel = [typemodel $node]"
- puts " bootcmd = $bootcmd"
- puts " bootcfg = $bootcfg"
+ if { $debug } {
+ puts " typemodel = [typemodel $node]"
+ puts " bootcmd = $bootcmd"
+ puts " bootcfg = $bootcfg"
+ }
if { ! $remote_exec } {
if { $bootcmd != "/bin/sh" } {
- puts " writing $node_dir/boot.conf"
+ if { $debug } {
+ puts " writing $node_dir/boot.conf"
+ }
set fileId [open $node_dir/boot.conf w]
- foreach line $bootcfg {
- puts $fileId $line
- }
+ if { $debug } {
+ foreach line $bootcfg {
+ puts $fileId $line
+ }
+ }
close $fileId
}
} else {
nexec create_conf_file $node_dir/boot.conf
- foreach line $bootcfg {
- puts $execSock $line
- }
+ if { $debug } {
+ foreach line $bootcfg {
+ puts $execSock $line
+ }
+ }
nexec close_conf_file
}
# Ispravno izvedene naredbe u OpenVZ VE vracaju jedan prazan red
# pa ih se ignorira. Ako se preda prazan red kao naredba, takodjer je
# vracen jedan prazan red pa se i to ignorira.
- if { $ret != "TCL_OK" && $ret != ""} {
- puts " =>Command \"$command\" executed on $node returned: \
- \"$ret\""
+ if { $ret != "TCL_OK" && $ret != ""} {
+ if { $debug } {
+ puts " =>Command \"$command\" executed on $node returned: \"$ret\""
+ }
# TODO: batch mode handling
set str "Command \n\n \"$command\"\n\n executed on $node returned: \
\n\n\"$ret\"\n\n"
} else {
# quagga i drugi mogu imati svoje custom skripte za bootanje koja se prepoznaje po
# bootcmdu (interpreteru) koji nije obican shell
- puts " placing $bootcmd in $node_dir"
+ if { $debug } {
+ puts " placing $bootcmd in $node_dir"
+ }
set bootfile [file tail $bootcmd]
file copy $bootcmd "$node_dir/$bootfile"
set command "/$bootfile boot.conf"
- puts " will now execute $command in $node_id"
+ if { $debug } {
+ puts " will now execute $command in $node_id"
+ }
# catch nexec vimage $node_id $bootcmd $node_dir/boot.conf >& $node_dir/out.log &"
catch { nexec vzctl exec $node_id $command } ret
if { $ret != "TCL_OK" && $ret != ""} {
- puts " =>Command \"$command\" executed on $node returned: \
- \"$ret\""
+ if { $debug } {
+ puts " =>Command \"$command\" executed on $node returned: \"$ret\""
+ }
# TODO: batch mode handling
set str "Command \n\n \"$command\"\n\n executed on $node returned: \
\n\n\"$ret\"\n\n"
#****
proc l3node.shutdown { eid node } {
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
-
- puts " Stopping VE $node ($node_id)"
+ global debug
+
+ if { $debug } {
+ puts " Stopping VE $node ($node_id)"
+ }
statline "Stopping VE $node ($node_id)"
nexec vzctl stop $node_id
}
proc l3node.destroy { eid node } {
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
+ global debug
# TODO serial interface support
# foreach ifc [ifcList $node] {
# }
set msg "Destroying VE $node ($node_id)"
- puts " $msg"
+ if { $debug } {
+ puts " $msg"
+ }
statline $msg
nexec vzctl destroy $node_id
}
global mac_byte4 mac_byte5
global remote_exec
global eid_base
-
- puts "\n= deployCfg starts ="
+ global debug
+
+ if { $debug } {
+ puts "\n= deployCfg starts ="
+ }
set mac_byte4 0
set mac_byte5 0
#jedan od nodeova je sigurno L2, sad provjerava da li se radi o vezi izmedju
#dva L2 uredjaja
if { [[typemodel $lnode1].layer] == "LINK" && [[typemodel $lnode2].layer] == "LINK" } {
- #slucaj kad su spojena dva huba!!
- puts "\n\n*********************************************************************"
- puts "**** Panic! Panic! Spojena su dva huba, nemogu ja to!! ***\n"
- puts "*********************************************************************\n\n"
- puts "Klikni Eksperiment -> Terminate za uredan cleanup."
+ if { $debug } {
+ #slucaj kad su spojena dva huba!!
+ puts "\n\n*********************************************************************"
+ puts "**** Panic! Panic! Spojena su dva huba, nemogu ja to!! ***\n"
+ puts "*********************************************************************\n\n"
+ puts "Klikni Eksperiment -> Terminate za uredan cleanup."
+ }
} else {
# za slucaj kad se L3 spaja na L2 treba detektirati koji je koji te dodati
# L3 host side interface u odgovarajuci bridge
}
if { $bridgefound == true } {
- puts "\nBridge $bridge (L2 hub emulation) already exists."
+ if { $debug } {
+ puts "\nBridge $bridge (L2 hub emulation) already exists."
+ }
} else {
- puts "\nCreating bridge $bridge (L2 hub emulation)"
+ if { $debug } {
+ puts "\nCreating bridge $bridge (L2 hub emulation)"
+ }
nexec brctl addbr $bridge
lappend bridges $bridge
}
if { [nodeType $bridge_node] == "rj45" } {
set bridge_name [getNodeName $bridge_node]
nexec brctl addif $bridge $bridge_name
- puts " RJ45 emulacija, spojen na $bridge_name na hostu."
+ if { $debug } {
+ puts " RJ45 emulacija, spojen na $bridge_name na hostu."
+ }
}
#dodaje interface
nexec brctl addif $bridge $port_if
#dize bridge, interesantno ne baca error ako je bridge vec dignut
nexec ip link set up dev $bridge
-
- puts " L2 device $bridge is up, added interface $port_if"
+ if { $debug } {
+ puts " L2 device $bridge is up, added interface $port_if"
+ }
} else {
# Slucaj kad se radi link izmedju dva L3 uredjaja (standardno)
set bridge "b$eid$lname"
set bridge_node $lname
- puts "\nCreating bridge $bridge"
+ if { $debug } {
+ puts "\nCreating bridge $bridge"
+ }
nexec brctl addbr $bridge
lappend bridges $bridge
nexec brctl addif $bridge $host_if_a
nexec brctl addif $bridge $host_if_b
nexec ip link set up dev $bridge
- puts " Bridge $bridge is up, added interface $host_if_a and $host_if_b"
+ if { $debug } {
+ puts " Bridge $bridge is up, added interface $host_if_a and $host_if_b"
+ }
}
}
set msg "Network topology instantiated in [expr [clock seconds] - $t_start] seconds ([llength $node_list] nodes and [llength $link_list] links)."
statline $msg
- puts "\n$msg"
-
- puts "\n= deployCfg end ="
+ if { $debug } {
+ puts "\n$msg"
+ puts "\n= deployCfg end ="
+ }
}
proc vimageCleanup { eid } {
global .c
global execMode
-
- puts "\n= Cleanup $eid start ="
+ global debug
+
+ if { $debug } {
+ puts "\n= Cleanup $eid start ="
+ }
set t_start [clock seconds]
- puts "\nBridge cleanup in main host"
+ if { $debug } {
+ puts "\nBridge cleanup in main host"
+ }
upvar 0 ::cf::[set ::curcfg]::bridges bridges
if { [ info exists bridges ] && [ llength $bridges ] } {
foreach bridge $bridges {
- puts " Cleaning up bridge $bridge..."
+ if { $debug } {
+ puts " Cleaning up bridge $bridge..."
+ }
nexec ip link set down dev $bridge
nexec brctl delbr $bridge
}
}
- puts " Done.\n"
+ if { $debug } {
+ puts " Done.\n"
+ }
# OpenVZ - samo nam treba popis nodeova za pogasiti
upvar 0 ::cf::[set ::curcfg]::node_list node_list
- puts "Stopping all VEs..."
+ if { $debug } {
+ puts "Stopping all VEs..."
+ }
foreach node $node_list {
if { [[typemodel $node].layer] != "LINK" } {
[typemodel $node].shutdown $eid $node
# bridge suceljem a ne VEom iako su u $node_list, stoga nema se sto gasiti
}
}
- puts " Done.\n"
-
-# puts " nexec rm -f /usr/local/etc/quagga/Quagga.conf "
+ if { $debug } {
+ puts " Done.\n"
+ puts "Destroying VE private enviroments..."
+ }
- puts "Destroying VE private enviroments..."
foreach node $node_list {
if { [[typemodel $node].layer] != "LINK" } {
[typemodel $node].destroy $eid $node
# bridge suceljem a ne VEom iako su u $node_list, stoga nema se sto gasiti
}
}
- puts " Done.\n"
-
set msg "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
- statline $msg
- puts " $msg"
+ statline $msg
- puts "\n= Cleanup $eid end ="
+ if { $debug } {
+ puts " $msg"
+ puts " Done.\n"
+ puts "\n= Cleanup $eid end ="
+ }
}
# qdisc -- queuing discipline
#****
proc execSetIfcQDisc { eid node ifc qdisc } {
-
- puts "execSetIfcQDisc $eid $node $ifc $qdisc"
+ global debug
+
+ if { $debug } {
+ puts "execSetIfcQDisc $eid $node $ifc $qdisc"
+ }
return
set target [linkByIfc $node $ifc]
# qdrop -- queue dropping policy
#****
proc execSetIfcQDrop { eid node ifc qdrop } {
-
- puts "execSetIfcQDrop $eid $node $ifc $qdrop"
+ global debug
+
+ if { $debug } {
+ puts "execSetIfcQDrop $eid $node $ifc $qdrop"
+ }
return
set target [linkByIfc $node $ifc]
# qlen -- new queue's length
#****
proc execSetIfcQLen { eid node ifc qlen } {
-
- puts "execSetIfcQLen $eid $node $ifc $qlen"
+ global debug
+
+ if { $debug } {
+ puts "execSetIfcQLen $eid $node $ifc $qlen"
+ }
return
set target [linkByIfc $node $ifc]
# link -- link id
#****
proc execSetLinkParams { eid link } {
+ global debug
- puts "execSetLinkParams $eid $link"
+ if { $debug } {
+ puts "execSetLinkParams $eid $link"
+ }
return
set lnode1 [lindex [linkPeers $link] 0]