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

通讯编程

开发平台:

Visual C++

  1. # Multiple RM flows scenario competing with multiple TCP scenario
  2. #                  
  3. #             RM sender 1   
  4. # topology:  .   o               o   RM recv 1
  5. #            .     0         1 /              
  6. #    RM send N o---o-----------o--o   RM recv N
  7. #                 /| B/N link  |
  8. #                / |           |    
  9. #               o  o           o  o  TCP recv 1
  10. #    TCP sender 1                 
  11. #               ...            TCP receiver N
  12. #                TCP sender N 
  13. #
  14. # start N number of rm flows and TCP flows randomly
  15. # after steady state is attained measure thruput ans compare
  16. #
  17. # usage: ns rmcc-4.tcl
  18. source rmcc.tcl
  19. proc get_rand_time {first last number} {
  20. set times ""
  21. set interval [expr $last - $first]
  22. set maxrval [expr pow(2,31)]
  23. set intrval [expr $interval/$maxrval]
  24. for { set i 0 } { $i < $number } { incr i } {
  25. set randtime [expr ([ns-random] * $intrval) + $first]
  26. # XXX include only 6 decimals (i.e. usec)
  27. lappend times [format "%.1f" $randtime]
  28. }
  29. return $times
  30. }
  31. ScenLib/RM instproc random_start_rm {start stop} {
  32. global ns n num
  33. #create mcast trees
  34. set i [expr $num*2]
  35. set t [expr $num * 3]
  36. while {$i < $t} {
  37. lappend R $i
  38. incr i
  39. }
  40. for {set i 0} {$i < $num} {incr i} {
  41. set time [get_rand_time $start $stop 1]
  42. set st [expr $time - 1]
  43. if {$st < 0} { set st 0}
  44. set sw [expr $st - 0.7]
  45. if {$sw < 0} { set sw 0}
  46. #puts "time = $time"
  47. eval $self create_mcast $i $sw $st $time $R
  48. #puts "mcast $i to $R"
  49. }
  50. }
  51. ScenLib/RM instproc random_start_tcp {start stop} {
  52. global ns n num
  53.     set start [expr $num*2]
  54.     set end [expr $num*4]
  55. set i $num
  56. set j [expr $num*3]
  57. while {$i < $start || $j < $end} {
  58. set time [get_rand_time $start $stop 1]
  59. $self create_tcp $i $j $time
  60.     #puts "$self create_tcp $i $j $time"
  61. incr i
  62. incr j
  63. }
  64. }
  65. ScenLib/RM instproc make_topo3 {} {
  66. global ns tcp_model num n opts
  67. #make the bottleneck link
  68. set n(l) [$ns node]
  69. set n(r) [$ns node]
  70. set num $opts(clientNum)      ;#N actual number flows setup
  71. $ns duplex-link $n(l) $n(r) [expr $num * 0.5]Mbps 
  72. $opts(bottleneckDelay) DropTail
  73. $ns queue-limit $n(l) $n(r) [expr $num * 10]
  74. #make N number of TCP connections
  75. #set seed 12345
  76. #set params "-print-drop-rate 1 -debug 0 -trace-filename out"
  77. #set p1 "-bottle-queue-length $opts(bottleneckQSize) 
  78. #-bottle-queue-method DropTail"
  79. #set p2 "-client-arrival-rate 120 
  80. # -bottle-bw $opts(bottleneckBW) 
  81. #-bottle-delay $opts(bottleneckDelay) 
  82. #-ns-random-seed $seed" 
  83. #set p2a "-source-tcp-method TCP/Reno -sink-ack-method 
  84. # TCPSink/DelAck"
  85. #set p3 "-client-mouse-chance 90 -client-mouse-packets 10" 
  86. #set p4 "-client-bw 100Mb -node-number $num -client-reverse-chance 10"
  87. #set p5 "-initial-client-count 0"
  88. #set p6 "-duration 10 graph-results 1 graph-join-queueing 0 -graph-scale 2"
  89. #set tcp_model [eval new TrafficGen/ManyTCP $params $p1 $p2 
  90. # $p2a $p3 $p4 $p5 $p6]
  91. #now create client nodes on left of bottleneck
  92. for {set i 0} {$i < [expr $num*2]} {incr i} {
  93. set n($i) [$ns node]
  94. $ns duplex-link $n($i) $n(l) 10Mb 5ms DropTail
  95. }
  96. # do same for right of B/N link
  97. for {set i [expr $num*2]} {$i < [expr $num * 4]} {incr i} {
  98. set n($i) [$ns node] 
  99. $ns duplex-link $n(r) $n($i) [expr $num * 5]Mb 
  100. 5ms DropTail
  101. }
  102. }
  103. ScenLib/RM instproc add_flowmon { time } {
  104. global num n t
  105. #make sure the flow monitors are dumped at the right time
  106. $self make_flowmon $time $n(r) $n([expr $num*2]) flowStats_1_$num.$t 
  107. $n(r) $n([expr $num * 3]) 
  108. flowStats_1_[expr $num + 1].$t 
  109. }
  110. proc run {} {
  111. global ns n num
  112. set test_scen [new ScenLib/RM]
  113. $test_scen make_topo3
  114.     #random start tcp and rm connections between 0 and 10s.
  115. $test_scen random_start_tcp 0.0 10.0
  116. $test_scen random_start_rm 0.0 10.0
  117. $test_scen add_flowmon 30.0
  118.     $test_scen dump_flowmon $n(r) $n([expr $num*2]) 60.0 ;# rm flow
  119.     $test_scen dump_flowmon $n(r) $n([expr $num*3]) 60.0 ;#tcp flow
  120.     $ns at 60.0 "finish"
  121.     $ns run
  122. }
  123. global argv prog opts t mflag
  124. set mflag 0
  125. if [string match {*.tcl} $argv0] {
  126.     set prog [string range $argv0 0 [expr [string length $argv0] - 5]]
  127. } else {
  128.     set prog $argv0
  129. }
  130. process_args $argv
  131. set t $prog
  132. run