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

通讯编程

开发平台:

Visual C++

  1. # test-suite-DelayBox.tcl
  2. #
  3. # Based on ns/tcl/test/test-suite-full.tcl
  4. #
  5. # Modified by Michele Weigle, UNC-Chapel Hill, Dec 2003
  6. #
  7. #*************************************************************************
  8. # Tests to validate DelayBox
  9. #
  10. #  oneway - one-way TCP
  11. #  oneway-asymmetric - one-way TCP and delay only on the data path
  12. #  full - Full-TCP
  13. #  full-asymmetric - Full-TCP and delay only on the data path
  14. #*************************************************************************
  15. # Agent/TCP/FullTcp set debug_ true;
  16. source misc.tcl
  17. TestSuite instproc finish testname {
  18. $self instvar ns_
  19. $ns_ halt
  20. }
  21. Class SkelTopology
  22. Class Topology -superclass SkelTopology
  23. Topology instproc node? num {
  24.     $self instvar node_
  25.     return $node_($num)
  26. }
  27. Class Topology/DB -superclass Topology
  28. #
  29. # DelayBox test topology
  30. #
  31. #           s1                      k1
  32. #                                 /
  33. #  100Mb, 1ms      100Mb, 1ms    / 100Mb, 1ms
  34. #               r1 ----------- r2 
  35. #  100Mb, 1ms  /                  100Mb, 1ms
  36. #             /                   
  37. #          s2                       k2
  38. #
  39. Topology/DB instproc init ns {
  40.     $self instvar node_
  41.     set node_(s1) [$ns node]
  42.     set node_(s2) [$ns node]
  43.     set node_(r1) [$ns DelayBox]
  44.     set node_(r2) [$ns DelayBox]
  45.     set node_(k1) [$ns node]
  46.     set node_(k2) [$ns node]
  47.     $self next
  48.     $ns duplex-link $node_(s1) $node_(r1) 100Mb 1ms DropTail
  49.     $ns duplex-link $node_(s2) $node_(r1) 100Mb 1ms DropTail
  50.     $ns duplex-link $node_(r1) $node_(r2) 100Mb 1ms DropTail
  51.     $ns duplex-link $node_(k1) $node_(r2) 100Mb 1ms DropTail
  52.     $ns duplex-link $node_(k2) $node_(r2) 100Mb 1ms DropTail
  53. }
  54. TestSuite instproc setup tcptype {
  55.     $self instvar ns_ node_ testName_
  56.     # clear output files
  57.     exec rm -f temp.rands
  58.     Trace set show_tcphdr_ 1 
  59.     Agent/TCP set minrto_ 1;     # ns-2.27 value
  60.     set stopt 10
  61.     # create TCP Agents
  62.     if {$tcptype == "FullTcp"} {
  63.         set src(0) [new Agent/TCP/FullTcp]
  64.         set sink(0) [new Agent/TCP/FullTcp]
  65.         set src(1) [new Agent/TCP/FullTcp]
  66.         set sink(1) [new Agent/TCP/FullTcp]
  67.     } elseif {$tcptype == "oneway"} {
  68.         set src(0) [new Agent/TCP]
  69.         set sink(0) [new Agent/TCPSink]
  70.         set src(1) [new Agent/TCP]
  71.         set sink(1) [new Agent/TCPSink]
  72.     }
  73.     # setup TCP Agents and connections
  74.     $ns_ attach-agent $node_(s1) $src(0)
  75.     $src(0) set fid_ 0
  76.     $ns_ attach-agent $node_(k1) $sink(0)
  77.     $sink(0) set fid_ 0
  78.     $ns_ attach-agent $node_(s2) $src(1)
  79.     $src(1) set fid_ 1
  80.     $ns_ attach-agent $node_(k2) $sink(1)
  81.     $sink(1) set fid_ 1
  82.     # make the connections
  83.     $ns_ connect $src(0) $sink(0)
  84.     $sink(0) listen
  85.     $ns_ connect $src(1) $sink(1)
  86.     $sink(1) listen
  87.     
  88.     # schedule flows
  89.     $ns_ at 0.7 "$src(0) advance 50"
  90.     $ns_ at 0.8 "$src(1) advance 50"
  91.     $ns_ at 2.0 "$src(0) close"
  92.     $ns_ at 2.0 "$src(1) close"
  93.     $ns_ at $stopt "$self finish $testName_"
  94.    # setup tracing
  95.     set trace_file [open temp.rands w]
  96.     $ns_ trace-queue $node_(s1) $node_(r1) $trace_file
  97.     $ns_ trace-queue $node_(r1) $node_(s1) $trace_file
  98.     $ns_ trace-queue $node_(s2) $node_(r1) $trace_file
  99.     $ns_ trace-queue $node_(r1) $node_(s2) $trace_file
  100.     $ns_ trace-queue $node_(r1) $node_(r2) $trace_file
  101.     $ns_ trace-queue $node_(r2) $node_(r1) $trace_file
  102.     $ns_ trace-queue $node_(k1) $node_(r2) $trace_file
  103.     $ns_ trace-queue $node_(r2) $node_(k1) $trace_file
  104.     $ns_ trace-queue $node_(k2) $node_(r2) $trace_file
  105.     $ns_ trace-queue $node_(r2) $node_(k2) $trace_file
  106.     # create random variables
  107.     set srcd_rng [new RNG];
  108.     set src_delay [new RandomVariable/Uniform];   # delay 20-50 ms
  109.     $src_delay set min_ 20
  110.     $src_delay set max_ 50
  111.     $src_delay use-rng $srcd_rng
  112.     set srcbw_rng [new RNG];
  113.     set src_bw [new RandomVariable/Uniform];      # bw 1-20 Mbps
  114.     $src_bw set min_ 1
  115.     $src_bw set max_ 20
  116.     $src_delay use-rng $srcbw_rng
  117.     set sinkd_rng [new RNG];
  118.     set sink_delay [new RandomVariable/Uniform];   # delay 1-20 ms
  119.     $sink_delay set min_ 1
  120.     $sink_delay set max_ 20
  121.     $sink_delay use-rng $sinkd_rng
  122.     set sinkbw_rng [new RNG];
  123.     set sink_bw [new RandomVariable/Constant];      # bw 100 Mbps
  124.     $sink_bw set val_ 100
  125.     $sink_bw use-rng $sinkbw_rng
  126.     set loss_rng [new RNG];
  127.     set loss_rate [new RandomVariable/Uniform];    # loss 0-1%
  128.     $loss_rate set min_ 0
  129.     $loss_rate set max_ 0.01
  130.     $loss_rate use-rng $loss_rng
  131.     
  132.     # setup rules for DelayBoxes
  133.     $node_(r1) add-rule [$node_(s1) id] [$node_(k1) id] $src_delay 
  134.     $loss_rate $src_bw
  135.     $node_(r1) add-rule [$node_(s2) id] [$node_(k2) id] $src_delay 
  136.     $loss_rate $src_bw
  137.     $node_(r2) add-rule [$node_(s1) id] [$node_(k1) id] $sink_delay 
  138.     $loss_rate $sink_bw
  139.     $node_(r2) add-rule [$node_(s2) id] [$node_(k2) id] $sink_delay 
  140.     $loss_rate $sink_bw
  141. }
  142. #
  143. # oneway
  144. #
  145. Class Test/oneway -superclass TestSuite
  146. Test/oneway instproc init topo {
  147.         global defaultRNG
  148. $self instvar net_ defNet_ test_
  149.         $defaultRNG seed 9999
  150.         set net_ $topo
  151. set defNet_ DB
  152. set test_ oneway
  153. $self next 0
  154. }
  155. Test/oneway instproc run {} {
  156. $self instvar ns_ 
  157.         $self setup oneway
  158. $ns_ run
  159. }
  160. #
  161. # oneway-asymmetric
  162. #
  163. Class Test/oneway-asymmetric -superclass TestSuite
  164. Test/oneway-asymmetric instproc init topo {
  165.         global defaultRNG
  166. $self instvar net_ defNet_ test_
  167.         $defaultRNG seed 9999
  168.         set net_ $topo
  169. set defNet_ DB
  170. set test_ oneway-asymmetric
  171. $self next 0
  172. }
  173. Test/oneway-asymmetric instproc run {} {
  174. $self instvar ns_ node_ 
  175.         $self setup oneway
  176.         $node_(r1) set-asymmetric
  177.         $node_(r2) set-asymmetric
  178. $ns_ run
  179. }
  180. #
  181. # full
  182. #
  183. Class Test/full -superclass TestSuite
  184. Test/full instproc init topo {
  185.         global defaultRNG
  186. $self instvar net_ defNet_ test_
  187.         $defaultRNG seed 9999
  188.         set net_ $topo
  189. set defNet_ DB
  190. set test_ full
  191. $self next 0
  192. }
  193. Test/full instproc run {} {
  194. $self instvar ns_
  195.         $self setup FullTcp
  196. $ns_ run
  197. }
  198. #
  199. # full-asymmetric
  200. #
  201. Class Test/full-asymmetric -superclass TestSuite
  202. Test/full-asymmetric instproc init topo {
  203.         global defaultRNG
  204. $self instvar net_ defNet_ test_
  205.         $defaultRNG seed 9999
  206.         set net_ $topo
  207. set defNet_ DB
  208. set test_ full-asymmetric
  209. $self next 0
  210. }
  211. Test/full-asymmetric instproc run {} {
  212. $self instvar ns_ node_
  213.         $self setup FullTcp
  214.         $node_(r1) set-asymmetric
  215.         $node_(r2) set-asymmetric
  216. $ns_ run
  217. }
  218. TestSuite runTest