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

通讯编程

开发平台:

Visual C++

  1. # Pragmatic General Multicast (PGM), Reliable Multicast
  2. #
  3. # Example script to demonstrate the capabilities of the PGM implementation.
  4. #
  5. # This is a binary tree with one sender and several receivers at the leaf
  6. # nodes.
  7. #
  8. # Ryan S. Barnett, 2001
  9. # rbarnett@catarina.usc.edu
  10. set ns [new Simulator -multicast on]
  11. $ns node-config -PGM ON
  12. $ns namtrace-all [open out.nam w]
  13. $ns color 0 red
  14. $ns color 1 black
  15. $ns color 2 white
  16. $ns color 3 blue
  17. $ns color 4 yellow
  18. $ns color 5 LightBlue
  19. $ns color 6 green
  20. $ns color 7 magenta
  21. $ns color 8 orange
  22. set height 3
  23. set nodeNum [expr 1 << $height]
  24. set linkNum [expr $nodeNum - 1]
  25. set rcvrNum [expr 1 << [expr $height - 1]]
  26. puts "Height $height nodes $nodeNum rcvrs $rcvrNum"
  27. set colors { red black white blue yellow LightBlue green magenta orange }
  28. #
  29. # Create multicast group
  30. #
  31. set group [Node allocaddr]
  32. puts "Group addr: $group"
  33. # Create source node.
  34. set n(0) [$ns node]
  35. $n(0) shape "circle"
  36. $n(0) color "red"
  37. #
  38. # Create nodes
  39. #
  40. for {set k 1} {$k < $rcvrNum} {incr k} {
  41.         set n($k) [$ns node]
  42.         $n($k) shape "circle"
  43. }
  44. for {set k $rcvrNum} {$k < $nodeNum} {incr k} {
  45.         set n($k) [$ns node]
  46.         $n($k) shape "circle"
  47.         $n($k) color "blue"
  48. }
  49. #set n(16) [$ns node]
  50. #$n(16) shape "circle"
  51. #$n(16) color "blue"
  52. #set n(17) [$ns node]
  53. #$n(17) shape "circle"
  54. #$n(17) color "blue"
  55. proc makelinks { bw delay pairs } {
  56.         global ns n
  57.         foreach p $pairs {
  58.                 set src $n([lindex $p 0])
  59.                 set dst $n([lindex $p 1])
  60.                 $ns duplex-link $src $dst $bw $delay DropTail
  61.         }
  62. }
  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. }
  72. #
  73. #Set routing protocol
  74. #
  75. set mproto DM
  76. set mrthandle [$ns mrtproto $mproto {}]
  77. #
  78. # Create loss modules - Cycle is 10,
  79. # loss module i drops (i*5)th packet in the cycle
  80. #
  81. for {set i 0} {$i <= $linkNum} {incr i} {
  82.        set loss_module($i) [new PGMErrorModel]
  83.        # Drop second ODATA packet every 10 packets.
  84.        $loss_module($i) drop-packet ODATA 10 2
  85.        $loss_module($i) drop-target [$ns set nullAgent_]
  86. }
  87. proc insert-loss pairs {
  88.         global ns n loss_module
  89.         set i 0
  90.         foreach p $pairs {
  91.                 set src $n([lindex $p 0])
  92.                 set dst $n([lindex $p 1])
  93.                 $ns lossmodel $loss_module($i) $src $dst
  94.                 incr i
  95.         }
  96. }
  97. #
  98. # Insert a loss module
  99. #
  100. insert-loss {
  101.     { 2 4 }
  102.     { 2 5 }
  103. }
  104. #
  105. # Create Sender
  106. #
  107. set src [new Agent/PGM/Sender]
  108. $ns attach-agent $n(0) $src
  109. $src set dst_addr_ $group
  110. $src set dst_port_ 0
  111. # Attach data source to sender.
  112. set cbr [new Application/Traffic/CBR]
  113. $cbr attach-agent $src
  114. $cbr set rate_ 448Kb
  115. $cbr set packetSize_ 210
  116. $cbr set random_ 0
  117. #
  118. # Create PGM receivers
  119. #
  120. set i $rcvrNum
  121. for {set k 0} {$k < $rcvrNum} {incr k} {
  122.         set rcv($k) [new Agent/PGM/Receiver]
  123.         $ns attach-agent $n($i) $rcv($k)
  124.         $ns at 0.01 "$n($i) join-group $rcv($k) $group"
  125.         incr i
  126. }
  127. #set rcv(8) [new Agent/PGM/Receiver]
  128. #$ns attach-agent $n(16) $rcv(8)
  129. #$ns at 0.01 "$n(16) join-group $rcv(8) $group"
  130. #set rcv(9) [new Agent/PGM/Receiver]
  131. #$ns attach-agent $n(17) $rcv(9)
  132. #$ns at 0.01 "$n(17) join-group $rcv(9) $group"
  133. # Set Node-2 PGM Agent to be disabled, only multicast.
  134. #set agent2 [$n(2) get-pgm]
  135. #$agent2 set pgm_enabled_ 0
  136. #set agent4 [$n(4) get-pgm]
  137. #$agent4 set pgm_enabled_ 0
  138. $ns at 0.3 "$src start-SPM"
  139. $ns at 0.5 "$cbr start"
  140. $ns at 1.5 "$cbr stop"
  141. $ns at 2.0 "$src stop-SPM"
  142. $ns at 2.0 "finish"
  143. proc finish {} {
  144.     global ns src rcv rcvrNum nodeNum n
  145.     $src print-stats
  146. # Print statistics for each PGM Agent.
  147.     for {set k 0} {$k < $nodeNum} {incr k} {
  148. set pgm_agent [$n($k) get-pgm]
  149. $pgm_agent print-stats
  150.     }
  151. # Print statistics for each receiver.
  152.     for {set k 0} {$k < $rcvrNum} {incr k} {
  153. $rcv($k) print-stats
  154.     }
  155. #$rcv(1) print-all-stats
  156.     puts "Simulation Finished"
  157. #       puts "Starting Nam.."
  158. #       exec nam out.nam &
  159.     exit 0
  160. }
  161. $ns run