# and Technology through the research contract #IP-2003-143.
#
+proc nexec { args } {
+ eval exec $args
+}
proc setOperMode { mode } {
global oper_mode activetool nodes
# Verify that links to external interfaces are properly configured
if { $mode == "exec" } {
- set extifcs [exec ifconfig -l]
+ set extifcs [nexec ifconfig -l]
set extifcs \
[lreplace $extifcs [lsearch $extifcs lo0] [lsearch $extifcs lo0]]
foreach node $nodes {
.bottom.oper_mode configure -text "$mode mode"
set activetool select
.left.select configure -state active
- if { "$mode" == "exec" && [exec id -u] == 0} {
+ if { "$mode" == "exec" && [nexec id -u] == 0} {
.menubar.experiment entryconfigure "Execute" -state disabled
.menubar.experiment entryconfigure "Terminate" -state normal
.menubar.edit entryconfigure "Undo" -state disabled
.menubar.edit entryconfigure "Redo" -state disabled
set oper_mode exec
- set nmbufs [lindex [split [exec sysctl kern.ipc.nmbufs]] 1]
- set nmbclusters [lindex [split [exec sysctl kern.ipc.nmbclusters]] 1]
+ set nmbufs [lindex [split [nexec sysctl kern.ipc.nmbufs]] 1]
+ set nmbclusters [lindex [split [nexec sysctl kern.ipc.nmbclusters]] 1]
monitor_loop
deployCfg
} else {
if {$oper_mode != "edit"} {
vimageCleanup
}
- if {[exec id -u] == 0} {
+ if {[nexec id -u] == 0} {
.menubar.experiment entryconfigure "Execute" -state normal
} else {
.menubar.experiment entryconfigure "Execute" -state disabled
proc createIfc {type hook} {
- catch {exec ngctl mkpeer $type $hook $hook | tail -1} resp
+ catch {nexec ngctl mkpeer $type $hook $hook | tail -1} resp
foreach elem [split [lindex [split $resp "\{\}"] 1]] {
if {[string equal -length 6 $elem "name=\""]} {
set name [string range $elem 6 [expr [string length $elem] - 2]]
proc l3node.instantiate { eid node } {
global mac_byte5
set node_id "$eid\_$node"
- exec vimage -c $node_id
- exec vimage $node_id hostname [getNodeName $node]
+ nexec vimage -c $node_id
+ nexec vimage $node_id hostname [getNodeName $node]
foreach ifc [ifcList $node] {
switch -exact [string range $ifc 0 2] {
eth {
set ifid [createIfc eiface ether]
- exec vimage -i $node_id $ifid $ifc
- exec vimage $node_id ifconfig $ifc
+ nexec vimage -i $node_id $ifid $ifc
+ nexec vimage $node_id ifconfig $ifc
set ether 40:00:aa:aa:00:$mac_byte5
incr mac_byte5
- exec vimage $node_id ifconfig $ifc link $ether
+ nexec vimage $node_id ifconfig $ifc link $ether
}
ser {
set ifnum [string range $ifc 3 end]
set ifid [createIfc iface inet]
- exec ngctl mkpeer $ifid: cisco inet inet
- exec ngctl connect $ifid: $ifid:inet inet6 inet6
- exec ngctl msg $ifid: broadcast
- exec ngctl name $ifid:inet hdlc$ifnum\@$node_id
- exec vimage -i $node_id $ifid $ifc
- exec vimage $node_id ifconfig $ifc
+ nexec ngctl mkpeer $ifid: cisco inet inet
+ nexec ngctl connect $ifid: $ifid:inet inet6 inet6
+ nexec ngctl msg $ifid: broadcast
+ nexec ngctl name $ifid:inet hdlc$ifnum\@$node_id
+ nexec vimage -i $node_id $ifid $ifc
+ nexec vimage $node_id ifconfig $ifc
}
}
}
set cpumax [lindex [lsearch -inline $cpuconf {max *}] 1]
set cpuweight [lindex [lsearch -inline $cpuconf {weight *}] 1]
if { $cpumin != "" } {
- exec vimage -m $node_id cpumin $cpumin
+ nexec vimage -m $node_id cpumin $cpumin
}
if { $cpumax != "" } {
- exec vimage -m $node_id cpumax $cpumax
+ nexec vimage -m $node_id cpumax $cpumax
}
if { $cpuweight != "" } {
- exec vimage -m $node_id cpuweight $cpuweight
+ nexec vimage -m $node_id cpuweight $cpuweight
}
- exec vimage $node_id sysctl net.inet.icmp.bmcastecho=1
- exec vimage $node_id sysctl net.inet.icmp.icmplim=0
- exec vimage $node_id ifconfig lo0 inet localhost
+ nexec vimage $node_id sysctl net.inet.icmp.bmcastecho=1
+ nexec vimage $node_id sysctl net.inet.icmp.icmplim=0
+ nexec vimage $node_id ifconfig lo0 inet localhost
}
vimageCleanup
- catch { exec mv /etc/resolv.conf /etc/resolv.conf.bak }
- catch { exec kldload ng_ether }
- catch { exec kldload ng_iface }
- catch { exec kldload ng_eiface }
+ 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 }
foreach node $nodes {
set node_id "$eid\_$node"
[lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 0]
set nghook2 \
[lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 1]
- exec ngctl mkpeer $ngpeer1: pipe $nghook1 upper
- exec ngctl name $ngpeer1:$nghook1 $lname
- exec ngctl connect $lname: $ngpeer2: lower $nghook2
+ nexec ngctl mkpeer $ngpeer1: pipe $nghook1 upper
+ nexec ngctl name $ngpeer1:$nghook1 $lname
+ nexec ngctl connect $lname: $ngpeer2: lower $nghook2
-#exec ngctl msg $lname: setcfg "{ header_offset=14 }" ethernet
-#exec ngctl msg $lname: setcfg "{ header_offset=14 }" HDLC ???
+#nexec ngctl msg $lname: setcfg "{ header_offset=14 }" ethernet
+#nexec ngctl msg $lname: setcfg "{ header_offset=14 }" HDLC ???
# Link parameters
- exec ngctl msg $lname: setcfg \
+ nexec ngctl msg $lname: setcfg \
"{ bandwidth=$bandwidth delay=$delay \
upstream={ BER=$ber duplicate=$dup } \
downstream={ BER=$ber duplicate=$dup } }"
}
}
- exec rm -fr /var/run/quagga
- exec rm -f /usr/local/etc/quagga/Quagga.conf
- exec ln -s /tmp/@ /var/run/quagga
- exec ln -s /tmp/@/boot.conf /usr/local/etc/quagga/Quagga.conf
+ nexec rm -fr /var/run/quagga
+ nexec rm -f /usr/local/etc/quagga/Quagga.conf
+ nexec ln -s /tmp/@ /var/run/quagga
+ nexec ln -s /tmp/@/boot.conf /usr/local/etc/quagga/Quagga.conf
foreach file { bgpd.conf ospfd.conf ripd.conf vtysh.conf zebra.conf } {
- exec cp /dev/null /usr/local/etc/quagga/$file
+ nexec cp /dev/null /usr/local/etc/quagga/$file
}
foreach node $nodes {
set type [nodeType $node]
set model [getNodeModel $node]
if { [lsearch -exact {router pc host} $type] >= 0 } {
- exec rm -fr /tmp/$node_id
- exec mkdir /tmp/$node_id
- exec chmod 1777 /tmp/$node_id
+ nexec rm -fr /tmp/$node_id
+ nexec mkdir /tmp/$node_id
+ nexec chmod 1777 /tmp/$node_id
foreach ifc [ifcList $node] {
set mtu [getIfcMTU $node $ifc]
- exec vimage $node_id ifconfig $ifc mtu $mtu
+ nexec vimage $node_id ifconfig $ifc mtu $mtu
}
if { [getCustomEnabled $node] == true } {
puts $fileId $line
}
close $fileId
- catch "exec vimage $node_id $bootcmd /tmp/$node_id/boot.conf &"
+ catch "nexec vimage $node_id $bootcmd /tmp/$node_id/boot.conf &"
}
}
proc vimageCleanup {} {
set t_start [clock seconds]
- set vimages [join [exec vimage -l | fgrep -v " " | cut -d: -f 1]]
+ set vimages [join [nexec vimage -l | fgrep -v " " | cut -d: -f 1]]
set defindex [lsearch $vimages default]
set vimages [lreplace $vimages $defindex $defindex]
# Detach / destroy / reassign interfaces pipe, eiface, iface, bridge
- set ngnodes [split [exec ngctl l | tail -n +3] "\r"]
+ set ngnodes [split [nexec ngctl l | tail -n +3] "\r"]
foreach ngline $ngnodes {
set node [lindex [eval list $ngline] 1]
statline "Shutting down netgraph node $node"
- catch "exec ngctl msg $node: shutdown"
+ catch "nexec ngctl msg $node: shutdown"
}
# Shut down all vimages
foreach vimage $vimages {
statline "Shutting down vimage $vimage"
- catch {exec vimage $vimage kill -9 -1 2> /dev/null}
- exec rm -fr /tmp/$vimage
- exec vimage -d $vimage
+ catch {nexec vimage $vimage kill -9 -1 2> /dev/null}
+ nexec rm -fr /tmp/$vimage
+ nexec vimage -d $vimage
}
- catch { exec rm -f /usr/local/etc/quagga/Quagga.conf }
- catch { exec rm -f /usr/local/xorp/config.boot }
- catch { exec mv /etc/resolv.conf.bak /etc/resolv.conf }
+ catch { nexec rm -f /usr/local/etc/quagga/Quagga.conf }
+ catch { nexec rm -f /usr/local/xorp/config.boot }
+ catch { nexec mv /etc/resolv.conf.bak /etc/resolv.conf }
statline "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
}
return
}
- set cpu_load [expr ([lindex [split [exec sysctl kern.cp_time_avg]] end] + \
+ set cpu_load [expr ([lindex [split [nexec sysctl kern.cp_time_avg]] end] + \
5000) / 10000]
.bottom.cpu_load config -text "CPU $cpu_load%"
- set nstout [split [exec netstat -m] ]
+ set nstout [split [nexec netstat -m] ]
set mbufs [lindex [split [lindex $nstout 0] /] 0]
set clusts [lindex [split [lsearch -inline $nstout "*/$nmbclusters"] /] 0]
set mbufp [expr $mbufs * 100 / $nmbufs]
WFQ { set qdisc wfq }
DRR { set qdisc drr }
}
- exec ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }"
+ nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }"
}
drop-head { set qdrop drophead }
drop-tail { set qdrop droptail }
}
- exec ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }"
+ nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }"
}
set peers [linkEndpoints [lindex $target 0]]
set dir [lindex $target 1]
set ngnode "$eid\_[lindex $peers 0]-[lindex $peers 1]"
- exec ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }"
+ nexec ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }"
}