-# $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.
#
# 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.
# 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]
}
#****
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
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" } {
}
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
}
#****
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]
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
# * 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] {
# * 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}
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" } {
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]
[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 } }"
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 } }"
}
}
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 } }"
}
}
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 } }"
}
}
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]
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 } }"
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"
}