topologies.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:23k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995 The Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/topologies.tcl,v 1.14 1998/05/09 00:35:53 sfloyd Exp $
  34. #
  35. #
  36. # This test suite reproduces most of the tests from the following note:
  37. # Floyd, S., Simulator Tests. July 1995.  
  38. # URL ftp://ftp.ee.lbl.gov/papers/simtests.ps.Z.
  39. #
  40. # To run individual tests:
  41. # ns test-suite.tcl tahoe1
  42. # ns test-suite.tcl tahoe2
  43. # ...
  44. #
  45. Class SkelTopology
  46. SkelTopology instproc init {} {
  47.     $self next
  48. }
  49. SkelTopology instproc node? n {
  50.     $self instvar node_
  51.     if [info exists node_($n)] {
  52. set ret $node_($n)
  53.     } else {
  54. set ret ""
  55.     }
  56.     set ret
  57. }
  58. SkelTopology instproc add-fallback-links {ns nodelist bw delay qtype args} {
  59.    $self instvar node_
  60.     set n1 [lindex $nodelist 0]
  61.     foreach n2 [lrange $nodelist 1 end] {
  62. if ![info exists node_($n2)] {
  63.     set node_($n2) [$ns node]
  64. }
  65. $ns duplex-link $node_($n1) $node_($n2) $bw $delay $qtype
  66. foreach opt $args {
  67.     set cmd [lindex $opt 0]
  68.     set val [lindex $opt 1]
  69.     if {[llength $opt] > 2} {
  70. set x1 [lindex $opt 2]
  71. set x2 [lindex $opt 3]
  72.     } else {
  73. set x1 $n1
  74. set x2 $n2
  75.     }
  76.     $ns $cmd $node_($x1) $node_($x2) $val
  77.     $ns $cmd $node_($x2) $node_($x1) $val
  78. }
  79. set n1 $n2
  80.     }
  81. }
  82. SkelTopology instproc checkConfig {lclass ns} {
  83.     if {[$lclass info instprocs config] != "" &&
  84.     [$self info class] == $lclass} {
  85. $self config $ns
  86.     }
  87. }
  88. #
  89. Class NodeTopology/4nodes -superclass SkelTopology
  90. # Create a simple four node topology:
  91. #
  92. #    s1
  93. #       
  94. #     8Mb,5ms    0.8Mb,100ms
  95. #         r1 --------- k1
  96. #     8Mb,5ms /
  97. #      /
  98. #    s2
  99. NodeTopology/4nodes instproc init ns {
  100.     $self next
  101.     $self instvar node_
  102.     set node_(s1) [$ns node]
  103.     set node_(s2) [$ns node]
  104.     set node_(r1) [$ns node]
  105.     set node_(k1) [$ns node]
  106. }
  107. #
  108. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 100ms bottleneck.
  109. # Queue-limit on bottleneck is 6 packets.
  110. #
  111. Class Topology/net0 -superclass NodeTopology/4nodes
  112. Topology/net0 instproc init ns {
  113.     $self next $ns
  114.     $self instvar node_
  115.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 5ms DropTail 
  116.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 5ms DropTail 
  117.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  118.     $ns queue-limit $node_(r1) $node_(k1) 6
  119.     $ns queue-limit $node_(k1) $node_(r1) 6
  120.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  121.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  122.     $ns duplex-link-op $node_(r1) $node_(k1) orient right
  123.     $ns duplex-link-op $node_(r1) $node_(k1) queuePos 0
  124.     $ns duplex-link-op $node_(k1) $node_(r1) queuePos 0
  125.     $self checkConfig $class $ns
  126. }
  127. Class Topology/net0-lossy -superclass NodeTopology/4nodes
  128. Topology/net0-lossy instproc init ns {
  129.     $self next $ns
  130.     $self instvar node_
  131.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 5ms DropTail 
  132.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 5ms DropTail 
  133.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  134.     $ns queue-limit $node_(r1) $node_(k1) 6
  135.     $ns queue-limit $node_(k1) $node_(r1) 6
  136.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  137.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  138.     $ns duplex-link-op $node_(r1) $node_(k1) orient right
  139.     $ns duplex-link-op $node_(r1) $node_(k1) queuePos 0
  140.     $ns duplex-link-op $node_(k1) $node_(r1) queuePos 0
  141.     $self instvar lossylink_
  142.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  143.     set em [new ErrorModule Fid]
  144.     set errmodel [new ErrorModel/Periodic]
  145.     $errmodel unit pkt
  146.     $errmodel set offset_ 1.0
  147.     $errmodel set period_ 25.0
  148.     $lossylink_ errormodule $em
  149.     $em insert $errmodel
  150.     $em bind $errmodel 0
  151.     $self checkConfig $class $ns
  152. }
  153. Class Topology/net0- -superclass Topology/net0
  154. Topology/net0- instproc init ns {
  155.     $self next $ns
  156.     $self instvar node_ rtm_
  157.     set rtm_(r1:k1)  [$ns rtmodel Exponential {} $node_(r1) $node_(k1)]
  158.     set dynamicsTrace [open dyn.tr "w"]
  159.     [$ns link $node_(r1) $node_(k1)] trace-dynamics $ns $dynamicsTrace
  160.     [$ns link $node_(k1) $node_(r1)] trace-dynamics $ns $dynamicsTrace
  161.     $self checkConfig $class $ns
  162. }
  163. Class Topology/net0-Session -superclass Topology/net0
  164. Topology/net0-Session instproc init ns {
  165.     $self next $ns ;# instantiate entire topology
  166.     $self add-fallback-links $ns {r1 b1 k1} 800Kb 100ms DropTail
  167.     $self instvar node_ rtm_
  168.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  169.     $ns rtproto Session
  170.     $self checkConfig $class $ns
  171. }
  172. Class Topology/net0-DV -superclass Topology/net0
  173. Topology/net0-DV instproc init ns {
  174.     $self next $ns ;# instantiate entire topology
  175.     $self add-fallback-links $ns {r1 b1 k1} 800Kb 100ms DropTail
  176.     $self instvar node_ rtm_
  177.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  178.     $ns rtproto DV
  179.     $self checkConfig $class $ns
  180. }
  181. Class Topology/net0-DVm0 -superclass Topology/net0
  182. Topology/net0-DVm0 instproc init ns {
  183.     Node set multiPath_ 1
  184.     Agent/rtProto/Direct set preference_ 200 ;# Cf. tcl/ex/simple-eqp1.tcl
  185.     $self next $ns ;# now instantiate entire topology
  186.     $self add-fallback-links $ns {r1 b1 k1} 800Kb 100ms DropTail {cost 2 r1 k1}
  187.     $ns rtproto DV
  188.     $self checkConfig $class $ns
  189. }
  190. Class Topology/net0-DVm1 -superclass Topology/net0
  191. Topology/net0-DVm1 instproc init ns {
  192.     Node set multiPath_ 1
  193.     Agent/rtProto/Direct set preference_ 200 ;# Cf. tcl/ex/simple-eqp1.tcl
  194.     $self next $ns ;# now instantiate entire topology
  195.     $self add-fallback-links $ns {r1 b1 k1} 800Kb 100ms DropTail {cost 2 r1 k1}
  196.     $self instvar node_ rtm_
  197.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  198.     $ns rtproto DV
  199.     $self checkConfig $class $ns
  200. }
  201. #
  202. #
  203. # Links1 uses 10Mb, 5ms feeders, and a 1.5Mb 100ms bottleneck.
  204. # Queue-limit on bottleneck is 23 packets.
  205. #
  206. Class Topology/net1 -superclass NodeTopology/4nodes
  207. Topology/net1 instproc init ns {
  208.     $self next $ns
  209.     $self instvar node_
  210.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 5ms DropTail 
  211.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 5ms DropTail 
  212.     $ns duplex-link $node_(r1) $node_(k1) 1.5Mb 100ms DropTail
  213.     $ns queue-limit $node_(r1) $node_(k1) 23
  214.     $ns queue-limit $node_(k1) $node_(r1) 23
  215.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  216.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  217.     $ns duplex-link-op $node_(r1) $node_(k1) orient right
  218.     $ns duplex-link-op $node_(r1) $node_(k1) queuePos 0
  219.     $ns duplex-link-op $node_(k1) $node_(r1) queuePos 0
  220.     $self checkConfig $class $ns
  221. }
  222. Class Topology/net1- -superclass Topology/net1
  223. Topology/net1- instproc init ns {
  224.     $self next $ns
  225.     $self instvar node_ rtm_
  226.     set rtm_(r1:k1) [$ns rtmodel Exponential {} $node_(r1) $node_(k1)]
  227.     set dynamicsTrace [open dyn.tr "w"]
  228.     [$ns link $node_(r1) $node_(k1)] trace-dynamics $ns $dynamicsTrace
  229.     [$ns link $node_(k1) $node_(r1)] trace-dynamics $ns $dynamicsTrace
  230.     $self checkConfig $class $ns
  231. }
  232. Class Topology/net1-Session -superclass Topology/net1
  233. Topology/net1-Session instproc init ns {
  234.     $self next $ns ;# instantiate entire topology
  235.     $self add-fallback-links $ns {r1 b1 k1} 1.5Mb 100ms DropTail
  236.     $self instvar node_ rtm_
  237.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  238.     $ns rtproto Session
  239.     $self checkConfig $class $ns
  240. }
  241. Class Topology/net1-DV -superclass Topology/net1
  242. Topology/net1-DV instproc init ns {
  243.     $self next $ns ;# instantiate entire topology
  244.     $self add-fallback-links $ns {r1 b1 k1} 1.5Mb 100ms DropTail
  245.     $self instvar node_ rtm_
  246.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  247.     $ns rtproto DV
  248.     $self checkConfig $class $ns
  249. }
  250. Class Topology/net1-DVm0 -superclass Topology/net1
  251. Topology/net1-DVm0 instproc init ns {
  252.     Node set multiPath_ 1
  253.     Agent/rtProto/Direct set preference_ 200 ;# Cf. tcl/ex/simple-eqp1.tcl
  254.     $self next $ns ;# now instantiate entire topology
  255.     $self add-fallback-links $ns {r1 b1 k1} 1.5Mb 100ms DropTail {cost 2 r1 k1}
  256.     $ns rtproto DV
  257.     $self checkConfig $class $ns
  258. }
  259. Class Topology/net1-DVm1 -superclass Topology/net1
  260. Topology/net1-DVm1 instproc init ns {
  261.     Node set multiPath_ 1
  262.     Agent/rtProto/Direct set preference_ 200 ;# Cf. tcl/ex/simple-eqp1.tcl
  263.     $self next $ns ;# now instantiate entire topology
  264.     $self add-fallback-links $ns {r1 b1 k1} 1.5Mb 100ms DropTail {cost 2 r1 k1}
  265.     $self instvar node_ rtm_
  266.     set rtm_(r1:k1) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(k1)]
  267.     $ns rtproto DV
  268.     $self checkConfig $class $ns
  269. }
  270. #
  271. Class NodeTopology/6nodes -superclass SkelTopology
  272. #
  273. # Create a simple six node topology:
  274. #
  275. #        s1                 s3
  276. #                          /
  277. # 10Mb,2ms   1.5Mb,20ms   / 10Mb,4ms
  278. #           r1 --------- r2
  279. # 10Mb,3ms /                10Mb,5ms
  280. #         /                 
  281. #        s2                 s4 
  282. #
  283. NodeTopology/6nodes instproc init ns {
  284.     $self next
  285.     $self instvar node_
  286.     set node_(s1) [$ns node]
  287.     set node_(s2) [$ns node]
  288.     set node_(r1) [$ns node]
  289.     set node_(r2) [$ns node]
  290.     set node_(s3) [$ns node]
  291.     set node_(s4) [$ns node]
  292. }
  293. Class Topology/cbq1 -superclass NodeTopology/6nodes
  294. Topology/cbq1 instproc init ns {
  295. $self next $ns
  296. $self instvar node_
  297. $ns duplex-link $node_(s1) $node_(r1) 10Mb 5ms DropTail
  298. $ns duplex-link $node_(s2) $node_(r1) 10Mb 5ms DropTail
  299. $ns duplex-link $node_(s3) $node_(r1) 10Mb 5ms DropTail
  300. $ns duplex-link $node_(s4) $node_(r1) 10Mb 5ms DropTail
  301. $ns simplex-link $node_(r2) $node_(r1) 1.5Mb 5ms DropTail
  302. $ns queue-limit $node_(r2) $node_(r1) 20
  303. }
  304. Class Topology/cbq1-prr -superclass Topology/cbq1
  305. Topology/cbq1-prr instproc init ns {
  306. $self next $ns
  307. $self instvar node_ cbqlink_
  308. $ns simplex-link $node_(r1) $node_(r2) 1.5Mb 5ms CBQ
  309. set cbqlink_ [$ns link $node_(r1) $node_(r2)]
  310. }
  311. Class Topology/cbq1-wrr -superclass Topology/cbq1
  312. Topology/cbq1-wrr instproc init ns {
  313. $self next $ns
  314. $self instvar node_ cbqlink_
  315. $ns simplex-link $node_(r1) $node_(r2) 1.5Mb 5ms CBQ/WRR
  316. set cbqlink_ [$ns link $node_(r1) $node_(r2)]
  317. }
  318. Class Topology/net2 -superclass NodeTopology/6nodes
  319. Topology/net2 instproc init ns {
  320.     $self next $ns
  321.     $self instvar node_
  322.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail 
  323.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail 
  324.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED 
  325.     $ns queue-limit $node_(r1) $node_(r2) 25
  326.     $ns queue-limit $node_(r2) $node_(r1) 25
  327.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail 
  328.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail 
  329.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  330.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  331.     $ns duplex-link-op $node_(r1) $node_(r2) orient right
  332.     $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0
  333.     $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0
  334.     $ns duplex-link-op $node_(s3) $node_(r2) orient left-down
  335.     $ns duplex-link-op $node_(s4) $node_(r2) orient left-up
  336.     $self checkConfig $class $ns
  337. }
  338. Class Topology/net2-lossy -superclass Topology/net2
  339. Topology/net2-lossy instproc init ns {
  340.     $self next $ns
  341.     $self instvar node_
  342.     $self instvar lossylink_
  343.     set lossylink_ [$ns link $node_(r1) $node_(r2)]
  344.     set em [new ErrorModule Fid]
  345.     set errmodel [new ErrorModel/Periodic]
  346.     $errmodel unit pkt
  347.     $lossylink_ errormodule $em
  348.     $em insert $errmodel
  349.     $em bind $errmodel 0
  350.     $em default pass
  351. }
  352. Class Topology/net2- -superclass Topology/net2
  353. Topology/net2- instproc init ns {
  354.     $self next $ns
  355.     $self instvar node_ rtm_
  356.     set rtm_(r1:r2) [$ns rtmodel Exponential {} $node_(r1) $node_(r2)]
  357.     set dynamicsTrace [open dyn.tr "w"]
  358.     [$ns link $node_(r1) $node_(r2)] trace-dynamics $ns $dynamicsTrace
  359.     [$ns link $node_(r2) $node_(r1)] trace-dynamics $ns $dynamicsTrace
  360.     $self checkConfig $class $ns
  361. }
  362. Class Topology/net2-Session -superclass Topology/net2
  363. Topology/net2-Session instproc init ns {
  364.     $self next $ns ;# instantiate entire topology
  365.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms DropTail 
  366.     {queue-limit 25}
  367.     $self instvar node_ rtm_
  368.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  369.     $ns rtproto Session
  370.     $self checkConfig $class $ns
  371. }
  372. Class Topology/net2-DV -superclass Topology/net2
  373. Topology/net2-DV instproc init ns {
  374.     $self next $ns ;# instantiate entire topology
  375.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms DropTail 
  376.     {queue-limit 25}
  377.     $self instvar node_ rtm_
  378.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  379.     $ns rtproto DV
  380.     $self checkConfig $class $ns
  381. }
  382. Class Topology/net2-DVm0 -superclass Topology/net2
  383. Topology/net2-DVm0 instproc init ns {
  384.     Node set multiPath_ 1
  385.     $self next $ns ;# instantiate entire topology
  386.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms DropTail 
  387.     {queue-limit 25} {cost 2 r1 r2}
  388.     $ns rtproto DV
  389.     $self checkConfig $class $ns
  390. }
  391. Class Topology/net2-DVm1 -superclass Topology/net2
  392. Topology/net2-DVm1 instproc init ns {
  393.     Node set multiPath_ 1
  394.     $self next $ns ;# instantiate entire topology
  395.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms DropTail 
  396.     {queue-limit 25} {cost 2 r1 r2}
  397.     $self instvar node_ rtm_
  398.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  399.     $ns rtproto DV
  400.     $self checkConfig $class $ns
  401. }
  402. Class Topology/net2RED-Session -superclass Topology/net2
  403. Topology/net2RED-Session instproc init ns {
  404.     $self next $ns ;# instantiate entire topology
  405.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms RED 
  406.     {queue-limit 25}
  407.     $self instvar node_ rtm_
  408.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  409.     $ns rtproto Session
  410.     $self checkConfig $class $ns
  411. }
  412. Class Topology/net2RED-DV -superclass Topology/net2
  413. Topology/net2RED-DV instproc init ns {
  414.     $self next $ns ;# instantiate entire topology
  415.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms RED 
  416.     {queue-limit 25}
  417.     $self instvar node_ rtm_
  418.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  419.     $ns rtproto DV
  420.     $self checkConfig $class $ns
  421. }
  422. Class Topology/net2RED-DVm0 -superclass Topology/net2
  423. Topology/net2RED-DVm0 instproc init ns {
  424.     Node set multiPath_ 1
  425.     $self next $ns ;# instantiate entire topology
  426.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms RED 
  427.     {queue-limit 25} {cost 2 r1 r2}
  428.     $ns rtproto DV
  429.     $self checkConfig $class $ns
  430. }
  431. Class Topology/net2RED-DVm1 -superclass Topology/net2
  432. Topology/net2RED-DVm1 instproc init ns {
  433.     Node set multiPath_ 1
  434.     $self next $ns ;# instantiate entire topology
  435.     $self add-fallback-links $ns {r1 b1 r2} 1.5Mb 10ms RED 
  436.     {queue-limit 25} {cost 2 r1 r2}
  437.     $self instvar node_ rtm_
  438.     set rtm_(r1:r2) [$ns rtmodel Trace "dyn.tr" $node_(r1) $node_(r2)]
  439.     $ns rtproto DV
  440.     $self checkConfig $class $ns
  441. }
  442. #
  443. Class NodeTopology/8nodes -superclass SkelTopology
  444. #
  445. # Create a simple eight node topology:
  446. #
  447. #        s1                 s3
  448. #               4  x       /
  449. # 10Mb,2ms   1.5Mb,20ms   / 10Mb,4ms
  450. #           r1 -.--.--.- r4
  451. # 10Mb,3ms /                10Mb,5ms
  452. #         /                 
  453. #        s2                 s4 
  454. #
  455. # This topology is of interest when the 4 node spine is dynamic,
  456. # and 3 alternate nodes provide fallback paths.
  457. #
  458. NodeTopology/8nodes instproc init ns {
  459.     $self next
  460.     
  461.     $self instvar node_
  462.     set node_(s1) [$ns node]
  463.     set node_(s2) [$ns node]
  464.     set node_(s3) [$ns node]
  465.     set node_(s4) [$ns node]
  466.     
  467.     set node_(r1) [$ns node]
  468.     set node_(r2) [$ns node]
  469.     set node_(r3) [$ns node]
  470.     set node_(r4) [$ns node]
  471. }
  472. Class Topology/net3 -superclass NodeTopology/8nodes
  473. Topology/net3 instproc init ns {
  474.     $self next $ns
  475.     
  476.     $self instvar node_
  477.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail 
  478.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail 
  479.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED 
  480.     $ns queue-limit $node_(r1) $node_(r2) 25
  481.     $ns queue-limit $node_(r2) $node_(r1) 25
  482.     $ns duplex-link $node_(r2) $node_(r3) 1.5Mb 20ms DropTail 
  483.     $ns duplex-link $node_(r3) $node_(r4) 1.5Mb 20ms DropTail 
  484.     $ns duplex-link $node_(s3) $node_(r4) 10Mb 4ms DropTail 
  485.     $ns duplex-link $node_(s4) $node_(r4) 10Mb 5ms DropTail 
  486.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  487.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  488.     $ns duplex-link-op $node_(r1) $node_(r2) orient right
  489.     $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0
  490.     $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0
  491.     $ns duplex-link-op $node_(r2) $node_(r3) orient right
  492.     $ns duplex-link-op $node_(r3) $node_(r4) orient right
  493.     $ns duplex-link-op $node_(s3) $node_(r4) orient left-down
  494.     $ns duplex-link-op $node_(s4) $node_(r4) orient left-up
  495.     $self checkConfig $class $ns
  496. }
  497. Class Topology/net3- -superclass Topology/net3
  498. Topology/net3- instproc init ns {
  499.     $self next $ns
  500.     $self instvar node_ rtm_
  501.     set dynamicsTrace [open dyn.tr "w"]
  502.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  503. set x1 [lindex $i 0]
  504. set x2 [lindex $i 2]
  505. set rtm_($x1:$x2) [$ns rtmodel Exponential {5.0 1.0} $node_($x1) $node_($x2)]
  506. [$ns link $node_($x1) $node_($x2)] trace-dynamics $ns $dynamicsTrace
  507. [$ns link $node_($x2) $node_($x1)] trace-dynamics $ns $dynamicsTrace
  508.     }
  509.     $self checkConfig $class $ns
  510. }
  511. Class Topology/net3-Session -superclass Topology/net3
  512. Topology/net3-Session instproc init ns {
  513.     $self next $ns ;# instantiate entire topology
  514.     $self instvar node_ rtm_
  515.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  516. set x1 [lindex $i 0]
  517. set x2 [lindex $i 2]
  518. set b1 [lindex $i 1]
  519. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms DropTail 
  520. {queue-limit 25}
  521. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  522.     }
  523.     $ns rtproto Session
  524.     $self checkConfig $class $ns
  525. }
  526. Class Topology/net3-DV -superclass Topology/net3
  527. Topology/net3-DV instproc init ns {
  528.     $self next $ns ;# instantiate entire topology
  529.     $self instvar node_ rtm_
  530.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  531. set x1 [lindex $i 0]
  532. set x2 [lindex $i 2]
  533. set b1 [lindex $i 1]
  534. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms DropTail 
  535. {queue-limit 25}
  536. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  537.     }
  538.     $ns rtproto DV
  539.     $self checkConfig $class $ns
  540. }
  541. Class Topology/net3-DVm0 -superclass Topology/net3
  542. Topology/net3-DVm0 instproc init ns {
  543.     Node set multiPath_ 1
  544.     $self next $ns ;# instantiate entire topology
  545.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  546. set x1 [lindex $i 0]
  547. set x2 [lindex $i 2]
  548. set b1 [lindex $i 1]
  549. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms DropTail 
  550. {queue-limit 25} [list cost 2 $x1 $x2]
  551.     }
  552.     $ns rtproto DV
  553.     $self checkConfig $class $ns
  554. }
  555. Class Topology/net3-DVm1 -superclass Topology/net3
  556. Topology/net3-DVm1 instproc init ns {
  557.     Node set multiPath_ 1
  558.     $self next $ns ;# instantiate entire topology
  559.     $self instvar node_ rtm_
  560.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  561. set x1 [lindex $i 0]
  562. set x2 [lindex $i 2]
  563. set b1 [lindex $i 1]
  564. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms DropTail 
  565. {queue-limit 25} [list cost 2 $x1 $x2]
  566. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  567.     }
  568.     $ns rtproto DV
  569.     $self checkConfig $class $ns
  570. }
  571. Class Topology/net3RED-Session -superclass Topology/net3
  572. Topology/net3RED-Session instproc init ns {
  573.     $self next $ns ;# instantiate entire topology
  574.     $self instvar node_ rtm_
  575.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  576. set x1 [lindex $i 0]
  577. set x2 [lindex $i 2]
  578. set b1 [lindex $i 1]
  579. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms RED 
  580. {queue-limit 25}
  581. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  582.     }
  583.     $ns rtproto Session
  584.     $self checkConfig $class $ns
  585. }
  586. Class Topology/net3RED-DV -superclass Topology/net3
  587. Topology/net3RED-DV instproc init ns {
  588.     $self next $ns ;# instantiate entire topology
  589.     $self instvar node_ rtm_
  590.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  591. set x1 [lindex $i 0]
  592. set x2 [lindex $i 2]
  593. set b1 [lindex $i 1]
  594. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms RED 
  595. {queue-limit 25}
  596. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  597.     }
  598.     $ns rtproto DV
  599.     $self checkConfig $class $ns
  600. }
  601. Class Topology/net3RED-DVm0 -superclass Topology/net3
  602. Topology/net3RED-DVm0 instproc init ns {
  603.     Node set multiPath_ 1
  604.     $self next $ns ;# instantiate entire topology
  605.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  606. set x1 [lindex $i 0]
  607. set x2 [lindex $i 2]
  608. set b1 [lindex $i 1]
  609. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms RED 
  610. {queue-limit 25} [list cost 2 $x1 $x2]
  611.     }
  612.     $ns rtproto DV
  613.     $self checkConfig $class $ns
  614. }
  615. Class Topology/net3RED-DVm1 -superclass Topology/net3
  616. Topology/net3RED-DVm1 instproc init ns {
  617.     Node set multiPath_ 1
  618.     $self next $ns ;# instantiate entire topology
  619.     $self instvar node_ rtm_
  620.     foreach i [list {r1 b1 r2} {r2 b2 r3} {r3 b3 r4}] {
  621. set x1 [lindex $i 0]
  622. set x2 [lindex $i 2]
  623. set b1 [lindex $i 1]
  624. $self add-fallback-links $ns [list $x1 $b1 $x2] 1.5Mb 10ms RED 
  625. {queue-limit 25} [list cost 2 $x1 $x2]
  626. set rtm_($x1:$x2) [$ns rtmodel Trace "dyn.tr" $node_($x1) $node_($x2)]
  627.     }
  628.     $ns rtproto DV
  629.     $self checkConfig $class $ns
  630. }