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

通讯编程

开发平台:

Visual C++

  1. # Pragmatic General Multicast (PGM), Reliable Multicast
  2. #
  3. # Example to demonstrate constrained RDATA forwarding and NAK anticipation.
  4. #
  5. # Ryan S. Barnett, 2001
  6. # rbarnett@catarina.usc.edu
  7. set ns [new Simulator -multicast on]
  8. $ns node-config -PGM ON
  9. $ns namtrace-all [open out.nam w]
  10. $ns color 0 red
  11. $ns color 1 black
  12. $ns color 2 white
  13. $ns color 3 blue
  14. $ns color 4 yellow
  15. $ns color 5 LightBlue
  16. $ns color 6 green
  17. $ns color 7 magenta
  18. $ns color 8 orange
  19. set colors { red black white blue yellow LightBlue green magenta orange }
  20. set group [Node allocaddr]
  21. puts "Group addr: $group"
  22. proc makelinks { bw delay pairs } {
  23.         global ns n
  24.         foreach p $pairs {
  25.                 set src $n([lindex $p 0])
  26.                 set dst $n([lindex $p 1])
  27.                 $ns duplex-link $src $dst $bw $delay DropTail
  28.         }
  29. }
  30. proc disable-pgm { pairs } {
  31.     global n
  32.     foreach p $pairs {
  33. set agent [$n($p) get-pgm]
  34. $agent set pgm_enabled_ 0
  35.     }
  36. }
  37. proc create-receiver {rcv i group} {
  38.    upvar $rcv r
  39.    global ns n
  40.    set r [new Agent/PGM/Receiver]
  41.    $r set nak_bo_ivl_ 100ms
  42.    $ns attach-agent $n($i) $r
  43.    $ns at 0.01 "$n($i) join-group $r $group"
  44.    $n($i) color "blue"
  45. }
  46. # Create nodes.
  47. for {set k 0} { $k < 12 } { incr k } {
  48.     set n($k) [$ns node]
  49.     $n($k) shape "circle"
  50.     $n($k) color "green"
  51. }
  52. # Create topology.
  53. #lappend lanlist1 $n(2)
  54. #lappend lanlist1 $n(5)
  55. #lappend lanlist1 $n(6)
  56. #lappend lanlist1 $n(7)
  57. #set lan1 [$ns newLan $lanlist1 10Mb 2ms]
  58. #lappend lanlist2 $n(3)
  59. #lappend lanlist2 $n(9)
  60. #lappend lanlist2 $n(10)
  61. #lappend lanlist2 $n(11)
  62. #set lan2 [$ns newLan $lanlist2 10Mb 2ms]
  63. makelinks 1.5Mb 10ms {
  64.     { 0 1 }
  65.     { 1 2 }
  66.     { 1 3 }
  67.     { 2 4 }
  68.     { 2 5 }
  69.     { 3 6 }
  70.     { 3 7 }
  71.     { 5 8 }
  72.     { 5 9 }
  73.     { 7 10 }
  74.     { 7 11 }
  75. }
  76. $ns duplex-link-op $n(2) $n(5) color "red"
  77. $ns duplex-link-op $n(1) $n(3) color "red"
  78. # Set routing protocol.
  79. set mproto DM
  80. set mrthandle [$ns mrtproto $mproto {}]
  81. # Create sender.
  82. set src0 [new Agent/PGM/Sender]
  83. $ns attach-agent $n(0) $src0
  84. $src0 set dst_addr_ $group
  85. $src0 set dst_port_ 0
  86. $src0 set set rdata_delay_ 40ms
  87. set cbr0 [new Application/Traffic/CBR]
  88. $cbr0 attach-agent $src0
  89. $cbr0 set rate_ 448Kb
  90. $cbr0 set packetSize_ 210
  91. $cbr0 set random_ 0
  92. $n(0) color "magenta"
  93. # Create receivers.
  94. create-receiver rcv4 4 $group
  95. create-receiver rcv6 6 $group
  96. create-receiver rcv8 8 $group
  97. create-receiver rcv9 9 $group
  98. create-receiver rcv10 10 $group
  99. create-receiver rcv11 11 $group
  100. $rcv6 set nak_bo_ivl_ 10ms
  101. $rcv8 set nak_bo_ivl_ 30ms
  102. $rcv9 set nak_bo_ivl_ 30ms
  103. # Disable Agent/PGM on receivers.
  104. disable-pgm { 4 6 8 9 10 11 }
  105. # Disable Agent/PGM on sender.
  106. disable-pgm { 0 }
  107. # Disable Agent/PGM on Node 3.
  108. disable-pgm { 3 }
  109. $n(3) color "black"
  110. # Create a lossy link between 2 and 5.
  111. set loss_module1 [new PGMErrorModel]
  112. # Drop the third ODATA packet going through this link.
  113. $loss_module1 drop-packet ODATA 50 3
  114. $loss_module1 drop-target [$ns set nullAgent_]
  115. $ns lossmodel $loss_module1 $n(2) $n(5)
  116. # Create a lossy link between 1 and 3.
  117. set loss_module2 [new PGMErrorModel]
  118. # Drop the fifth ODATA packet going through this link.
  119. $loss_module2 drop-packet ODATA 50 5
  120. $loss_module2 drop-target [$ns set nullAgent_]
  121. $ns lossmodel $loss_module2 $n(1) $n(3)
  122. $ns at 0.2 "$src0 start-SPM"
  123. $ns at 0.25 "$cbr0 start"
  124. $ns at 0.5 "$cbr0 stop"
  125. $ns at 0.55 "$src0 stop-SPM"
  126. $ns at 0.7 "finish"
  127. proc finish {} {
  128.     exit 0
  129. }
  130. $ns run