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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) Xerox Corporation 1997. All rights reserved.
  3. #  
  4. # License is granted to copy, to use, and to make and to use derivative
  5. # works for research and evaluation purposes, provided that Xerox is
  6. # acknowledged in all documentation pertaining to any such copy or derivative
  7. # work. Xerox grants no other licenses expressed or implied. The Xerox trade
  8. # name should not be used in any advertising without its written permission.
  9. #  
  10. # XEROX CORPORATION MAKES NO REPRESENTATIONS CONCERNING EITHER THE
  11. # MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF THIS SOFTWARE
  12. # FOR ANY PARTICULAR PURPOSE.  The software is provided "as is" without
  13. # express or implied warranty of any kind.
  14. #  
  15. # These notices must be retained in any copies of any part of this software.
  16. #
  17. # This file contributed by Sandeep Bajaj <bajaj@parc.xerox.com>, Mar 1997.
  18. #
  19. # This script is a simple test for testing DRR functionality
  20. # This script creates a simple topology and places 6 CBR sources of different
  21. # rates. Finally it prints some stats to indicate the share of the bottleneck 
  22. # link that each source gets.
  23. # The flows can be discriminated by each individual source or by each 
  24. # node (using the setmask command line option) 
  25. # Run this script as
  26. # ../../ns test-drr.tcl 
  27. # or
  28. # ../../ns test-drr.tcl setmask 
  29. # After running this script cat "out" to view the flow stats
  30. #default Mask parameter
  31. set MASK 0
  32. if { [lindex $argv 0] == "setmask" } {
  33.     set MASK 1
  34.     puts stderr "Ignoring port nos of sources"
  35. }
  36. set ns [new Simulator]
  37. # Create a simple four node topology:
  38. #
  39. #    n0
  40. #       
  41. # 10Mb,0.01ms    1Mb,0.01ms
  42. #         n2 --------- n3
  43. # 10Mb,0.01ms /
  44. #      /
  45. #    n1
  46. set n0 [$ns node]
  47. set n1 [$ns node]
  48. set n2 [$ns node]
  49. set n3 [$ns node]
  50. set f [open out.tr w]
  51. #$ns trace-all $f
  52. $ns duplex-link $n0 $n1 1.0Mb 0.01ms DRR 
  53. $ns duplex-link $n2 $n0 10.0Mb 0.01ms DRR 
  54. $ns duplex-link $n3 $n0 10.0Mb 0.01ms DRR 
  55. # trace the bottleneck queue 
  56. $ns trace-queue $n0 $n1 $f
  57. Simulator instproc get-link { node1 node2 } {
  58.     $self instvar link_
  59.     set id1 [$node1 id]
  60.     set id2 [$node2 id]
  61.     return $link_($id1:$id2)
  62. }
  63. #Alternate way for setting parameters for the DRR queue
  64. set l [$ns get-link $n0 $n1]
  65. set q [$l queue]
  66. $q mask $MASK
  67. $q blimit 25000
  68. $q quantum 500
  69. $q buckets 7
  70. # create 6 cbr sources :
  71. #source 0 :
  72. set udp0 [new Agent/UDP]
  73. $ns attach-agent $n2 $udp0
  74. set cbr0 [new Application/Traffic/CBR]
  75. $cbr0 attach-agent $udp0
  76. $cbr0 set packetSize_ 250
  77. $cbr0 set interval_ 20ms
  78. $cbr0 set random_ 1
  79. #source 1 :
  80. set udp1 [new Agent/UDP]
  81. $ns attach-agent $n2 $udp1
  82. set cbr1 [new Application/Traffic/CBR]
  83. $cbr1 attach-agent $udp1
  84. $cbr1 set packetSize_ 250
  85. $cbr1 set interval_ 4ms
  86. $cbr1 set random_ 1
  87. #source 2:
  88. set udp2 [new Agent/UDP]
  89. $ns attach-agent $n2 $udp2
  90. set cbr2 [new Application/Traffic/CBR]
  91. $cbr2 attach-agent $udp2
  92. $cbr2 set packetSize_ 250
  93. $cbr2 set interval_ 2.5ms
  94. $cbr2 set random_ 1
  95. #source 3 :
  96. set udp3 [new Agent/UDP]
  97. $ns attach-agent $n3 $udp3
  98. set cbr3 [new Application/Traffic/CBR]
  99. $cbr3 attach-agent $udp3
  100. $cbr3 set packetSize_ 250
  101. $cbr3 set interval_ 2.5ms
  102. $cbr3 set random_ 1
  103. #source 4
  104. set udp4 [new Agent/UDP]
  105. $ns attach-agent $n3 $udp4
  106. set cbr4 [new Application/Traffic/CBR]
  107. $cbr4 attach-agent $udp4
  108. $cbr4 set packetSize_ 250
  109. $cbr4 set interval_ 4ms
  110. $cbr4 set random_ 1
  111. #source 5
  112. set udp5 [new Agent/UDP]
  113. $ns attach-agent $n3 $udp5
  114. set cbr5 [new Application/Traffic/CBR]
  115. $cbr5 attach-agent $udp5
  116. $cbr5 set packetSize_ 250
  117. $cbr5 set interval_ 20ms
  118. $cbr5 set random_ 1
  119. # receiver 0 :
  120. set lm0 [new Agent/Null]
  121. $ns attach-agent $n1 $lm0
  122. $ns connect $udp0 $lm0
  123. $ns connect $udp1 $lm0
  124. $ns connect $udp2 $lm0
  125. $ns connect $udp3 $lm0
  126. $ns connect $udp4 $lm0
  127. $ns connect $udp5 $lm0
  128. $ns at 0.0 "$cbr0 start"
  129. $ns at 0.0  "$cbr1 start"
  130. $ns at 0.0  "$cbr2 start"
  131. $ns at 0.0  "$cbr3 start"
  132. $ns at 0.0  "$cbr4 start"
  133. $ns at 0.0  "$cbr5 start"
  134. $ns at 2.0 "$cbr0 stop"
  135. $ns at 2.0 "$cbr1 stop"
  136. $ns at 2.0  "$cbr2 stop"
  137. $ns at 2.0  "$cbr3 stop"
  138. $ns at 2.0  "$cbr4 stop"
  139. $ns at 2.0  "$cbr5 stop"
  140. $ns at 3.0 "close $f;finish"
  141. proc finish {} {
  142.     puts "processing output ..."
  143.     exec awk  { 
  144. {
  145.     n[$9]=$9; 
  146.     if ($1=="-") r[$9]++; 
  147.     if ($1=="+") s[$9]++; 
  148.     if ($1=="d") d[$9]++ 
  149.     }
  150. END 
  151.     { 
  152. printf ("Flow#t#sentt#recvdt#dropt%%recvdn"); 
  153.     for (i in r) 
  154.     printf ("%1.1ft%dt%dt%dt%fn",n[i],s[i],r[i],d[i],r[i]*1.0/s[i])
  155. }
  156.     } out.tr > out
  157.     exec cat out &
  158.     exit 0
  159. }
  160. $ns run