From 3113dbfb62309451de9181a2c0f73269dabfbe08 Mon Sep 17 00:00:00 2001 From: marko Date: Mon, 29 Oct 2007 16:25:23 +0000 Subject: [PATCH] First in a series of changes to leverage on recently introduced hierarchical vimage naming model in the kernel. The main thrust of this change is to decouple experiment id ($eid) from vimage / netgraph node names. Instead, a top-level vimage named $eid is created first, in which all vimages / netgraph nodes are created as child nodes. This relieves the default vimage context of any netgraph space pollution, and paves a way for adding support for parallel execution of independent experiments. This change does NOT include a revamp of experiment cleanup routines, so be warned that until further notice neither "imunes -b" nor attempts to stop an experiment from the GUI will work. Bug found by: Submitted by: Requested by: Reviewed by: Approved by: Obtained from: --- editor.tcl | 6 ++-- exec.tcl | 91 +++++++++++++++++++++++++++------------------------ hub.tcl | 14 ++++---- lanswitch.tcl | 14 ++++---- quagga.tcl | 4 +-- static.tcl | 4 +-- xorp.tcl | 4 +-- 7 files changed, 71 insertions(+), 66 deletions(-) diff --git a/editor.tcl b/editor.tcl index 3649a69..a60a806 100755 --- a/editor.tcl +++ b/editor.tcl @@ -1,4 +1,4 @@ -# $Id: editor.tcl,v 1.78 2007/10/25 00:34:47 marko Exp $ +# $Id: editor.tcl,v 1.79 2007/10/29 16:25:23 marko Exp $ # # Copyright 2004, 2005 University of Zagreb, Croatia. All rights reserved. # @@ -1244,7 +1244,7 @@ proc button3node { c x y } { proc spawnShell { node cmd } { global eid remote_exec exec_host gui_unix - set node_id $eid\_$node + set node_id $eid\.$node if { $remote_exec } { nexec vimageShellServer.sh $node_id 1234 $cmd & @@ -1278,7 +1278,7 @@ proc spawnShell { node cmd } { proc startethereal { node iface } { global eid - set interface "$iface@$eid\_$node" + set interface "$iface@$eid\.$node" nexec wireshark -i $interface & } diff --git a/exec.tcl b/exec.tcl index d7208ed..43f6183 100755 --- a/exec.tcl +++ b/exec.tcl @@ -1,4 +1,4 @@ -# $Id: exec.tcl,v 1.59 2007/10/23 14:14:10 ana Exp $ +# $Id: exec.tcl,v 1.60 2007/10/29 16:25:23 marko Exp $ # Copyright 2004, 2005 University of Zagreb, Croatia. All rights reserved. # @@ -213,7 +213,7 @@ proc statline {line} { # NAME # createIfc -- create interface # SYNOPSIS -# set name [createIfc $type $hook] +# set name [createIfc $eid $type $hook] # FUNCTION # Creates a new netgraph interface, of the type $type. # Returns the name of the newly created interface. @@ -227,8 +227,8 @@ proc statline {line} { # RESULT # * name -- the name of the new interface #**** -proc createIfc {type hook} { - catch { exec printf "mkpeer eiface ether ether \n show .ether" | ngctl -f - } nglist +proc createIfc { eid type hook } { + catch { exec printf "mkpeer eiface ether ether \n show .ether" | vimage $eid ngctl -f - } nglist return [lindex $nglist 1] } @@ -251,7 +251,7 @@ proc createIfc {type hook} { #**** proc l3node.instantiate { eid node } { global mac_byte4 mac_byte5 - set node_id "$eid\_$node" + set node_id "$eid\.$node" nexec vimage -c $node_id nexec vimage $node_id hostname [getNodeName $node] nexec vimage $node_id sysctl vfs.morphing_symlinks=1 @@ -260,8 +260,8 @@ proc l3node.instantiate { eid node } { foreach ifc [ifcList $node] { switch -exact [string range $ifc 0 2] { eth { - set ifid [createIfc eiface ether] - nexec vimage -i $node_id $ifid $ifc + set ifid [createIfc $eid eiface ether] + nexec vimage $eid vimage -i $node $ifid $ifc set peer [peerByIfc $node $ifc] if { [nodeType $peer] == "rj45" } { @@ -280,12 +280,12 @@ proc l3node.instantiate { eid node } { } ser { set ifnum [string range $ifc 3 end] - set ifid [createIfc iface inet] - 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 + set ifid [createIfc $eid iface inet] + nexec vimage $eid ngctl mkpeer $ifid: cisco inet inet + nexec vimage $eid ngctl connect $ifid: $ifid:inet inet6 inet6 + nexec vimage $eid ngctl msg $ifid: broadcast + nexec vimage $eid ngctl name $ifid:inet hdlc$ifnum\@$node_id + nexec vimage $eid vimage -i $node $ifid $ifc nexec vimage $node_id ifconfig $ifid name $ifc set ngnodemap($ifc@$node_id) $ifid } @@ -330,7 +330,7 @@ proc l3node.instantiate { eid node } { #**** proc l3node.nghook { eid node ifc } { set ifnum [string range $ifc 3 end] - set node_id "$eid\_$node" + set node_id "$eid\.$node" switch -exact [string range $ifc 0 2] { eth { return [list $ifc@$node_id ether] @@ -359,7 +359,7 @@ proc l3node.start { eid node } { global remote_exec execSock global viewcustomid - set node_id "$eid\_$node" + set node_id "$eid\.$node" nexec rm -fr /tmp/$node_id nexec mkdir /tmp/$node_id @@ -446,7 +446,7 @@ proc l3node.start { eid node } { # * node -- node id #**** proc l3node.shutdown { eid node } { - set node_id "$eid\_$node" + set node_id "$eid\.$node" catch "nexec vimage $node_id kill -9 -1 2> /dev/null" foreach ifc [ifcList $node] { foreach ipv4 [getIfcIPv4addr $node $ifc] { @@ -472,14 +472,14 @@ proc l3node.shutdown { eid node } { # * eid -- experiment id # * node -- node id #**** -proc l3node.destroy {eid node } { - set node_id "$eid\_$node" +proc l3node.destroy { eid node } { + set node_id $node foreach ifc [ifcList $node] { - catch { nexec ngctl msg $ifc@$node_id: shutdown } + catch { nexec vimage $eid ngctl msg $ifc@$node_id: shutdown } set ifnum [string range $ifc 3 end] set ifname [string range $ifc 0 2] if { $ifname == "ser" } { - catch { nexec ngctl msg hdlc$ifnum@$node_id: shutdown } + catch { nexec vimage $eid ngctl msg hdlc$ifnum@$node_id: shutdown } } } catch {nexec vimage -d $node_id} @@ -512,13 +512,18 @@ proc deployCfg {} { vimageCleanup + catch { nexec vimage -c $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 } + catch { nexec kldload ng_pipe } + catch { nexec kldload ng_hub } + catch { nexec kldload ng_bridge } foreach node $node_list { - set node_id "$eid\_$node" + set node_id "$eid\.$node" set type [nodeType $node] set name [getNodeName $node] if { $type != "pseudo" } { @@ -551,7 +556,7 @@ proc deployCfg {} { statline "Creating link $link" } - set lname $eid\_$lnode1-$lnode2 + set lname $lnode1-$lnode2 set bandwidth [expr [getLinkBandwidth $link] + 0] set delay [expr [getLinkDelay $link] + 0] set ber [expr [getLinkBER $link] + 0] @@ -567,15 +572,15 @@ proc deployCfg {} { [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 1] set nghook2 \ [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 1] - nexec ngctl mkpeer $ngpeer1: pipe $nghook1 upper - nexec ngctl name $ngpeer1:$nghook1 $lname - nexec ngctl connect $lname: $ngpeer2: lower $nghook2 + nexec vimage $eid ngctl mkpeer $ngpeer1: pipe $nghook1 upper + nexec vimage $eid ngctl name $ngpeer1:$nghook1 $lname + nexec vimage $eid ngctl connect $lname: $ngpeer2: lower $nghook2 # Ethernet frame has a 14-byte header - this is a temp. hack!!! - nexec ngctl msg $lname: setcfg "{ header_offset=14 }" + nexec vimage $eid ngctl msg $lname: setcfg "{ header_offset=14 }" # Link parameters - nexec ngctl msg $lname: setcfg \ + nexec vimage $eid ngctl msg $lname: setcfg \ "{ bandwidth=$bandwidth delay=$delay \ upstream={ BER=$ber duplicate=$dup } \ downstream={ BER=$ber duplicate=$dup } }" @@ -700,10 +705,10 @@ proc execSetIfcQDisc { eid node ifc qdisc } { WFQ { set qdisc wfq } DRR { set qdisc drr } } - set ngnode "$eid\_$lnode1-$lnode2" - if { [catch { nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }" }] } { - set ngnode "$eid\_$lnode2-$lnode1" - nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }" + set ngnode "$lnode1-$lnode2" + if { [catch { nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }" }] } { + set ngnode "$lnode2-$lnode1" + nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ $qdisc=1 } }" } } @@ -737,11 +742,11 @@ proc execSetIfcQDrop { eid node ifc qdrop } { drop-head { set qdrop drophead } drop-tail { set qdrop droptail } } - set ngnode "$eid\_$lnode1-$lnode2" - if { [catch { nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }" }] } { + set ngnode "$lnode1-$lnode2" + if { [catch { nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }" }] } { # XXX dir should be reversed! - set ngnode "$eid\_$lnode2-$lnode1" - nexec ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }" + set ngnode "$lnode2-$lnode1" + nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ $qdrop=1 } }" } } @@ -770,13 +775,13 @@ proc execSetIfcQLen { eid node ifc qlen } { set mirror_link [getLinkMirror [lindex $target 0]] set lnode2 [lindex [linkPeers $mirror_link] 0] } - set ngnode "$eid\_$lnode1-$lnode2" + set ngnode "$lnode1-$lnode2" if { $qlen == 0 } { set qlen -1 } - if { [catch { nexec ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }" }] } { - set ngnode "$eid\_$lnode2-$lnode1" - nexec ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }" + if { [catch { nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }" }] } { + set ngnode "$lnode2-$lnode1" + nexec vimage $eid ngctl msg $ngnode: setcfg "{ $dir={ queuelen=$qlen } }" } } @@ -796,7 +801,7 @@ proc execSetIfcQLen { eid node ifc qlen } { proc execSetLinkParams { eid link } { set lnode1 [lindex [linkPeers $link] 0] set lnode2 [lindex [linkPeers $link] 1] - set lname $eid\_$lnode1-$lnode2 + set lname $lnode1-$lnode2 set bandwidth [expr [getLinkBandwidth $link] + 0] set delay [expr [getLinkDelay $link] + 0] @@ -816,7 +821,7 @@ proc execSetLinkParams { eid link } { set dup -1 } - nexec ngctl msg $lname: setcfg \ + nexec vimage $eid ngctl msg $lname: setcfg \ "{ bandwidth=$bandwidth delay=$delay \ upstream={ BER=$ber duplicate=$dup } \ downstream={ BER=$ber duplicate=$dup } }" @@ -870,9 +875,9 @@ proc cleanupCfg { } { set lnode2 [lindex [linkPeers $mirror_link] 0] set ifnode2 [ifcByPeer $lnode2 [getNodeMirror $p_lnode2]] } - set lname $eid\_$lnode1-$lnode2 + set lname $lnode1-$lnode2 statline "Shutting down netgraph node $lname" - catch "nexec ngctl msg $lname: shutdown" + catch "nexec vimage $eid ngctl msg $lname: shutdown" } diff --git a/hub.tcl b/hub.tcl index 584c802..04fa9ea 100755 --- a/hub.tcl +++ b/hub.tcl @@ -1,4 +1,4 @@ -# $Id: hub.tcl,v 1.11 2007/05/07 23:09:07 marko Exp $ +# $Id: hub.tcl,v 1.12 2007/10/29 16:25:23 marko Exp $ # # Copyright 2005 University of Zagreb, Croatia. All rights reserved. # @@ -80,11 +80,11 @@ proc $MODULE.layer {} { proc $MODULE.instantiate { eid node } { global ngnodemap - catch {exec ngctl mkpeer hub anchor anchor | tail -1} resp - catch {exec ngctl l | fgrep " Name: " | cut -c51-58 | xargs echo } nglist + catch {exec vimage $eid ngctl mkpeer hub anchor anchor | tail -1} resp + catch {exec vimage $eid ngctl l | fgrep " Name: " | cut -c51-58 | xargs echo } nglist set id [lindex $nglist 1] - catch {exec ngctl name \[$id\]: $eid\_$node} - set ngnodemap($eid\_$node) $eid\_$node + catch {exec vimage $eid ngctl name \[$id\]: $node} + set ngnodemap($eid\.$node) $node } #****f* hub.tcl/hub.start @@ -130,7 +130,7 @@ proc $MODULE.shutdown { eid node } { # * node_id - id of the node (type of the node is hub) #**** proc $MODULE.destroy { eid node } { - catch { nexec ngctl msg $eid\_$node: shutdown } + catch { nexec vimage $eid ngctl msg $node: shutdown } } #****f* hub.tcl/hub.nghook @@ -155,5 +155,5 @@ proc $MODULE.destroy { eid node } { proc $MODULE.nghook { eid node ifc } { set ifunit [string range $ifc 1 end] - return [list $eid\_$node link$ifunit] + return [list $eid\.$node link$ifunit] } diff --git a/lanswitch.tcl b/lanswitch.tcl index e879f0a..b8d575c 100755 --- a/lanswitch.tcl +++ b/lanswitch.tcl @@ -1,4 +1,4 @@ -# $Id: lanswitch.tcl,v 1.11 2007/05/07 23:09:07 marko Exp $ +# $Id: lanswitch.tcl,v 1.12 2007/10/29 16:25:23 marko Exp $ # # Copyright 2005 University of Zagreb, Croatia. All rights reserved. # @@ -80,11 +80,11 @@ proc $MODULE.layer {} { proc $MODULE.instantiate { eid node } { global ngnodemap - catch {exec ngctl mkpeer bridge anchor anchor | tail -1} resp - catch {exec ngctl l | fgrep " Name: " | cut -c51-58 | xargs echo } nglist + catch {exec vimage $eid ngctl mkpeer bridge anchor anchor | tail -1} resp + catch {exec vimage $eid ngctl l | fgrep " Name: " | cut -c51-58 | xargs echo } nglist set id [lindex $nglist 1] - catch {exec ngctl name \[$id\]: $eid\_$node} - set ngnodemap($eid\_$node) $eid\_$node + catch {exec vimage $eid ngctl name \[$id\]: $node} + set ngnodemap($eid\.$node) $node } @@ -132,7 +132,7 @@ proc $MODULE.shutdown { eid node } { # * node_id - id of the node (type of the node is lanswitch) #**** proc $MODULE.destroy { eid node } { - catch { nexec ngctl msg $eid\_$node: shutdown } + catch { nexec vimage $eid ngctl msg $node: shutdown } } @@ -158,5 +158,5 @@ proc $MODULE.destroy { eid node } { proc $MODULE.nghook { eid node ifc } { set ifunit [string range $ifc 1 end] - return [list $eid\_$node link$ifunit] + return [list $eid\.$node link$ifunit] } diff --git a/quagga.tcl b/quagga.tcl index 05427a4..0d2dd6c 100755 --- a/quagga.tcl +++ b/quagga.tcl @@ -1,4 +1,4 @@ -# $Id: quagga.tcl,v 1.19 2007/08/18 18:41:43 marko Exp $ +# $Id: quagga.tcl,v 1.20 2007/10/29 16:25:23 marko Exp $ # # Copyright 2005 University of Zagreb, Croatia. All rights reserved. # @@ -191,7 +191,7 @@ proc $MODULE.shellcmd { node } { # and routing model is quagga) #**** proc $MODULE.instantiate { eid node } { - set node_id "$eid\_$node" + set node_id "$eid\.$node" l3node.instantiate $eid $node nexec vimage $node_id sysctl net.inet.ip.forwarding=1 catch { nexec vimage $node_id sysctl net.inet6.ip6.forwarding=1 } diff --git a/static.tcl b/static.tcl index 1f7a40b..9941f5c 100755 --- a/static.tcl +++ b/static.tcl @@ -1,4 +1,4 @@ -# $Id: static.tcl,v 1.15 2007/07/19 01:17:05 marko Exp $ +# $Id: static.tcl,v 1.16 2007/10/29 16:25:23 marko Exp $ # # Copyright 2005 University of Zagreb, Croatia. All rights reserved. # @@ -184,7 +184,7 @@ proc $MODULE.shellcmd { node } { #**** proc $MODULE.instantiate { eid node } { - set node_id "$eid\_$node" + set node_id "$eid\.$node" l3node.instantiate $eid $node nexec vimage $node_id sysctl net.inet.ip.forwarding=1 catch { nexec vimage $node_id sysctl net.inet6.ip6.forwarding=1 } diff --git a/xorp.tcl b/xorp.tcl index 2ee98b8..e02a2cc 100755 --- a/xorp.tcl +++ b/xorp.tcl @@ -1,4 +1,4 @@ -# $Id: xorp.tcl,v 1.21 2007/07/19 01:17:05 marko Exp $ +# $Id: xorp.tcl,v 1.22 2007/10/29 16:25:23 marko Exp $ # # Copyright 2005 University of Zagreb, Croatia. All rights reserved. # @@ -267,7 +267,7 @@ proc $MODULE.shellcmd { node } { #**** proc $MODULE.instantiate { eid node } { - set node_id "$eid\_$node" + set node_id "$eid\.$node" l3node.instantiate $eid $node nexec vimage $node_id sysctl net.inet.ip.forwarding=1 catch { nexec vimage $node_id sysctl net.inet6.ip6.forwarding=1 } -- 2.39.5