Commit fc5a568f authored by Christopher Alfeld's avatar Christopher Alfeld

Added parsing support for make-lan. You can now have lans in your ns

files.  Note: none of the backend has been written yet.

Also did a number of minor bug fixes.  The most serious bug showed up when
you have a topology with no links.
parent 59abe444
Class lan
# print
# output format: <id> "<nodes>" <delay> <bw>
lan instproc print {file} {
global nodeid_map prefix
if {[info exists nodeid_map(lan[$self set id])]} {
set lanname $nodeid_map(lan[$self set id])
} else {
set lanname lan[$self set id]
}
puts -nonewline $file "$lanname \""
set lastnode [lindex [$self set nodes] end]
foreach node [$self set nodes] {
if {[info exists nodeid_map(n[$node set id])]} {
set nodename $nodeid_map(n[$node set id])
} else {
set nodename n[$self set id]
}
puts -nonewline $file "$nodename"
if {$node != $lastnode} {
puts -nonewline $file " "
}
}
puts -nonewline $file "\" [$self set bw] [$self set delay] "
$self instvar lanlinks
if {! [info exists lanlinks]} {
set lanlinks {}
}
foreach link [$self set lanlinks] {
puts -nonewline $file "$prefix-$link "
}
puts $file ""
}
#add link
lan instproc addlink {link} {
$self instvar lanlinks
lappend lanlinks $link
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ Class node
# output format is: nodeID type link(s)
node instproc print {file} {
global nodeid_map
global prefix
if {[info exists nodeid_map(n[$self set id])]} {
set nodename $nodeid_map(n[$self set id])
......@@ -12,9 +13,12 @@ node instproc print {file} {
set nodename n[$self set id]
}
$self instvar nodelinks
if {! [info exists nodelinks]} {
set nodelinks {}
}
puts -nonewline $file "$nodename [$self set type]"
foreach link $nodelinks {
puts -nonewline $file " $link"
puts -nonewline $file " $prefix-$link"
}
#we have to add ". bandwidth delay" to delay nodes.
if [string match [$self set type] delay] {
......@@ -31,3 +35,17 @@ node instproc addlink {link} {
$self instvar nodelinks
lappend nodelinks $link
}
#getLan/setLan
node instproc setLan {lan} {
$self set lan $lan
}
node instproc getLan {} {
$self instvar lan
if {![info exists lan]} {
$self set lan ""
}
return [$self set lan]
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ source $libdir/tcl-object.tcl
source $libdir/node.tcl
source $libdir/link.tcl
source $libdir/event.tcl
source $libdir/lan.tcl
###
# calfeld@cs.utah.edu
......@@ -27,10 +28,11 @@ proc set {args} {
if {! $skipset} {
real_set skipset 1
real_set var [lindex $args 0]
if {$var != "currnode"} {
if {$var != "currnode" && $var != "currlan"} {
if {[llength $args] > 1} {
real_set val [lindex $args 1]
if {[regexp {^n[0-9]+$} $val] != -1} {
if {([regexp {^n[0-9]+$} $val] != -1) ||
([regexp {^lan[0-9]+$} $val] != -1)} {
if {![info exists nodeid_map($val)]} {
real_set nodeid_map($val) $var
}
......@@ -55,6 +57,7 @@ proc nop {args} {}
#begin at 0. 1,2,3... i cheerfully ignore the possibility of wrapping...
set nodeID 0
set linkID 0
set lanID 0
set eventID 0
set nodelist {}
......@@ -63,6 +66,8 @@ set linkslist {}
set eventlist {}
set lanlist {}
# sim.tcl handles the ns Simulator methods
source $libdir/sim.tcl
......
......@@ -35,7 +35,7 @@
# SUCH DAMAGE.
#
# @(#) $Header: /home/cvs_mirrors/cvs-public.flux.utah.edu/CVS/testbed/tbsetup/ns2ir/Attic/sim.tcl,v 1.2 2000-10-18 22:21:48 calfeld Exp $
# @(#) $Header: /home/cvs_mirrors/cvs-public.flux.utah.edu/CVS/testbed/tbsetup/ns2ir/Attic/sim.tcl,v 1.3 2000-12-26 20:10:09 calfeld Exp $
#
......@@ -178,6 +178,7 @@ Simulator instproc run {} {
global nodelist
global linkslist
global eventlist
global lanlist
global irfile
set IRfile [open $irfile w]
......@@ -195,6 +196,13 @@ Simulator instproc run {} {
$event print $IRfile
}
puts $IRfile "END events"
puts $IRfile "START lans"
foreach lan $lanlist {
$lan print $IRfile
}
puts $IRfile "END lans"
close $IRfile
}
Simulator instproc halt {} {
......@@ -239,13 +247,13 @@ Simulator instproc duplex-link { n1 n2 bw delay type args } {
# if there are delay or bandwidth restrictions, add a delay node
# and link to it
# if {$delay!="" && $delay!=0 || $bw!="" && $bw!=0} {
# #delaynode is not a 'real' Sim method. created for testbed.
# set dnode [$self delaynode [$self bw_parse $bw] [$self delay_parse $delay]]
#
# $self duplex-link $n1 $dnode 0 0 $type $args
# $self duplex-link $n2 $dnode 0 0 $type $args
# }
# if {$delay!="" && $delay!=0 || $bw!="" && $bw!=0} {
# #delaynode is not a 'real' Sim method. created for testbed.
# set dnode [$self delaynode [$self bw_parse $bw] [$self delay_parse $delay]]
#
# $self duplex-link $n1 $dnode 0 0 $type $args
# $self duplex-link $n2 $dnode 0 0 $type $args
# }
set currLink l$linkID
link $currLink
......@@ -474,3 +482,44 @@ Simulator instproc bw_parse { bspec } {
}
}
}
######################################################################
# calfeld
# Lan code
######################################################################
Simulator instproc make-lan {nodelist bw delay
{llType LL}
{ifqType Queue/DropTail}
{macType Mac}
{chanType Channel}
{phyType Phy/WiredPhy}} {
global lanlist
global lanID
foreach node $nodelist {
if {[$node getLan] != {}} {
throw "$node already in a LAN!"
}
}
set currlan lan$lanID
lan $currlan
$currlan set nodes $nodelist
$currlan set bw $bw
$currlan set delay $delay
$currlan set id $lanID
foreach node $nodelist {
$node setLan $currlan
}
lappend lanlist $currlan
incr lanID
return $currlan
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment