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

通讯编程

开发平台:

Visual C++

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