]> git.entuzijast.net Git - imunes.git/commitdiff
First in a series of changes to leverage on recently introduced
authormarko <marko>
Mon, 29 Oct 2007 16:25:23 +0000 (16:25 +0000)
committermarko <marko>
Mon, 29 Oct 2007 16:25:23 +0000 (16:25 +0000)
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
exec.tcl
hub.tcl
lanswitch.tcl
quagga.tcl
static.tcl
xorp.tcl

index 3649a69a0b979546dc3258233d95127c2045523d..a60a806a32cadd802b56d7ddbbcc91383e3f5148 100755 (executable)
@@ -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 &
 }
 
index d7208ed5f9018522a4cc1fbc4421d4e3029c7a0e..43f6183e9a6bca4704712fd3f1bc3ee8d38ad1fe 100755 (executable)
--- 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 584c802834e75c82e72cb58fce3c2b9f70ba7ce5..04fa9ea7510760210e67814b64a1f8ba8495e9aa 100755 (executable)
--- 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]
 }
index e879f0ae5a9eca04d5f005d47d9c36b0dff8c0c6..b8d575c264df437a53702810a7b06a9ac824550f 100755 (executable)
@@ -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]
 }
index 05427a462bec72a055886122a779eeacfa1607cc..0d2dd6c5a3c52fb4bb197a86835b2f62194d9733 100755 (executable)
@@ -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 }
index 1f7a40be50d8daf39aa5e54bf29a5b3b69c334d1..9941f5c9d59523044810450d67bacb5a94237efe 100755 (executable)
@@ -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 }
index 2ee98b810a29cbe7a44f28605cc71fa29146baec..e02a2cc87957ab9ee3bb241b94fe825aba2e11ae 100755 (executable)
--- 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 }