ds-cbr-tb-WIRR.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #--------------------------------------------------------------------------------
  2. # cbr-tb.tcl
  3. # Author: Jeremy Ethridge.
  4. # Dates: June 29-July 5, 1999.
  5. # Notes: A DS-RED script that uses CBR traffic agents and the Token Bucket policer.
  6. #
  7. #    ----
  8. #    |s1|-----------
  9. #    ----   10 Mb   
  10. #            5 ms    
  11. #                     ----           ------          ----           ------
  12. #                      |e1|-----------|core|----------|e2|-----------|dest|
  13. #                     /----   10 Mb   ------   5 Mb   ----   10 Mb   ------
  14. #                    /         5 ms            5 ms           5 ms
  15. #    ----           /
  16. #    |s2|-----------
  17. #    ----   10 Mb
  18. #            5 ms
  19. #
  20. #--------------------------------------------------------------------------------
  21. set ns [new Simulator]
  22. set cir0  1000000
  23. set cbs0    10000
  24. set rate0 4000000
  25. set cir1  1000000
  26. set cbs1    10000
  27. set rate1 4000000
  28. set testTime 85.0
  29. set packetSize 1000
  30. # Set up the network topology shown at the top of this file:
  31. set s1 [$ns node]
  32. set s2 [$ns node]
  33. set e1 [$ns node]
  34. set core [$ns node]
  35. set e2 [$ns node]
  36. set dest [$ns node]
  37. $ns duplex-link $s1 $e1 10Mb 5ms DropTail
  38. $ns duplex-link $s2 $e1 10Mb 5ms DropTail
  39. $ns simplex-link $e1 $core 10Mb 5ms dsRED/edge
  40. $ns simplex-link $core $e1 10Mb 5ms dsRED/core
  41. $ns simplex-link $core $e2 5Mb 5ms dsRED/core
  42. $ns simplex-link $e2 $core 5Mb 5ms dsRED/edge
  43. $ns duplex-link $e2 $dest 10Mb 5ms DropTail
  44. $ns duplex-link-op $s1 $e1 orient down-right
  45. $ns duplex-link-op $s2 $e1 orient up-right
  46. $ns duplex-link-op $e1 $core orient right
  47. $ns duplex-link-op $core $e2 orient right
  48. $ns duplex-link-op $e2 $dest orient right
  49. set qE1C [[$ns link $e1 $core] queue]
  50. set qE2C [[$ns link $e2 $core] queue]
  51. set qCE1 [[$ns link $core $e1] queue]
  52. set qCE2 [[$ns link $core $e2] queue]
  53. # Set DS RED parameters from Edge1 to Core:
  54. $qE1C meanPktSize $packetSize
  55. $qE1C set numQueues_ 1
  56. $qE1C setNumPrec 2
  57. $qE1C addPolicyEntry [$s1 id] [$dest id] TokenBucket 20 $cir0 $cbs0
  58. $qE1C addPolicyEntry [$s2 id] [$dest id] TokenBucket 10 $cir1 $cbs1
  59. $qE1C addPolicerEntry TokenBucket 10 11
  60. $qE1C addPolicerEntry TokenBucket 20 21
  61. $qE1C addPHBEntry 10 0 0
  62. $qE1C addPHBEntry 11 0 1
  63. $qE1C addPHBEntry 20 0 0
  64. $qE1C addPHBEntry 21 0 1
  65. $qE1C configQ 0 0 20 40 0.02
  66. $qE1C configQ 0 1 10 20 0.10
  67. # Set DS RED parameters from Edge2 to Core:
  68. $qE2C meanPktSize $packetSize
  69. $qE2C set numQueues_ 1
  70. $qE2C setNumPrec 2
  71. $qE2C addPolicyEntry [$dest id] [$s1 id] TokenBucket 20 $cir0 $cbs0
  72. $qE2C addPolicyEntry [$dest id] [$s2 id] TokenBucket 10 $cir1 $cbs1
  73. $qE2C addPolicerEntry TokenBucket 10 11
  74. $qE2C addPHBEntry 10 0 0
  75. $qE2C addPHBEntry 11 0 1
  76. $qE2C addPHBEntry 20 0 0
  77. $qE2C addPHBEntry 21 0 1
  78. $qE2C configQ 0 0 20 40 0.02
  79. $qE2C configQ 0 1 10 20 0.10
  80. # Set DS RED parameters from Core to Edge1:
  81. $qCE1 meanPktSize $packetSize
  82. $qCE1 set numQueues_ 1
  83. $qCE1 setNumPrec 2
  84. $qCE1 addPHBEntry 10 0 0
  85. $qCE1 addPHBEntry 11 0 1
  86. $qCE1 addPHBEntry 20 0 0
  87. $qCE1 addPHBEntry 21 0 1
  88. $qCE1 configQ 0 0 20 40 0.02
  89. $qCE1 configQ 0 1 10 20 0.10
  90. # Set DS RED parameters from Core to Edge2:
  91. $qCE2 setSchedularMode WIRR
  92. $qCE2 addQueueWeights 0 3
  93. $qCE2 addQueueWeights 1 7
  94. $qCE2 meanPktSize $packetSize
  95. $qCE2 set numQueues_ 2
  96. $qCE2 setNumPrec 2
  97. $qCE2 addPHBEntry 10 0 0
  98. $qCE2 addPHBEntry 11 0 1
  99. $qCE2 addPHBEntry 20 1 0
  100. $qCE2 addPHBEntry 21 1 1
  101. $qCE2 configQ 0 0 20 40 0.02
  102. $qCE2 configQ 0 1 10 20 0.10
  103. $qCE2 configQ 1 0 20 40 0.02
  104. $qCE2 configQ 1 1 10 20 0.10
  105. # Set up one CBR connection between each source and the destination:
  106. set udp0 [new Agent/UDP]
  107. $ns attach-agent $s1 $udp0
  108. set cbr0 [new Application/Traffic/CBR]
  109. $cbr0 attach-agent $udp0
  110. $cbr0 set packet_size_ $packetSize
  111. $udp0 set packetSize_ $packetSize
  112. $cbr0 set rate_ $rate0
  113. set null0 [new Agent/Null]
  114. $ns attach-agent $dest $null0
  115. $ns connect $udp0 $null0
  116. set udp1 [new Agent/UDP]
  117. $ns attach-agent $s2 $udp1
  118. set cbr1 [new Application/Traffic/CBR]
  119. $cbr1 attach-agent $udp1
  120. $cbr1 set packet_size_ $packetSize
  121. $udp1 set packetSize_ $packetSize
  122. $cbr1 set rate_ $rate1
  123. set null1 [new Agent/Null]
  124. $ns attach-agent $dest $null1
  125. $ns connect $udp1 $null1
  126. proc finish {} {
  127.     global ns 
  128.     exit 0
  129. }
  130. $qE1C printPolicyTable
  131. $qE1C printPolicerTable
  132. $ns at 0.0 "$cbr0 start"
  133. $ns at 0.0 "$cbr1 start"
  134. $ns at 20.0 "$qCE2 printStats"
  135. $ns at 40.0 "$qCE2 printStats"
  136. $ns at 60.0 "$qCE2 printStats"
  137. $ns at 80.0 "$qCE2 printStats"
  138. $ns at $testTime "$cbr0 stop"
  139. $ns at $testTime "$cbr1 stop"
  140. $ns at [expr $testTime + 1.0] "finish"
  141. $ns run