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

通讯编程

开发平台:

Visual C++

  1. # Pragmatic General Multicast (PGM), Reliable Multicast
  2. #
  3. # Example to demonstrate multiple senders, and that an Agent/PGM can also
  4. # act as an Agent/PGM/Receiver.
  5. #
  6. # This is a random topology with two senders and several receivers in
  7. # two multicast groups.  The topology can be found in the file r10-0.tcl.
  8. #
  9. # Ryan S. Barnett, 2001
  10. # rbarnett@catarina.usc.edu
  11. set ns [new Simulator -multicast on]
  12. $ns node-config -PGM ON
  13. $ns namtrace-all [open out.nam w]
  14. $ns color 0 red
  15. $ns color 1 black
  16. $ns color 2 white
  17. $ns color 3 blue
  18. $ns color 4 yellow
  19. $ns color 5 LightBlue
  20. $ns color 6 green
  21. $ns color 7 magenta
  22. $ns color 8 orange
  23. set colors { red black white blue yellow LightBlue green magenta orange }
  24. # Used to provide backward compatability with older version of ns.
  25. Simulator instproc duplex-link-of-interfaces {args} {
  26.   # Extract arguments.
  27.   set n1 [lindex $args 0]
  28.   set n2 [lindex $args 1]
  29.   set BW [lindex $args 2]
  30.   set delay [lindex $args 3]
  31.   set queue [lindex $args 4]
  32.   # Execute correct link instruction.
  33.   $self duplex-link $n1 $n2 $BW $delay $queue
  34. }
  35. source r10-0.tcl
  36. set verbose 0
  37. # Create the network topology.
  38. create-nodes ns n
  39. create-links ns n 1.5Mb
  40. for {set k 0} { $k < 10 } { incr k } {
  41.     $n($k) color "green"
  42. }
  43. # Create two multicast groups.
  44. set group1 [Node allocaddr]
  45. puts "Group1 addr: $group1"
  46. set group2 [Node allocaddr]
  47. puts "Group2 addr: $group2"
  48. #
  49. #Set routing protocol
  50. #
  51. set mproto DM
  52. set mrthandle [$ns mrtproto $mproto {}]
  53. set loss_module1 [new PGMErrorModel]
  54. $loss_module1 drop-packet ODATA 10 2
  55. $loss_module1 drop-target [$ns set nullAgent_]
  56. $ns lossmodel $loss_module1 $n(0) $n(9)
  57. $ns duplex-link-op $n(0) $n(9) color "red"
  58. set loss_module2 [new PGMErrorModel]
  59. # Drop the second ODATA packet that crosses this link every 10th cycle.
  60. $loss_module2 drop-packet ODATA 10 2
  61. $loss_module2 drop-target [$ns set nullAgent_]
  62. $ns lossmodel $loss_module2 $n(2) $n(6)
  63. $ns duplex-link-op $n(2) $n(6) color "red"
  64. #
  65. # Create Sender
  66. #
  67. set src1 [new Agent/PGM/Sender]
  68. $ns attach-agent $n(2) $src1
  69. $src1 set dst_addr_ $group1
  70. $src1 set dst_port_ 0
  71. $src1 set rdata_delay_ 40ms
  72. $src1 set spm_interval_ 75ms
  73. $n(2) color "magenta"
  74. # Attach data source to sender.
  75. set cbr1 [new Application/Traffic/CBR]
  76. $cbr1 attach-agent $src1
  77. $cbr1 set rate_ 448Kb
  78. $cbr1 set packetSize_ 210
  79. $cbr1 set random_ 0
  80. set src2 [new Agent/PGM/Sender]
  81. $ns attach-agent $n(8) $src2
  82. $src2 set dst_addr_ $group2
  83. $src2 set dst_port_ 0
  84. $src2 set rdata_delay_ 40ms
  85. $src2 set spm_interval_ 75ms
  86. $n(8) color "magenta"
  87. # Attach data source to sender.
  88. set cbr2 [new Application/Traffic/CBR]
  89. $cbr2 attach-agent $src2
  90. $cbr2 set rate_ 448Kb
  91. $cbr2 set packetSize_ 210
  92. $cbr2 set random_ 0
  93. proc create-receiver {rcv i group} {
  94.    upvar $rcv r
  95.    global ns n
  96.    set r [new Agent/PGM/Receiver]
  97.    $ns attach-agent $n($i) $r
  98.    $ns at 0.01 "$n($i) join-group $r $group"
  99.    $n($i) color "blue"
  100. }
  101. #
  102. # Create PGM receivers
  103. #
  104. create-receiver rcv1 1 $group1
  105. create-receiver rcv5 5 $group1
  106. create-receiver rcv7 7 $group1
  107. create-receiver rcv3 3 $group2
  108. create-receiver rcv4 4 $group2
  109. create-receiver rcv6 6 $group2
  110. $n(3) shape "square"
  111. $n(4) shape "square"
  112. $n(6) shape "square"
  113. $ns at 0.3 "$src1 start-SPM"
  114. $ns at 0.4 "$src2 start-SPM"
  115. $ns at 0.5 "$cbr1 start"
  116. $ns at 0.6 "$cbr2 start"
  117. $ns at 0.9 "$cbr1 stop"
  118. $ns at 1.0 "$cbr2 stop"
  119. $ns at 1.1 "$src1 stop-SPM"
  120. $ns at 1.2 "$src2 stop-SPM"
  121. $ns at 1.5 "finish"
  122. proc finish {} {
  123.     global ns src1 src2 rcv1 rcv5 rcv7 rcv3 rcv4 rcv6 n
  124.     puts "Simulation Finished"
  125.     puts "src1:"
  126.     $src1 print-stats
  127.     puts "agent9:"
  128.     set pgm_agent [$n(9) get-pgm]
  129.     $pgm_agent print-stats
  130.     
  131.     puts "rcv1:"
  132.     $rcv1 print-stats
  133.     puts "rcv5:"
  134.     $rcv5 print-stats
  135.     puts "rcv7:"
  136.     $rcv7 print-stats
  137.     puts "src2:"
  138.     $src2 print-stats
  139.     puts "rcv3:"
  140.     $rcv3 print-stats
  141.     puts "rcv4:"
  142.     $rcv4 print-stats
  143.     puts "rcv6:"
  144.     $rcv6 print-stats
  145. #       puts "Starting Nam.."
  146. #       exec nam out.nam &
  147.     exit 0
  148. }
  149. $ns run