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

通讯编程

开发平台:

Visual C++

  1. # Copyright (c) 2000 by the University of Southern California
  2. # All rights reserved.
  3. #
  4. #  This program is free software; you can redistribute it and/or
  5. #  modify it under the terms of the GNU General Public License,
  6. #  version 2, as published by the Free Software Foundation.
  7. #
  8. #  This program is distributed in the hope that it will be useful,
  9. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. #  GNU General Public License for more details.
  12. #
  13. #  You should have received a copy of the GNU General Public License along
  14. #  with this program; if not, write to the Free Software Foundation, Inc.,
  15. #  59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  16. #
  17. #  The copyright of this module includes the following
  18. #  linking-with-specific-other-licenses addition:
  19. #
  20. #  In addition, as a special exception, the copyright holders of
  21. #  this module give you permission to combine (via static or
  22. #  dynamic linking) this module with free software programs or
  23. #  libraries that are released under the GNU LGPL and with code
  24. #  included in the standard release of ns-2 under the Apache 2.0
  25. #  license or under otherwise-compatible licenses with advertising
  26. #  requirements (or modified versions of such code, with unchanged
  27. #  license).  You may copy and distribute such a system following the
  28. #  terms of the GNU GPL for this module and the licenses of the
  29. #  other code concerned, provided that you include the source code of
  30. #  that other code when and as the GNU GPL requires distribution of
  31. #  source code.
  32. #
  33. #  Note that people who make modified versions of this module
  34. #  are not obligated to grant this special exception for their
  35. #  modified versions; it is their choice whether to do so.  The GNU
  36. #  General Public License gives permission to release a modified
  37. #  version without this exception; this exception also makes it
  38. #  possible to release a modified version which carries forward this
  39. #  exception.
  40. # To view a list of available tests to run with this script:
  41. # ns test-suite-smac.tcl
  42. #remove-all-packet-headers       ; # removes all except common
  43. #add-packet-header Flags IP TCP Diffusion ARP LL Mac  
  44. # hdrs reqd for validation test
  45. # FOR UPDATING GLOBAL DEFAULTS:
  46. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  47. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  48. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  49. Agent/TCP set minrto_ 1
  50. # default changed on 10/14/2004.
  51. Class TestSuite
  52. Class Test/brdcast1 -superclass TestSuite
  53. # 2 nodes brdcast ping req/replies to one another
  54. Class Test/brdcast1_sync -superclass TestSuite
  55. Class Test/brdcast2 -superclass TestSuite
  56. # 3 node topology brdcasting ping req/rep that result in collision
  57. Class Test/brdcast2_sync -superclass TestSuite
  58. Class Test/unicast1 -superclass TestSuite
  59. # 2 node topology unicasting with RTS/CTS/DATA/ACK exchange
  60. Class Test/unicast1_sync -superclass TestSuite
  61. Class Test/unicast2 -superclass TestSuite
  62. # 3 node topology where node 0 & 1 unicast and node 2 brdcast.
  63. Class Test/unicast2_sync -superclass TestSuite
  64. Class Test/unicast3 -superclass TestSuite
  65. #3 node topolofy where node 2 is neighbor to the sender node. can hear RTS/DATA, not CTS
  66. Class Test/unicast3_sync -superclass TestSuite
  67. Class Test/unicast4 -superclass TestSuite
  68. #3 node topology where node 2 is neighbor to the recvr node. can hear CTS only.
  69. Class Test/unicast4_sync -superclass TestSuite
  70. Class Test/unicast5 -superclass TestSuite
  71. # 4 node topology. 2 sender-recvr pairs (0->1 & 3->2)
  72. #3 cannot hear 0 & 1. 2 can hear only sender 0.
  73.  
  74. Class Test/unicast5_sync -superclass TestSuite
  75. Class Test/unicast6 -superclass TestSuite
  76. # 4 node topology. 2 sender-recvr pairs (0->1 & 3->2)
  77. #3 cannot hear 0 & 1. 2 can hear only recvr 1.
  78. Class Test/unicast6_sync -superclass TestSuite
  79. Class Test/unicast7 -superclass TestSuite
  80. # 4 node topology. 2 sender-recvr pairs (0->1 & 2->3)
  81. #3 cannot hear 0 & 1. 2 can hear only sender 0.
  82.  
  83. Class Test/unicast7_sync -superclass TestSuite
  84. Class Test/unicast8 -superclass TestSuite
  85. # 4 node topology. 2 sender-recvr pairs (0->1 & 2->3)
  86. #3 cannot hear 0. 2 can hear only recvr 1.
  87. Class Test/unicast8_sync -superclass TestSuite
  88. Class Test/unicast9 -superclass TestSuite
  89. # 4 node topology. 2 sender-recvr pairs (0->1 & 2->3)
  90. #2 & 3 can hear 0 & 1 but cannot recv pkts correctly. a lot of delay
  91. Class Test/unicast9_sync -superclass TestSuite
  92. Class Test/unicast10 -superclass TestSuite
  93. # 4 node topology. 2 sender-recvr pairs (0->1 & 2->3)
  94. #2 & 3 cannot hear and recv from 0 & 1. can send simultaneously.
  95. Class Test/unicast10_sync -superclass TestSuite
  96. Class Test/unicast11 -superclass TestSuite
  97. # 3 node triangle topology.1->2,2->3,3->1.
  98. Class Test/unicast11_sync -superclass TestSuite
  99. Class Test/unicast12 -superclass TestSuite
  100. # 3 node triangle topology.1->2,2->3,3->1.with error model on every incoming interface
  101. # that randomly drops pkts
  102. Class Test/unicast12_sync -superclass TestSuite
  103. proc usage {} {
  104.     global argv0
  105.     puts stderr "usage: ns $argv0 <tests>"
  106.     puts "Valid tests: brdcast1"
  107. }
  108. proc default_options {} {
  109.     global opt
  110.     set opt(chan)           Channel/WirelessChannel    ;# channel type
  111.     set opt(prop)           Propagation/TwoRayGround   ;# radio-propagation model
  112.     set opt(netif)          Phy/WirelessPhy            ;# network interface type
  113.     set opt(mac)            Mac/SMAC                   ;# MAC type
  114.     #set opt(mac)            Mac/802_11                 ;# MAC type
  115.     set opt(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
  116.     set opt(ll)             LL                         ;# link layer type
  117.     set opt(ant)            Antenna/OmniAntenna        ;# antenna model
  118.     set opt(ifqlen)         50                         ;# max packet in ifq
  119.     set opt(x)              800
  120.     set opt(y)              800
  121.     set opt(rp)             DumbAgent               ;# routing protocol
  122.     set opt(tr)             temp.rands
  123.     set opt(stop)           5.0
  124.     set opt(stop-sync)      100.0        ;# extended run time for sync simulations
  125.     set opt(seed)           1
  126. }
  127. TestSuite instproc init {} {
  128.     global opt node_
  129.     $self instvar ns_ topo_ tracefd_ testname_
  130.     set name [split $testname_ _]
  131.     puts "$name"
  132.     if { [lindex $name 1] == "sync" } {
  133. Mac/SMAC set syncFlag_ 1
  134.     }
  135.     set ns_         [new Simulator]
  136.     
  137.     puts "Seeding Random number generator with $opt(seed)n"
  138.     ns-random $opt(seed)
  139.     
  140.     set tracefd_ [open $opt(tr) w]
  141.     $ns_ trace-all $tracefd_
  142.     
  143.     set topo_     [new Topography]
  144.     $topo_ load_flatgrid $opt(x) $opt(y)
  145.     
  146.     create-god $opt(nn)
  147.     $ns_ node-config -adhocRouting $opt(rp) 
  148.                          -macType $opt(mac) 
  149.                          -llType $opt(ll) 
  150.  -ifqType $opt(ifq) 
  151.  -ifqLen $opt(ifqlen) 
  152.  -antType $opt(ant) 
  153.  -propType $opt(prop) 
  154.  -phyType $opt(netif) 
  155.  -channelType $opt(chan) 
  156.  -topoInstance $topo_ 
  157.  -agentTrace ON 
  158.  -routerTrace ON 
  159.  -macTrace ON
  160.     if {$testname_ == "unicast12" } {
  161. $ns_ node-config --IncomingErrProc $opt(err)
  162.     }
  163.     
  164. #    if { [lindex $name 1] == "sync" } {
  165. #$ns_ node-config -macTrace OFF
  166. #    }
  167.       
  168.     for {set i 0} {$i < $opt(nn) } {incr i} {
  169. set node_($i) [$ns_ node]
  170. $node_($i) random-motion 0 ;# disable random motion
  171.     }
  172. }
  173. TestSuite instproc run {} {
  174.     global opt node_
  175.     $self instvar ns_ testname_
  176.     set n [split $testname_ _]
  177.     if { [lindex $n 1] == "sync" } {
  178. set opt(stop) $opt(stop-sync)
  179.     }
  180.     puts "$opt(stop)"  
  181.     #
  182.     # Tell nodes when the simulation ends
  183.     #
  184.     for {set i 0} {$i < $opt(nn) } {incr i} {
  185. $ns_ at $opt(stop) "$node_($i) reset";
  186.     }
  187.     
  188.     $ns_ at $opt(stop) "$self finish"
  189.     $ns_ at $opt(stop) "puts "NS EXITING..." ; $ns_ halt"
  190.     puts "Starting Simulation..."
  191.     $ns_  run
  192. }
  193. Test/brdcast1 instproc init {} {
  194.     global opt node_
  195.     $self instvar ns_ testname_
  196.     
  197.     set testname_ brdcast1
  198.     set opt(nn) 2
  199.     $self next
  200.     
  201.     
  202.     $node_(0) set X_ 5.0
  203.     $node_(0) set Y_ 2.0
  204.     $node_(0) set Z_ 0.0
  205.     
  206.     $node_(1) set X_ 50.0
  207.     $node_(1) set Y_ 45.0
  208.     $node_(1) set Z_ 0.0
  209.     
  210.     # all scheduled to brdcast at same time
  211.     
  212.     set ping0 [new Agent/Ping]
  213.     $ns_ attach-agent $node_(0) $ping0
  214.     $ns_ at 1.0 "$ping0 start-WL-brdcast"
  215.     
  216.     set ping1 [new Agent/Ping]
  217.     $ns_ attach-agent $node_(1) $ping1
  218.     $ns_ at 1.0 "$ping1 start-WL-brdcast"
  219.     
  220. }
  221. Test/brdcast1 instproc run {} {
  222.     $self instvar ns_
  223.     $self next
  224. }
  225.     
  226. Test/brdcast1_sync instproc init {} {
  227.     global opt node_
  228.     $self instvar testname_ ns_
  229.     
  230.     set testname_ brdcast1_sync
  231.     set opt(nn) 2
  232.     $self next
  233.     
  234.     $node_(0) set X_ 5.0
  235.     $node_(0) set Y_ 2.0
  236.     $node_(0) set Z_ 0.0
  237.     
  238.     
  239.     $node_(1) set X_ 50.0
  240.     $node_(1) set Y_ 45.0
  241.     $node_(1) set Z_ 0.0
  242.     set ping0 [new Agent/Ping]
  243.     $ns_ attach-agent $node_(0) $ping0
  244.     $ns_ at 40.0 "$ping0 start-WL-brdcast"
  245.     
  246.     set ping1 [new Agent/Ping]
  247.     $ns_ attach-agent $node_(1) $ping1
  248.     $ns_ at 40.0 "$ping1 start-WL-brdcast"
  249. }
  250. Test/brdcast1_sync instproc run {} {
  251.     $self instvar ns_
  252.     $self next
  253. }
  254. Test/brdcast2 instproc init {} {
  255.     global opt node_
  256.     $self instvar ns_ net_ testname_ topo_ tracefd_
  257.     
  258.     set testname_ brdcast2
  259.     set opt(nn)  3
  260.     $self next
  261.     
  262.     $node_(0) set X_ 5.0
  263.     $node_(0) set Y_ 2.0
  264.     $node_(0) set Z_ 0.0
  265.     
  266.     $node_(1) set X_ 50.0
  267.     $node_(1) set Y_ 45.0
  268.     $node_(1) set Z_ 0.0
  269.     
  270.     $node_(2) set X_ 150.0
  271.     $node_(2) set Y_ 150.0
  272.     $node_(2) set Z_ 0.0
  273.     
  274.     # all scheduled to brdcast at same time
  275.     
  276.     set ping0 [new Agent/Ping]
  277.     $ns_ attach-agent $node_(0) $ping0
  278.     $ns_ at 1.0 "$ping0 start-WL-brdcast"
  279.     
  280.     set ping1 [new Agent/Ping]
  281.     $ns_ attach-agent $node_(1) $ping1
  282.     $ns_ at 1.0 "$ping1 start-WL-brdcast"
  283.     set ping2 [new Agent/Ping]
  284.     $ns_ attach-agent $node_(2) $ping2
  285.     $ns_ at 1.0 "$ping2 start-WL-brdcast"
  286. }
  287. Test/brdcast2 instproc run {} {
  288.     $self instvar ns_
  289.     $self next
  290. }
  291. Test/brdcast2_sync instproc init {} {
  292.     global opt node_
  293.     $self instvar ns_ testname_
  294.     
  295.     set testname_ brdcast2_sync
  296.     set opt(nn)  3
  297.     $self next
  298.     
  299.     $node_(0) set X_ 5.0
  300.     $node_(0) set Y_ 2.0
  301.     $node_(0) set Z_ 0.0
  302.     
  303.     $node_(1) set X_ 50.0
  304.     $node_(1) set Y_ 45.0
  305.     $node_(1) set Z_ 0.0
  306.     
  307.     $node_(2) set X_ 150.0
  308.     $node_(2) set Y_ 150.0
  309.     $node_(2) set Z_ 0.0
  310.     
  311.     # all scheduled to brdcast at same time
  312.     
  313.     set ping0 [new Agent/Ping]
  314.     $ns_ attach-agent $node_(0) $ping0
  315.     $ns_ at 40.0 "$ping0 start-WL-brdcast"
  316.     
  317.     set ping1 [new Agent/Ping]
  318.     $ns_ attach-agent $node_(1) $ping1
  319.     $ns_ at 41.0 "$ping1 start-WL-brdcast"
  320.     set ping2 [new Agent/Ping]
  321.     $ns_ attach-agent $node_(2) $ping2
  322.     $ns_ at 42.0 "$ping2 start-WL-brdcast"
  323. }
  324. Test/brdcast2_sync instproc run {} {
  325.     $self instvar ns_
  326.     $self next
  327. }
  328. Test/unicast1 instproc init {} {
  329.     global opt node_
  330.     $self instvar ns_ net_ testname_ topo_ tracefd_
  331.     
  332.     set testname_ unicast1
  333.     set opt(nn) 2
  334.     $self next
  335.     $node_(0) set X_ 5.0
  336.     $node_(0) set Y_ 2.0
  337.     $node_(0) set Z_ 0.0
  338.     
  339.     $node_(1) set X_ 50.0
  340.     $node_(1) set Y_ 45.0
  341.     $node_(1) set Z_ 0.0
  342.     set ping0 [new Agent/Ping]
  343.     $ns_ attach-agent $node_(0) $ping0
  344.     
  345.     set ping1 [new Agent/Ping]
  346.     $ns_ attach-agent $node_(1) $ping1
  347.     
  348.     # connect two agents
  349.     $ns_ connect $ping0 $ping1
  350.     $ns_ at 1.0 "$ping0 send"
  351. }
  352. Test/unicast1 instproc run {} {
  353.     $self instvar ns_
  354.     $self next
  355. }
  356. Test/unicast1_sync instproc init {} {
  357.     global opt node_
  358.     $self instvar ns_ net_ testname_ topo_ tracefd_
  359.     
  360.     set testname_ unicast1_sync
  361.     set opt(nn) 2
  362.     $self next
  363.     $node_(0) set X_ 5.0
  364.     $node_(0) set Y_ 2.0
  365.     $node_(0) set Z_ 0.0
  366.     
  367.     $node_(1) set X_ 50.0
  368.     $node_(1) set Y_ 45.0
  369.     $node_(1) set Z_ 0.0
  370.     set ping0 [new Agent/Ping]
  371.     $ns_ attach-agent $node_(0) $ping0
  372.     
  373.     set ping1 [new Agent/Ping]
  374.     $ns_ attach-agent $node_(1) $ping1
  375.     
  376.     # connect two agents
  377.     $ns_ connect $ping0 $ping1
  378.     $ns_ at 40.0 "$ping0 send"
  379. }
  380. Test/unicast1_sync instproc run {} {
  381.     $self instvar ns_
  382.     $self next
  383. }
  384. Test/unicast2 instproc init {} {
  385.     global opt node_
  386.     $self instvar ns_ net_ testname_ topo_ tracefd_
  387.     
  388.     set testname_ unicast2
  389.     set opt(nn) 3
  390.     $self next
  391.     $node_(0) set X_ 300.0
  392.     $node_(0) set Y_ 350.0
  393.     $node_(0) set Z_ 0.0
  394.     
  395.     $node_(1) set X_ 450.0
  396.     $node_(1) set Y_ 350.0
  397.     $node_(1) set Z_ 0.0
  398.     
  399.     # 2 can hear and recv from nodes 0 & 1 (sender and recvr)
  400.     $node_(2) set X_ 400.0
  401.     $node_(2) set Y_ 125.0
  402.     $node_(2) set Z_ 0.0
  403.     
  404.     set ping0 [new Agent/Ping]
  405.     $ns_ attach-agent $node_(0) $ping0
  406.     
  407.     set ping1 [new Agent/Ping]
  408.     $ns_ attach-agent $node_(1) $ping1
  409.     # connect two agents
  410.     $ns_ connect $ping0 $ping1
  411.     
  412.     set ping2 [new Agent/Ping]
  413.     $ns_ attach-agent $node_(2) $ping2
  414.     
  415.     # start times for connections
  416.     $ns_ at 0.1 "$ping0 send"
  417.     # ping2 sends brdcast overlapping with ping0
  418.     $ns_ at 0.2 "$ping2 start-WL-brdcast"
  419. }
  420. Test/unicast2 instproc run {} {
  421.     $self instvar ns_
  422.     $self next
  423. }
  424. Test/unicast2_sync instproc init {} {
  425.     global opt node_
  426.     $self instvar ns_ net_ testname_ topo_ tracefd_
  427.     
  428.     set testname_ unicast2_sync
  429.     set opt(nn) 3
  430.     $self next
  431.     $node_(0) set X_ 300.0
  432.     $node_(0) set Y_ 350.0
  433.     $node_(0) set Z_ 0.0
  434.     
  435.     $node_(1) set X_ 450.0
  436.     $node_(1) set Y_ 350.0
  437.     $node_(1) set Z_ 0.0
  438.     
  439.     # 2 can hear and recv from nodes 0 & 1 (sender and recvr)
  440.     $node_(2) set X_ 400.0
  441.     $node_(2) set Y_ 125.0
  442.     $node_(2) set Z_ 0.0
  443.     
  444.     set ping0 [new Agent/Ping]
  445.     $ns_ attach-agent $node_(0) $ping0
  446.     
  447.     set ping1 [new Agent/Ping]
  448.     $ns_ attach-agent $node_(1) $ping1
  449.     # connect two agents
  450.     $ns_ connect $ping0 $ping1
  451.     
  452.     set ping2 [new Agent/Ping]
  453.     $ns_ attach-agent $node_(2) $ping2
  454.     
  455.     # start times for connections
  456.     $ns_ at 40.1 "$ping0 send"
  457.     # ping2 sends brdcast overlapping with ping0
  458.     $ns_ at 40.2 "$ping2 start-WL-brdcast"
  459. }
  460. Test/unicast2_sync instproc run {} {
  461.     $self instvar ns_
  462.     $self next
  463. }
  464. Test/unicast3 instproc init {} {
  465.     global opt node_
  466.     $self instvar ns_ net_ testname_ topo_ tracefd_
  467.     
  468.     set testname_ unicast3
  469.     set opt(nn) 3
  470.     $self next
  471.     
  472.     $node_(0) set X_ 300.0
  473.     $node_(0) set Y_ 300.0
  474.     $node_(0) set Z_ 0.0
  475.     
  476.     $node_(1) set X_ 150.0
  477.     $node_(1) set Y_ 150.0
  478.     $node_(1) set Z_ 0.0
  479.     
  480.     $node_(2) set X_ 470.0
  481.     $node_(2) set Y_ 470.0
  482.     $node_(2) set Z_ 0.0
  483.     set ping0 [new Agent/Ping]
  484.     $ns_ attach-agent $node_(0) $ping0
  485.     set ping1 [new Agent/Ping]
  486.     $ns_ attach-agent $node_(1) $ping1
  487.     set ping2 [new Agent/Ping]
  488.     $ns_ attach-agent $node_(2) $ping2
  489.     # connect two agents
  490.     $ns_ connect $ping0 $ping1
  491.     # start times for connections
  492.     $ns_ at 0.1 "$ping0 send"
  493.     $ns_ at 0.2 "$ping2 start-WL-brdcast"
  494.     
  495. }
  496. Test/unicast3 instproc run {} {
  497.     $self instvar ns_
  498.     $self next
  499. }
  500. Test/unicast3_sync instproc init {} {
  501.     global opt node_
  502.     $self instvar ns_ net_ testname_ topo_ tracefd_
  503.     
  504.     set testname_ unicast3_sync
  505.     set opt(nn) 3
  506.     $self next
  507.     
  508.     $node_(0) set X_ 300.0
  509.     $node_(0) set Y_ 300.0
  510.     $node_(0) set Z_ 0.0
  511.     
  512.     $node_(1) set X_ 150.0
  513.     $node_(1) set Y_ 150.0
  514.     $node_(1) set Z_ 0.0
  515.     
  516.     $node_(2) set X_ 470.0
  517.     $node_(2) set Y_ 470.0
  518.     $node_(2) set Z_ 0.0
  519.     set ping0 [new Agent/Ping]
  520.     $ns_ attach-agent $node_(0) $ping0
  521.     set ping1 [new Agent/Ping]
  522.     $ns_ attach-agent $node_(1) $ping1
  523.     set ping2 [new Agent/Ping]
  524.     $ns_ attach-agent $node_(2) $ping2
  525.     # connect two agents
  526.     $ns_ connect $ping0 $ping1
  527.     # start times for connections
  528.     $ns_ at 40.1 "$ping0 send"
  529.     $ns_ at 45.2 "$ping2 start-WL-brdcast"
  530.     
  531. }
  532. Test/unicast3_sync instproc run {} {
  533.     $self instvar ns_
  534.     $self next
  535. }
  536. Test/unicast4 instproc init {} {
  537.     global opt node_
  538.     $self instvar ns_ net_ testname_ topo_ tracefd_
  539.     
  540.     set testname_ unicast4
  541.     set opt(nn) 3
  542.     $self next
  543.     
  544.     # can hear recvr, CTS only.
  545.     $node_(1) set X_ 300.0
  546.     $node_(1) set Y_ 300.0
  547.     $node_(1) set Z_ 0.0
  548.     
  549.     $node_(0) set X_ 150.0
  550.     $node_(0) set Y_ 150.0
  551.     $node_(0) set Z_ 0.0
  552.     
  553.     $node_(2) set X_ 470.0
  554.     $node_(2) set Y_ 470.0
  555.     $node_(2) set Z_ 0.0
  556.     set ping0 [new Agent/Ping]
  557.     $ns_ attach-agent $node_(0) $ping0
  558.     set ping1 [new Agent/Ping]
  559.     $ns_ attach-agent $node_(1) $ping1
  560.     set ping2 [new Agent/Ping]
  561.     $ns_ attach-agent $node_(2) $ping2
  562.     # connect two agents
  563.     $ns_ connect $ping0 $ping1
  564.     # start times for connections
  565.     $ns_ at 0.1 "$ping0 send"
  566.     $ns_ at 0.2 "$ping2 start-WL-brdcast"
  567.     
  568. }
  569. Test/unicast4 instproc run {} {
  570.     $self instvar ns_
  571.     $self next
  572. }
  573. Test/unicast4_sync instproc init {} {
  574.     global opt node_
  575.     $self instvar ns_ net_ testname_ topo_ tracefd_
  576.     
  577.     set testname_ unicast4_sync
  578.     set opt(nn) 3
  579.     $self next
  580.     
  581.     # can hear recvr, CTS only.
  582.     $node_(1) set X_ 300.0
  583.     $node_(1) set Y_ 300.0
  584.     $node_(1) set Z_ 0.0
  585.     
  586.     $node_(0) set X_ 150.0
  587.     $node_(0) set Y_ 150.0
  588.     $node_(0) set Z_ 0.0
  589.     
  590.     $node_(2) set X_ 470.0
  591.     $node_(2) set Y_ 470.0
  592.     $node_(2) set Z_ 0.0
  593.     set ping0 [new Agent/Ping]
  594.     $ns_ attach-agent $node_(0) $ping0
  595.     set ping1 [new Agent/Ping]
  596.     $ns_ attach-agent $node_(1) $ping1
  597.     set ping2 [new Agent/Ping]
  598.     $ns_ attach-agent $node_(2) $ping2
  599.     # connect two agents
  600.     $ns_ connect $ping0 $ping1
  601.     # start times for connections
  602.     $ns_ at 40.1 "$ping0 send"
  603.     $ns_ at 40.2 "$ping2 start-WL-brdcast"
  604.     
  605. }
  606. Test/unicast4_sync instproc run {} {
  607.     $self instvar ns_
  608.     $self next
  609. }
  610. Test/unicast5 instproc init {} {
  611.     global opt node_
  612.     $self instvar ns_ net_ testname_ topo_ tracefd_
  613.     
  614.     set testname_ unicast5
  615.     set opt(nn) 4
  616.     $self next
  617.     $node_(0) set X_ 300.0
  618.     $node_(0) set Y_ 300.0
  619.     $node_(0) set Z_ 0.0
  620.     
  621.     $node_(1) set X_ 150.0
  622.     $node_(1) set Y_ 150.0
  623.     $node_(1) set Z_ 0.0
  624.     
  625.     # node 2 can hear 0 & 3
  626.     $node_(2) set X_ 450.0
  627.     $node_(2) set Y_ 450.0
  628.     $node_(2) set Z_ 0.0
  629.     # node 3 hears only 2
  630.     $node_(3) set X_ 600.0
  631.     $node_(3) set Y_ 600.0
  632.     $node_(3) set Z_ 0.0
  633.     set ping0 [new Agent/Ping]
  634.     $ns_ attach-agent $node_(0) $ping0
  635.     set ping1 [new Agent/Ping]
  636.     $ns_ attach-agent $node_(1) $ping1
  637.     # connect two agents
  638.     $ns_ connect $ping0 $ping1
  639.     
  640.     
  641.     set ping2 [new Agent/Ping]
  642.     $ns_ attach-agent $node_(2) $ping2
  643.     set ping3 [new Agent/Ping]
  644.     $ns_ attach-agent $node_(3) $ping3
  645.     # connect two agents
  646.     $ns_ connect $ping2 $ping3
  647.     
  648.     # start times for both connections
  649.     $ns_ at 0.1 "$ping0 send"
  650.     #sender cannot hear other tx
  651.     $ns_ at 0.1 "$ping3 send"
  652.     
  653. }
  654. Test/unicast5 instproc run {} {
  655.     $self instvar ns_
  656.     $self next
  657. }
  658. Test/unicast5_sync instproc init {} {
  659.     global opt node_
  660.     $self instvar ns_ net_ testname_ topo_ tracefd_
  661.     
  662.     set testname_ unicast5_sync
  663.     set opt(nn) 4
  664.     $self next
  665.     $node_(0) set X_ 300.0
  666.     $node_(0) set Y_ 300.0
  667.     $node_(0) set Z_ 0.0
  668.     
  669.     $node_(1) set X_ 150.0
  670.     $node_(1) set Y_ 150.0
  671.     $node_(1) set Z_ 0.0
  672.     
  673.     # node 2 can hear 0 & 3
  674.     $node_(2) set X_ 450.0
  675.     $node_(2) set Y_ 450.0
  676.     $node_(2) set Z_ 0.0
  677.     # node 3 hears only 2
  678.     $node_(3) set X_ 600.0
  679.     $node_(3) set Y_ 600.0
  680.     $node_(3) set Z_ 0.0
  681.     set ping0 [new Agent/Ping]
  682.     $ns_ attach-agent $node_(0) $ping0
  683.     set ping1 [new Agent/Ping]
  684.     $ns_ attach-agent $node_(1) $ping1
  685.     # connect two agents
  686.     $ns_ connect $ping0 $ping1
  687.     
  688.     
  689.     set ping2 [new Agent/Ping]
  690.     $ns_ attach-agent $node_(2) $ping2
  691.     set ping3 [new Agent/Ping]
  692.     $ns_ attach-agent $node_(3) $ping3
  693.     # connect two agents
  694.     $ns_ connect $ping2 $ping3
  695.     
  696.     # start times for both connections
  697.     $ns_ at 40.1 "$ping0 send"
  698.     #sender cannot hear other tx
  699.     $ns_ at 40.1 "$ping3 send"
  700.     
  701. }
  702. Test/unicast5_sync instproc run {} {
  703.     $self instvar ns_
  704.     $self next
  705. }
  706. Test/unicast6 instproc init {} {
  707.     global opt node_
  708.     $self instvar ns_ net_ testname_ topo_ tracefd_
  709.     
  710.     set testname_ unicast6
  711.     set opt(nn) 4
  712.     $self next
  713.     $node_(1) set X_ 300.0
  714.     $node_(1) set Y_ 300.0
  715.     $node_(1) set Z_ 0.0
  716.     
  717.     $node_(0) set X_ 150.0
  718.     $node_(0) set Y_ 150.0
  719.     $node_(0) set Z_ 0.0
  720.     
  721.     # node 2 can hear 1 & 3
  722.     $node_(2) set X_ 450.0
  723.     $node_(2) set Y_ 450.0
  724.     $node_(2) set Z_ 0.0
  725.     # node 3 hears only 2
  726.     $node_(3) set X_ 600.0
  727.     $node_(3) set Y_ 600.0
  728.     $node_(3) set Z_ 0.0
  729.     set ping0 [new Agent/Ping]
  730.     $ns_ attach-agent $node_(0) $ping0
  731.     set ping1 [new Agent/Ping]
  732.     $ns_ attach-agent $node_(1) $ping1
  733.     # connect two agents
  734.     $ns_ connect $ping0 $ping1
  735.     
  736.     
  737.     set ping2 [new Agent/Ping]
  738.     $ns_ attach-agent $node_(2) $ping2
  739.     set ping3 [new Agent/Ping]
  740.     $ns_ attach-agent $node_(3) $ping3
  741.     # connect two agents
  742.     $ns_ connect $ping2 $ping3
  743.     
  744.     # start times for both connections
  745.     $ns_ at 0.1 "$ping0 send"
  746.     #sender cannot hear other tx
  747.     $ns_ at 0.1 "$ping3 send"
  748.     
  749. }
  750. Test/unicast6 instproc run {} {
  751.     $self instvar ns_
  752.     $self next
  753. }
  754. Test/unicast6_sync instproc init {} {
  755.     global opt node_
  756.     $self instvar ns_ net_ testname_ topo_ tracefd_
  757.     
  758.     set testname_ unicast6_sync
  759.     set opt(nn) 4
  760.     $self next
  761.     $node_(1) set X_ 300.0
  762.     $node_(1) set Y_ 300.0
  763.     $node_(1) set Z_ 0.0
  764.     
  765.     $node_(0) set X_ 150.0
  766.     $node_(0) set Y_ 150.0
  767.     $node_(0) set Z_ 0.0
  768.     
  769.     # node 2 can hear 1 & 3
  770.     $node_(2) set X_ 450.0
  771.     $node_(2) set Y_ 450.0
  772.     $node_(2) set Z_ 0.0
  773.     # node 3 hears only 2
  774.     $node_(3) set X_ 600.0
  775.     $node_(3) set Y_ 600.0
  776.     $node_(3) set Z_ 0.0
  777.     set ping0 [new Agent/Ping]
  778.     $ns_ attach-agent $node_(0) $ping0
  779.     set ping1 [new Agent/Ping]
  780.     $ns_ attach-agent $node_(1) $ping1
  781.     # connect two agents
  782.     $ns_ connect $ping0 $ping1
  783.     
  784.     
  785.     set ping2 [new Agent/Ping]
  786.     $ns_ attach-agent $node_(2) $ping2
  787.     set ping3 [new Agent/Ping]
  788.     $ns_ attach-agent $node_(3) $ping3
  789.     # connect two agents
  790.     $ns_ connect $ping2 $ping3
  791.     
  792.     # start times for both connections
  793.     $ns_ at 40.1 "$ping0 send"
  794.     #sender cannot hear other tx
  795.     # node 2 and 3 have perfectly sync'ed cycles
  796.     # due to collision discovers each other after about 60s.
  797.     $ns_ at 60.1 "$ping3 send"
  798.     
  799. }
  800. Test/unicast6_sync instproc run {} {
  801.     $self next
  802. }
  803. Test/unicast7 instproc init {} {
  804.     global opt node_
  805.     $self instvar ns_ net_ testname_ topo_ tracefd_
  806.     
  807.     set testname_ unicast7
  808.     set opt(nn) 4
  809.     $self next
  810.     $node_(1) set X_ 300.0
  811.     $node_(1) set Y_ 300.0
  812.     $node_(1) set Z_ 0.0
  813.     
  814.     $node_(0) set X_ 150.0
  815.     $node_(0) set Y_ 150.0
  816.     $node_(0) set Z_ 0.0
  817.     
  818.     # node 2 can hear 1 & 3
  819.     $node_(2) set X_ 450.0
  820.     $node_(2) set Y_ 450.0
  821.     $node_(2) set Z_ 0.0
  822.     # node 3 hears only 2
  823.     $node_(3) set X_ 600.0
  824.     $node_(3) set Y_ 600.0
  825.     $node_(3) set Z_ 0.0
  826.     set ping0 [new Agent/Ping]
  827.     $ns_ attach-agent $node_(0) $ping0
  828.     set ping1 [new Agent/Ping]
  829.     $ns_ attach-agent $node_(1) $ping1
  830.     # connect two agents
  831.     $ns_ connect $ping0 $ping1
  832.     
  833.     
  834.     set ping2 [new Agent/Ping]
  835.     $ns_ attach-agent $node_(2) $ping2
  836.     set ping3 [new Agent/Ping]
  837.     $ns_ attach-agent $node_(3) $ping3
  838.     # connect two agents
  839.     $ns_ connect $ping2 $ping3
  840.     
  841.     # start times for both connections
  842.     $ns_ at 0.1 "$ping0 send"
  843.     #sender cannot hear other tx
  844.     $ns_ at 0.1 "$ping2 send"
  845.     
  846. }
  847. Test/unicast7 instproc run {} {
  848.     $self next
  849. }
  850. Test/unicast7_sync instproc init {} {
  851.     global opt node_
  852.     $self instvar ns_ net_ testname_ topo_ tracefd_
  853.     
  854.     set testname_ unicast7_sync
  855.     set opt(nn) 4
  856.     $self next
  857.     $node_(1) set X_ 300.0
  858.     $node_(1) set Y_ 300.0
  859.     $node_(1) set Z_ 0.0
  860.     
  861.     $node_(0) set X_ 150.0
  862.     $node_(0) set Y_ 150.0
  863.     $node_(0) set Z_ 0.0
  864.     
  865.     # node 2 can hear 1 & 3
  866.     $node_(2) set X_ 450.0
  867.     $node_(2) set Y_ 450.0
  868.     $node_(2) set Z_ 0.0
  869.     # node 3 hears only 2
  870.     $node_(3) set X_ 600.0
  871.     $node_(3) set Y_ 600.0
  872.     $node_(3) set Z_ 0.0
  873.     set ping0 [new Agent/Ping]
  874.     $ns_ attach-agent $node_(0) $ping0
  875.     set ping1 [new Agent/Ping]
  876.     $ns_ attach-agent $node_(1) $ping1
  877.     # connect two agents
  878.     $ns_ connect $ping0 $ping1
  879.     
  880.     
  881.     set ping2 [new Agent/Ping]
  882.     $ns_ attach-agent $node_(2) $ping2
  883.     set ping3 [new Agent/Ping]
  884.     $ns_ attach-agent $node_(3) $ping3
  885.     # connect two agents
  886.     $ns_ connect $ping2 $ping3
  887.     
  888.     # start times for both connections
  889.     $ns_ at 40.1 "$ping0 send"
  890.     #sender cannot hear other tx
  891.     $ns_ at 60.1 "$ping2 send"
  892.     
  893. }
  894. Test/unicast7_sync instproc run {} {
  895.     $self next
  896. }
  897. Test/unicast8 instproc init {} {
  898.     global opt node_
  899.     $self instvar ns_ net_ testname_ topo_ tracefd_
  900.     
  901.     set testname_ unicast8
  902.     set opt(nn) 4
  903.     $self next
  904.     $node_(1) set X_ 300.0
  905.     $node_(1) set Y_ 300.0
  906.     $node_(1) set Z_ 0.0
  907.     
  908.     $node_(0) set X_ 150.0
  909.     $node_(0) set Y_ 150.0
  910.     $node_(0) set Z_ 0.0
  911.     
  912.     # node 2 can hear 1 & 3
  913.     $node_(2) set X_ 450.0
  914.     $node_(2) set Y_ 450.0
  915.     $node_(2) set Z_ 0.0
  916.     # node 3 hears only 2
  917.     $node_(3) set X_ 600.0
  918.     $node_(3) set Y_ 600.0
  919.     $node_(3) set Z_ 0.0
  920.     set ping0 [new Agent/Ping]
  921.     $ns_ attach-agent $node_(0) $ping0
  922.     set ping1 [new Agent/Ping]
  923.     $ns_ attach-agent $node_(1) $ping1
  924.     # connect two agents
  925.     $ns_ connect $ping0 $ping1
  926.     
  927.     
  928.     set ping2 [new Agent/Ping]
  929.     $ns_ attach-agent $node_(2) $ping2
  930.     set ping3 [new Agent/Ping]
  931.     $ns_ attach-agent $node_(3) $ping3
  932.     # connect two agents
  933.     $ns_ connect $ping2 $ping3
  934.     
  935.     # start times for both connections
  936.     $ns_ at 0.1 "$ping1 send"
  937.     #sender cannot hear other tx
  938.     $ns_ at 0.1 "$ping2 send"
  939.     
  940. }
  941. Test/unicast8 instproc run {} {
  942.     $self next
  943. }
  944. Test/unicast8_sync instproc init {} {
  945.     global opt node_
  946.     $self instvar ns_ net_ testname_ topo_ tracefd_
  947.     
  948.     set testname_ unicast8_sync
  949.     set opt(nn) 4
  950.     $self next
  951.     $node_(1) set X_ 300.0
  952.     $node_(1) set Y_ 300.0
  953.     $node_(1) set Z_ 0.0
  954.     
  955.     $node_(0) set X_ 150.0
  956.     $node_(0) set Y_ 150.0
  957.     $node_(0) set Z_ 0.0
  958.     
  959.     # node 2 can hear 1 & 3
  960.     $node_(2) set X_ 450.0
  961.     $node_(2) set Y_ 450.0
  962.     $node_(2) set Z_ 0.0
  963.     # node 3 hears only 2
  964.     $node_(3) set X_ 600.0
  965.     $node_(3) set Y_ 600.0
  966.     $node_(3) set Z_ 0.0
  967.     set ping0 [new Agent/Ping]
  968.     $ns_ attach-agent $node_(0) $ping0
  969.     set ping1 [new Agent/Ping]
  970.     $ns_ attach-agent $node_(1) $ping1
  971.     # connect two agents
  972.     $ns_ connect $ping0 $ping1
  973.     
  974.     
  975.     set ping2 [new Agent/Ping]
  976.     $ns_ attach-agent $node_(2) $ping2
  977.     set ping3 [new Agent/Ping]
  978.     $ns_ attach-agent $node_(3) $ping3
  979.     # connect two agents
  980.     $ns_ connect $ping2 $ping3
  981.     
  982.     # start times for both connections
  983.     $ns_ at 40.1 "$ping1 send"
  984.     #sender cannot hear other tx
  985.     $ns_ at 60.1 "$ping2 send"
  986.     
  987. }
  988. Test/unicast8_sync instproc run {} {
  989.     $self next
  990. }
  991. Test/unicast9 instproc init {} {
  992.     global opt node_
  993.     $self instvar ns_ net_ testname_ topo_ tracefd_
  994.     
  995.     set testname_ unicast9
  996.     set opt(nn) 4
  997.     $self next
  998.     $node_(0) set X_ 300.0
  999.     $node_(0) set Y_ 300.0
  1000.     $node_(0) set Z_ 0.0
  1001.     
  1002.     $node_(1) set X_ 150.0
  1003.     $node_(1) set Y_ 150.0
  1004.     $node_(1) set Z_ 0.0
  1005.     
  1006.     # node 2 & 3 cannot  hear 0 & 1
  1007.     $node_(2) set X_ 500.0
  1008.     $node_(2) set Y_ 550.0
  1009.     $node_(2) set Z_ 0.0
  1010.     $node_(3) set X_ 650.0
  1011.     $node_(3) set Y_ 680.0
  1012.     $node_(3) set Z_ 0.0
  1013.     set ping0 [new Agent/Ping]
  1014.     $ns_ attach-agent $node_(0) $ping0
  1015.     set ping1 [new Agent/Ping]
  1016.     $ns_ attach-agent $node_(1) $ping1
  1017.     # connect two agents
  1018.     $ns_ connect $ping0 $ping1
  1019.     
  1020.     
  1021.     set ping2 [new Agent/Ping]
  1022.     $ns_ attach-agent $node_(2) $ping2
  1023.     set ping3 [new Agent/Ping]
  1024.     $ns_ attach-agent $node_(3) $ping3
  1025.     # connect two agents
  1026.     $ns_ connect $ping2 $ping3
  1027.     
  1028.     # start times for both connections
  1029.     $ns_ at 0.1 "$ping0 send"
  1030.     #sender cannot hear other tx
  1031.     $ns_ at 0.1 "$ping3 send"
  1032.     
  1033. }
  1034. Test/unicast9 instproc run {} {
  1035.     $self next
  1036. }
  1037. Test/unicast9_sync instproc init {} {
  1038.     global opt node_
  1039.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1040.     
  1041.     set testname_ unicast9_sync
  1042.     set opt(nn) 4
  1043.     $self next
  1044.     $node_(0) set X_ 300.0
  1045.     $node_(0) set Y_ 300.0
  1046.     $node_(0) set Z_ 0.0
  1047.     
  1048.     $node_(1) set X_ 150.0
  1049.     $node_(1) set Y_ 150.0
  1050.     $node_(1) set Z_ 0.0
  1051.     
  1052.     # node 2 & 3 cannot  hear 0 & 1
  1053.     $node_(2) set X_ 500.0
  1054.     $node_(2) set Y_ 550.0
  1055.     $node_(2) set Z_ 0.0
  1056.     $node_(3) set X_ 650.0
  1057.     $node_(3) set Y_ 680.0
  1058.     $node_(3) set Z_ 0.0
  1059.     set ping0 [new Agent/Ping]
  1060.     $ns_ attach-agent $node_(0) $ping0
  1061.     set ping1 [new Agent/Ping]
  1062.     $ns_ attach-agent $node_(1) $ping1
  1063.     # connect two agents
  1064.     $ns_ connect $ping0 $ping1
  1065.     
  1066.     
  1067.     set ping2 [new Agent/Ping]
  1068.     $ns_ attach-agent $node_(2) $ping2
  1069.     set ping3 [new Agent/Ping]
  1070.     $ns_ attach-agent $node_(3) $ping3
  1071.     # connect two agents
  1072.     $ns_ connect $ping2 $ping3
  1073.     
  1074.     # start times for both connections
  1075.     $ns_ at 40.1 "$ping0 send"
  1076.     #sender cannot hear other tx
  1077.     $ns_ at 60.1 "$ping3 send"
  1078.     
  1079. }
  1080. Test/unicast9_sync instproc run {} {
  1081.     $self next
  1082. }
  1083. Test/unicast10 instproc init {} {
  1084.     global opt node_
  1085.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1086.     
  1087.     set testname_ unicast10
  1088.     set opt(nn) 4
  1089.     $self next
  1090.     $node_(0) set X_ 100.0
  1091.     $node_(0) set Y_ 100.0
  1092.     $node_(0) set Z_ 0.0
  1093.     
  1094.     $node_(1) set X_ 50.0
  1095.     $node_(1) set Y_ 50.0
  1096.     $node_(1) set Z_ 0.0
  1097.     
  1098.     # node 2 & 3 cannot  hear 0 & 1
  1099.     $node_(2) set X_ 500.0
  1100.     $node_(2) set Y_ 550.0
  1101.     $node_(2) set Z_ 0.0
  1102.     $node_(3) set X_ 650.0
  1103.     $node_(3) set Y_ 680.0
  1104.     $node_(3) set Z_ 0.0
  1105.     set ping0 [new Agent/Ping]
  1106.     $ns_ attach-agent $node_(0) $ping0
  1107.     set ping1 [new Agent/Ping]
  1108.     $ns_ attach-agent $node_(1) $ping1
  1109.     # connect two agents
  1110.     $ns_ connect $ping0 $ping1
  1111.     
  1112.     
  1113.     set ping2 [new Agent/Ping]
  1114.     $ns_ attach-agent $node_(2) $ping2
  1115.     set ping3 [new Agent/Ping]
  1116.     $ns_ attach-agent $node_(3) $ping3
  1117.     # connect two agents
  1118.     $ns_ connect $ping2 $ping3
  1119.     
  1120.     # start times for both connections
  1121.     $ns_ at 0.1 "$ping0 send"
  1122.     #sender cannot hear other tx
  1123.     $ns_ at 0.1 "$ping3 send"
  1124.     
  1125. }
  1126. Test/unicast10 instproc run {} {
  1127.     $self next
  1128. }
  1129. Test/unicast10_sync instproc init {} {
  1130.     global opt node_
  1131.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1132.     
  1133.     set testname_ unicast10_sync
  1134.     set opt(nn) 4
  1135.     $self next
  1136.     $node_(0) set X_ 100.0
  1137.     $node_(0) set Y_ 100.0
  1138.     $node_(0) set Z_ 0.0
  1139.     
  1140.     $node_(1) set X_ 50.0
  1141.     $node_(1) set Y_ 50.0
  1142.     $node_(1) set Z_ 0.0
  1143.     
  1144.     # node 2 & 3 cannot  hear 0 & 1
  1145.     $node_(2) set X_ 500.0
  1146.     $node_(2) set Y_ 550.0
  1147.     $node_(2) set Z_ 0.0
  1148.     $node_(3) set X_ 650.0
  1149.     $node_(3) set Y_ 680.0
  1150.     $node_(3) set Z_ 0.0
  1151.     set ping0 [new Agent/Ping]
  1152.     $ns_ attach-agent $node_(0) $ping0
  1153.     set ping1 [new Agent/Ping]
  1154.     $ns_ attach-agent $node_(1) $ping1
  1155.     # connect two agents
  1156.     $ns_ connect $ping0 $ping1
  1157.     
  1158.     
  1159.     set ping2 [new Agent/Ping]
  1160.     $ns_ attach-agent $node_(2) $ping2
  1161.     set ping3 [new Agent/Ping]
  1162.     $ns_ attach-agent $node_(3) $ping3
  1163.     # connect two agents
  1164.     $ns_ connect $ping2 $ping3
  1165.     
  1166.     # start times for both connections
  1167.     $ns_ at 40.1 "$ping0 send"
  1168.     #sender cannot hear other tx
  1169.     $ns_ at 40.1 "$ping3 send"
  1170.     
  1171. }
  1172. Test/unicast10_sync instproc run {} {
  1173.     $self next
  1174. }
  1175. Test/unicast11 instproc init {} {
  1176.     global opt node_
  1177.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1178.     
  1179.     set testname_ unicast11
  1180.     set opt(nn) 3
  1181.     $self next
  1182.     $node_(0) set X_ 100.0
  1183.     $node_(0) set Y_ 100.0
  1184.     $node_(0) set Z_ 0.0
  1185.     
  1186.     $node_(1) set X_ 200.0
  1187.     $node_(1) set Y_ 200.0
  1188.     $node_(1) set Z_ 0.0
  1189.     
  1190.     $node_(2) set X_ 300.0
  1191.     $node_(2) set Y_ 100.0
  1192.     $node_(2) set Z_ 0.0
  1193.     set ping0 [new Agent/Ping]
  1194.     $ns_ attach-agent $node_(0) $ping0
  1195.     set ping1 [new Agent/Ping]
  1196.     $ns_ attach-agent $node_(1) $ping1
  1197.     # connect two agents
  1198.     $ns_ connect $ping0 $ping1
  1199.     
  1200.     
  1201.     set ping2 [new Agent/Ping]
  1202.     $ns_ attach-agent $node_(1) $ping2
  1203.     set ping3 [new Agent/Ping]
  1204.     $ns_ attach-agent $node_(2) $ping3
  1205.     # connect two agents
  1206.     $ns_ connect $ping2 $ping3
  1207.     set ping4 [new Agent/Ping]
  1208.     $ns_ attach-agent $node_(2) $ping4
  1209.     set ping5 [new Agent/Ping]
  1210.     $ns_ attach-agent $node_(0) $ping5
  1211.     # connect two agents
  1212.     $ns_ connect $ping4 $ping5
  1213.     
  1214.     # start times for connections
  1215.     $ns_ at 0.1 "$ping0 send"
  1216.     $ns_ at 0.1 "$ping2 send"
  1217.     $ns_ at 0.1 "$ping4 send"
  1218.     
  1219. }
  1220. Test/unicast11 instproc run {} {
  1221.     $self next
  1222. }
  1223. Test/unicast11_sync instproc init {} {
  1224.     global opt node_
  1225.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1226.     
  1227.     set testname_ unicast11_sync
  1228.     set opt(nn) 3
  1229.     $self next
  1230.     $node_(0) set X_ 100.0
  1231.     $node_(0) set Y_ 100.0
  1232.     $node_(0) set Z_ 0.0
  1233.     
  1234.     $node_(1) set X_ 200.0
  1235.     $node_(1) set Y_ 200.0
  1236.     $node_(1) set Z_ 0.0
  1237.     
  1238.     $node_(2) set X_ 300.0
  1239.     $node_(2) set Y_ 100.0
  1240.     $node_(2) set Z_ 0.0
  1241.     set ping0 [new Agent/Ping]
  1242.     $ns_ attach-agent $node_(0) $ping0
  1243.     set ping1 [new Agent/Ping]
  1244.     $ns_ attach-agent $node_(1) $ping1
  1245.     # connect two agents
  1246.     $ns_ connect $ping0 $ping1
  1247.     
  1248.     
  1249.     set ping2 [new Agent/Ping]
  1250.     $ns_ attach-agent $node_(1) $ping2
  1251.     set ping3 [new Agent/Ping]
  1252.     $ns_ attach-agent $node_(2) $ping3
  1253.     # connect two agents
  1254.     $ns_ connect $ping2 $ping3
  1255.     set ping4 [new Agent/Ping]
  1256.     $ns_ attach-agent $node_(2) $ping4
  1257.     set ping5 [new Agent/Ping]
  1258.     $ns_ attach-agent $node_(0) $ping5
  1259.     # connect two agents
  1260.     $ns_ connect $ping4 $ping5
  1261.     
  1262.     # start times for connections
  1263.     $ns_ at 40.1 "$ping0 send"
  1264.     $ns_ at 40.1 "$ping2 send"
  1265.     $ns_ at 40.1 "$ping4 send"
  1266.     
  1267. }
  1268. Test/unicast11_sync instproc run {} {
  1269.     $self next
  1270. }
  1271. Test/unicast12 instproc init {} {
  1272.     global opt node_
  1273.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1274.     
  1275.     set testname_ unicast12
  1276.     set opt(nn) 3
  1277.     set opt(err)            UniformErrorProc
  1278.     set opt(FECstrength)    1
  1279.     ErrorModel set rate_ 0.1
  1280.     ErrorModel set bandwidth_ 1Kb
  1281.     
  1282.     $self next
  1283.     $node_(0) set X_ 100.0
  1284.     $node_(0) set Y_ 100.0
  1285.     $node_(0) set Z_ 0.0
  1286.     
  1287.     $node_(1) set X_ 200.0
  1288.     $node_(1) set Y_ 200.0
  1289.     $node_(1) set Z_ 0.0
  1290.     
  1291.     $node_(2) set X_ 300.0
  1292.     $node_(2) set Y_ 100.0
  1293.     $node_(2) set Z_ 0.0
  1294.     set ping0 [new Agent/Ping]
  1295.     $ns_ attach-agent $node_(0) $ping0
  1296.     set ping1 [new Agent/Ping]
  1297.     $ns_ attach-agent $node_(1) $ping1
  1298.     # connect two agents
  1299.     $ns_ connect $ping0 $ping1
  1300.     
  1301.     
  1302.     set ping2 [new Agent/Ping]
  1303.     $ns_ attach-agent $node_(1) $ping2
  1304.     set ping3 [new Agent/Ping]
  1305.     $ns_ attach-agent $node_(2) $ping3
  1306.     # connect two agents
  1307.     $ns_ connect $ping2 $ping3
  1308.     set ping4 [new Agent/Ping]
  1309.     $ns_ attach-agent $node_(2) $ping4
  1310.     set ping5 [new Agent/Ping]
  1311.     $ns_ attach-agent $node_(0) $ping5
  1312.     # connect two agents
  1313.     $ns_ connect $ping4 $ping5
  1314.     
  1315.     # start times for connections
  1316.     $ns_ at 0.1 "$ping0 send"
  1317.     $ns_ at 0.1 "$ping2 send"
  1318.     $ns_ at 0.1 "$ping4 send"
  1319.     
  1320. }
  1321. Test/unicast12 instproc run {} {
  1322.     $self next
  1323. }
  1324. Test/unicast12_sync instproc init {} {
  1325.     global opt node_
  1326.     $self instvar ns_ net_ testname_ topo_ tracefd_
  1327.     
  1328.     set testname_ unicast12_sync
  1329.     set opt(nn) 3
  1330.     set opt(err)            UniformErrorProc
  1331.     set opt(FECstrength)    1
  1332.     ErrorModel set rate_ 0.1
  1333.     ErrorModel set bandwidth_ 1Kb
  1334.     
  1335.     $self next
  1336.     $node_(0) set X_ 100.0
  1337.     $node_(0) set Y_ 100.0
  1338.     $node_(0) set Z_ 0.0
  1339.     
  1340.     $node_(1) set X_ 200.0
  1341.     $node_(1) set Y_ 200.0
  1342.     $node_(1) set Z_ 0.0
  1343.     
  1344.     $node_(2) set X_ 300.0
  1345.     $node_(2) set Y_ 100.0
  1346.     $node_(2) set Z_ 0.0
  1347.     set ping0 [new Agent/Ping]
  1348.     $ns_ attach-agent $node_(0) $ping0
  1349.     set ping1 [new Agent/Ping]
  1350.     $ns_ attach-agent $node_(1) $ping1
  1351.     # connect two agents
  1352.     $ns_ connect $ping0 $ping1
  1353.     
  1354.     
  1355.     set ping2 [new Agent/Ping]
  1356.     $ns_ attach-agent $node_(1) $ping2
  1357.     set ping3 [new Agent/Ping]
  1358.     $ns_ attach-agent $node_(2) $ping3
  1359.     # connect two agents
  1360.     $ns_ connect $ping2 $ping3
  1361.     set ping4 [new Agent/Ping]
  1362.     $ns_ attach-agent $node_(2) $ping4
  1363.     set ping5 [new Agent/Ping]
  1364.     $ns_ attach-agent $node_(0) $ping5
  1365.     # connect two agents
  1366.     $ns_ connect $ping4 $ping5
  1367.     
  1368.     # start times for connections
  1369.     $ns_ at 40.1 "$ping0 send"
  1370.     $ns_ at 40.1 "$ping2 send"
  1371.     $ns_ at 40.1 "$ping4 send"
  1372.     
  1373. }
  1374. Test/unicast12_sync instproc run {} {
  1375.     $self next
  1376. }
  1377. #Define a 'recv' function for the class 'Agent/Ping'
  1378. Agent/Ping instproc recv {from rtt} {
  1379.     $self instvar node_
  1380.     puts "node [$node_ id] received ping answer from 
  1381.               $from with round-trip-time $rtt ms."
  1382. }
  1383. TestSuite instproc finish {} {
  1384.     $self instvar ns_ tracefd_
  1385.     $ns_ flush-trace 
  1386.     close $tracefd_
  1387. }
  1388. proc runtest {arg} {
  1389.     global quiet
  1390.     set quiet 0
  1391.     
  1392.     set b [llength $arg]
  1393.     if {$b == 1} {
  1394. set test $arg
  1395.     } elseif {$b == 2} {
  1396. set test [lindex $arg 0]
  1397. if {[lindex $arg 1] == "QUIET"} {
  1398.     set quiet 1
  1399. }
  1400.     } else {
  1401. usage
  1402.     }
  1403.     set t [new Test/$test]
  1404.     $t run
  1405. }
  1406. global argv arg0
  1407. default_options
  1408. runtest $argv