Index: route.cc =================================================================== RCS file: /usr/src/mash/repository/vint/ns-2/route.cc,v retrieving revision 1.23 diff -u -r1.23 route.cc --- route.cc 1998/08/28 23:08:36 1.23 +++ route.cc 1998/09/28 18:32:45 @@ -177,7 +177,8 @@ // dst_addr[i] = 0; // } str2address(argv, src_addr, dst_addr); - for (i=0; i < HIER_LEVEL; i++) + // for (i=0; i < HIER_LEVEL; i++) + for (i=0; i < level_; i++) if (src_addr[i]<=0 || dst_addr[i]<=0){ tcl.result ("negative node number"); return (TCL_ERROR); @@ -198,7 +199,8 @@ str2address(argv, src_addr, dst_addr); // assuming node-node addresses (instead of node-cluster or node-domain pair) // are sent for hier_reset - for (i=0; i < HIER_LEVEL; i++) + // for (i=0; i < HIER_LEVEL; i++) + for (i=0; i < level_; i++) if (src_addr[i]<=0 || dst_addr[i]<=0){ tcl.result ("negative node number"); return (TCL_ERROR); @@ -269,7 +271,8 @@ ns_strtok(asrc, src); ns_strtok(adst, dst); - for (i=0; i < HIER_LEVEL; i++) + // for (i=0; i < HIER_LEVEL; i++) + for (i=0; i < level_; i++) if (src[i] <= 0) { tcl.result("negative src node number"); return TCL_ERROR; Index: ./tcl/lib/ns-route.tcl =================================================================== RCS file: /usr/src/mash/repository/vint/ns-2/tcl/lib/ns-route.tcl,v retrieving revision 1.13 diff -u -r1.13 ns-route.tcl --- ns-route.tcl 1998/09/21 21:07:34 1.13 +++ ns-route.tcl 1998/09/28 18:33:45 @@ -51,14 +51,14 @@ Simulator instproc compute-routes {} { - # - # call hierarchical routing, if applicable - # - if [Simulator set EnableHierRt_] { - $self compute-hier-routes - } else { - $self compute-flat-routes - } + # + # call hierarchical routing, if applicable + # + if [Simulator set EnableHierRt_] { + $self compute-hier-routes + } else { + $self compute-flat-routes + } } Simulator instproc compute-flat-routes {} { @@ -168,11 +168,11 @@ set ns [Simulator instance] set node [$ns get-node-by-id $nodeid] - if [Simulator set EnableHierRt_] { - set dest [$ns get-node-by-id $destid] - set nh [$self hier-lookup [$node node-addr] [$dest node-addr]] - return [$ns get-node-id-by-addr $nh] - } + if [Simulator set EnableHierRt_] { + set dest [$ns get-node-by-id $destid] + set nh [$self hier-lookup [$node node-addr] [$dest node-addr]] + return [$ns get-node-id-by-addr $nh] + } set rtobj [$node rtObject?] if { $rtobj != "" } { $rtobj lookup [$ns get-node-by-id $destid] @@ -220,41 +220,45 @@ # Hierarchical routing support # Simulator instproc hier-topo {rl} { - # + # # if topo info not found, use default values - # - AddrParams instvar domain_num_ cluster_num_ nodes_num_ hlevel_ + # + AddrParams instvar domain_num_ cluster_num_ nodes_num_ hlevel_ + ### this is bad hack..should be removed when changed to n-levels + + if ![info exists cluster_num_] { if {$hlevel_ > 1} { - ### set default value of clusters/domain - if ![info exists cluster_num_] { - set def [AddrParams set def_clusters] - puts "Default value for cluster_num set to $def\n" - for {set i 0} {$i < $domain_num_} {incr i} { - lappend clusters $def - } - AddrParams set cluster_num_ $clusters - } - ### bad hack..should be removed when changed to n-levels - if {$hlevel_ > 2} { - set total_node 0 - ### set default value of nodes/cluster - if ![info exists nodes_num_ ] { - set def [AddrParams set def_nodes] - puts "Default value for nodes_num set to $def\n" - for {set i 0} {$i < $domain_num_} {incr i} { - set total_node [expr $total_node + \ - [lindex $clusters $i]] - } - for {set i 0} {$i < $total_node} {incr i} { - lappend nodes $def - } - AddrParams set nodes_num_ $nodes - } - } - } - eval $rl send-num-of-domains $domain_num_ - eval $rl send-num-of-clusters $cluster_num_ - eval $rl send-num-of-nodes $nodes_num_ + ### set default value of clusters/domain + set def [AddrParams set def_clusters] + puts "Default value for cluster_num set to $def\n" + for {set i 0} {$i < $domain_num_} {incr i} { + lappend clusters $def + } + } else { + ### how did we reach here instead of flat routing? + puts stderr "hierarchy level = 1; should use flat-rtg instead of hier-rtg" + exit 1 + } + AddrParams set cluster_num_ $clusters + } + + ### set default value of nodes/cluster + if ![info exists nodes_num_ ] { + set total_node 0 + set def [AddrParams set def_nodes] + puts "Default value for nodes_num set to $def\n" + for {set i 0} {$i < $domain_num_} {incr i} { + set total_node [expr $total_node + \ + [lindex $clusters $i]] + } + for {set i 0} {$i < $total_node} {incr i} { + lappend nodes $def + } + AddrParams set nodes_num_ $nodes + } + eval $rl send-num-of-domains $domain_num_ + eval $rl send-num-of-clusters $cluster_num_ + eval $rl send-num-of-nodes $nodes_num_ } Index: ./tcl/rtglib/route-proto.tcl =================================================================== RCS file: /usr/src/mash/repository/vint/ns-2/tcl/rtglib/route-proto.tcl,v retrieving revision 1.22 diff -u -r1.22 route-proto.tcl --- route-proto.tcl 1998/07/06 05:29:46 1.22 +++ route-proto.tcl 1998/09/28 18:35:12 @@ -370,13 +370,9 @@ # The Simulator knows the entire topology. # Hence, the current compute-routes method in the Simulator class is # well suited. We use it as is. - - # check if hierarchical routing is enabled. - if [Simulator set EnableHierRt_] { - [Simulator instance] compute-hier-routes - } else { - [Simulator instance] compute-routes - } + + [Simulator instance] compute-routes + } # @@ -385,19 +381,12 @@ Class Agent/rtProto/Session -superclass Agent/rtProto Agent/rtProto/Session proc init-all args { - if [Simulator set EnableHierRt_] { - [Simulator instance] compute-hier-routes - } else { - [Simulator instance] compute-routes - } + [Simulator instance] compute-routes } Agent/rtProto/Session proc compute-all {} { - if [Simulator set EnableHierRt_] { - [Simulator instance] compute-hier-routes - } else { - [Simulator instance] compute-routes - } + [Simulator instance] compute-routes + } # Index: ./tcl/lib/ns-address.tcl =================================================================== RCS file: /usr/src/mash/repository/vint/ns-2/tcl/lib/ns-address.tcl,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- ns-address.tcl 1998/08/28 23:08:37 1.11 +++ ns-address.tcl 1998/09/24 22:07:00 1.12 @@ -196,10 +196,12 @@ Simulator instproc set-hieraddress {hlevel args} { set a [$self get-AllocAddrBits "new"] - $a set size_ [AllocAddrBits set MAXADDRSIZE_] - if ![Simulator set EnableHierRt_] { - Simulator set EnableHierRt_ 1 - Simulator set node_factory_ HierNode + $a set size_ [AllocAddrBits set MAXADDRSIZE_] + if { ![Simulator set EnableHierRt_] && $hlevel > 1} { + ### By default, setting hierarchical addressing also turns on hier rtg, + ### provided the level is greater than 1 + Simulator set EnableHierRt_ 1 + Simulator set node_factory_ HierNode } if [Simulator set EnableMcast_] { $a set-mcastbits 1