-# $Id: exec.tcl,v 1.60 2007/10/29 16:25:23 marko Exp $
+# $Id: exec.tcl,v 1.61 2007/11/01 10:42:27 marko Exp $
# Copyright 2004, 2005 University of Zagreb, Croatia. All rights reserved.
#
# * mode -- the new operating mode. Can be edit or exec.
#****
proc setOperMode { mode } {
- global oper_mode activetool node_list
+ global oper_mode eid activetool node_list
global editor_only remote_exec execSock
global undolevel redolevel
}
} else {
if {$oper_mode != "edit"} {
- vimageCleanup
+ vimageCleanup $eid
.menubar.tools entryconfigure "Auto rearrange all" -state normal
.menubar.tools entryconfigure "Auto rearrange selected" -state normal
}
global viewcustomid
set node_id "$eid\.$node"
+ set node_dir "/tmp/$eid/$node"
- nexec rm -fr /tmp/$node_id
- nexec mkdir /tmp/$node_id
- nexec chmod 1777 /tmp/$node_id
+ nexec rm -fr $node_dir
+ nexec mkdir $node_dir
+ nexec chmod 1777 $node_dir
foreach ifc [ifcList $node] {
set mtu [getIfcMTU $node $ifc]
nexec vimage $node_id ifconfig $ifc mtu $mtu
set ipsecCfg ""
if { [getIpsecEnabled $node] == true } {
set setkeycfg [ipsecCfggen $node]
- set setkeyFileId [open /tmp/$node_id/setkey.conf w+]
+ set setkeyFileId [open $node_dir/setkey.conf w+]
foreach line $setkeycfg {
puts $setkeyFileId $line
}
set errorstr ""
set error [catch "nexec vimage $node_id setkey -f \
- /tmp/$node_id/setkey.conf" errorstr]
+ $node_dir/setkey.conf" errorstr]
if { $error == "1" } {
setkeyError $node_id $errorstr
}
set bootcmd [[typemodel $node].bootcmd $node]
}
if { ! $remote_exec } {
- set fileId [open /tmp/$node_id/boot.conf w]
+ set fileId [open $node_dir/boot.conf w]
foreach line $bootcfg {
puts $fileId $line
}
close $fileId
} else {
- nexec create_conf_file /tmp/$node_id/boot.conf
+ nexec create_conf_file $node_dir/boot.conf
foreach line $bootcfg {
puts $execSock $line
}
nexec close_conf_file
}
- catch "nexec vimage $node_id $bootcmd /tmp/$node_id/boot.conf &"
+ catch "nexec vimage $node_id $bootcmd $node_dir/boot.conf &"
}
#****f* exec.tcl/l3node.shutdown
}
}
catch {nexec vimage -d $node_id}
- nexec rm -fr /tmp/$node_id
+ nexec rm -fr $node_dir
}
set t_start [clock seconds]
- vimageCleanup
+ vimageCleanup $eid
catch { nexec vimage -c $eid }
+ catch { nexec rm -fr /tmp/$eid }
+ catch { nexec mkdir /tmp/$eid }
- catch { nexec mv /etc/resolv.conf /etc/resolv.conf.bak }
catch { nexec kldload ng_ether }
catch { nexec kldload ng_iface }
catch { nexec kldload ng_eiface }
}
}
+ # XXX move those to some quagga specific script
+ # XXX race if starting two imunes instances simultaneously
nexec rm -fr /var/run/quagga
nexec rm -f /usr/local/etc/quagga/Quagga.conf
- catch { nexec ln -s /tmp/@ /var/run/quagga }
- catch { nexec ln -s /tmp/@/boot.conf /usr/local/etc/quagga/Quagga.conf }
+ catch { nexec ln -s /tmp/$eid/@ /var/run/quagga }
+ catch { nexec ln -s /tmp/$eid/@/boot.conf /usr/local/etc/quagga/Quagga.conf }
foreach file { bgpd ospfd ospf6d ripd ripngd vtysh zebra } {
catch { nexec cp /dev/null /usr/local/etc/quagga/$file.conf }
}
# Called in special circumstances only. If cleans all
# the imunes objects from the kernel (vimages and netgraph nodes).
#****
-proc vimageCleanup {} {
+proc vimageCleanup { eid } {
global .c
set t_start [clock seconds]
- set vimages [join [nexec vimage -l | fgrep -v " " | cut -d: -f 1]]
+ if { [catch {nexec vimage $eid vimage -l | fgrep -v " " | cut -d: -f 1} res] != 0 } {
+ return
+ }
+ set vimages [join $res]
set defindex [lsearch $vimages .]
set vimages [lreplace $vimages $defindex $defindex]
foreach vimage $vimages {
set stattxt "Terminating processes in vimage $vimage"
statline $stattxt
- catch {nexec vimage $vimage kill -9 -1 2> /dev/null}
+ catch {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
}
# Detach / destroy / reassign interfaces pipe, eiface, iface, bridge
- set ngnodes [split [nexec ngctl l | tail -n +3] "
+ set ngnodes [split [nexec vimage $eid ngctl l | tail -n +3] "
"]
foreach ngline $ngnodes {
set node [lindex [eval list $ngline] 1]
statline "Shutting down netgraph node $node"
- catch "nexec ngctl msg $node: shutdown"
+ catch "nexec vimage $eid ngctl msg $node: shutdown"
}
# Shut down all vimages
foreach vimage $vimages {
set stattxt "Shutting down vimage $vimage"
statline $stattxt
- catch {nexec vimage $vimage kill -9 -1 2> /dev/null}
- while { [catch {nexec vimage -d $vimage}] } {
+ catch {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
+ while { [catch {nexec vimage -d $eid.$vimage}] } {
set stattxt $stattxt.
statline $stattxt
- catch {nexec vimage $vimage kill -9 -1 2> /dev/null}
+ catch {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
}
- nexec rm -fr /tmp/$vimage
}
+ catch { nexec vimage -d $eid }
catch { nexec rm -f /usr/local/etc/quagga/Quagga.conf }
- catch { nexec mv /etc/resolv.conf.bak /etc/resolv.conf }
statline "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
}
#all the rest...
catch { nexec rm -f /usr/local/etc/quagga/Quagga.conf }
- catch { nexec mv /etc/resolv.conf.bak /etc/resolv.conf }
statline "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
}