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

通讯编程

开发平台:

Visual C++

  1. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/simple-plm.tcl,v 1.2 2000/07/27 00:53:14 haoboy Exp $
  2. #choose your scenario
  3. set scenario 0
  4. set packetSize 500
  5. set runtime 100
  6. set plm_debug_flag 2
  7. set rates "20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3"
  8. set level [llength $rates]
  9. set rates_cum [calc_cum $rates]
  10. puts stderr $rates_cum
  11. set run_nam 1
  12. set Queue_sched_ FQ
  13. set PP_burst_length 2
  14. set PP_estimation_length 3
  15. Queue/DropTail set limit_ 20
  16. Class Scenario0 -superclass PLMTopology
  17. #this scenario shows the convergence of a single plm session 
  18. #on a heterogeneous topology
  19. Scenario0 instproc init args {
  20. #Create the following topology
  21. #             _____ R1
  22. #            /256kb   ____R4
  23. #      1Mb  /        / 56Kb
  24. #   S------N1-------N2------R2
  25. #            128kb    250kb
  26. #                     
  27.         #                 64kb 
  28. #                       N3____R3
  29. #                         10Mb
  30. #
  31.     eval $self next $args
  32.     $self instvar ns node
  33.     
  34.     $self build_link 0 1 10ms  1e6
  35.     $self build_link 1 2 50ms  256e3
  36.     $self build_link 1 3 100ms  128e3
  37.     $self build_link 3 4 50ms 250e3
  38.     $self build_link 3 5 30ms 56e3
  39.     $self build_link 3 6 30ms 64e3
  40.     $self build_link 6 7 5ms 10e6
  41.     $ns duplex-link-op $node(0) $node(1) orient right
  42.     $ns duplex-link-op $node(1) $node(2) orient right
  43.     $ns duplex-link-op $node(1) $node(3) orient right-down
  44.     $ns duplex-link-op $node(3) $node(4) orient right
  45.     $ns duplex-link-op $node(3) $node(5) orient right-up
  46.     $ns duplex-link-op $node(3) $node(6) orient  right-down
  47.     $ns duplex-link-op $node(6) $node(7) orient  right
  48.     
  49.     $ns duplex-link-op $node(0) $node(1) queuePos 0.5
  50.     $ns duplex-link-op $node(1) $node(2) queuePos 0.5
  51.     $ns duplex-link-op $node(1) $node(3) queuePos 0.5
  52.     $ns duplex-link-op $node(3) $node(4) queuePos 0.5
  53.     $ns duplex-link-op $node(3) $node(5) queuePos 0.5
  54.     $ns duplex-link-op $node(3) $node(6) queuePos 0.5
  55.     $ns duplex-link-op $node(6) $node(7) queuePos 0.5
  56.     set addr [$self place_source 0 3]
  57.     puts stderr "sender placed"
  58.     set tm 10
  59.     set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]
  60.     $self place_receiver 2 $addr $time 1
  61.     set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]
  62.     $self place_receiver 4 $addr $time 1
  63.     set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]
  64.     $self place_receiver 6 $addr $time 1
  65.     set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]
  66.     $self place_receiver 7 $addr $time 1
  67.     
  68.     puts stderr "receivers placed"   
  69.     #mcast set up
  70.     DM set PruneTimeout 1000
  71.     set mproto DM
  72.     set mrthandle [$ns mrtproto $mproto {} ]
  73. }
  74. Class Scenario1 -superclass PLMTopology
  75. #this simple scenario shows the influence of the number of
  76. #receivers for a single plm session on a star topology.
  77. Scenario1 instproc init args {
  78.     eval $self next $args
  79.     $self instvar ns node
  80.     
  81.     set nb_recv 20
  82.     $self build_link 0 1 20ms 256e3
  83.     for {set i 2} {$i<=[expr $nb_recv + 1]} {incr i} {
  84. set delay [uniform 5 150]ms
  85. set bp [uniform 500e3 1e6]
  86. puts stderr "$delay $bp"
  87. $self build_link 1 $i $delay  $bp
  88.     }
  89.     set addr [$self place_source 0 3]
  90.     puts stderr "sender placed"
  91.     set check_estimate 1
  92.     for {set i 2} {$i<=[expr $nb_recv + 1]} {incr i} {
  93. set time 5
  94. $self place_receiver $i $addr $time $check_estimate
  95.     }
  96.     
  97.     puts stderr "receivers placed"   
  98.     #mcast set up
  99.     DM set PruneTimeout 1000
  100.     set mproto DM
  101.     set mrthandle [$ns mrtproto $mproto {} ]
  102. }
  103. Class Scenario2 -superclass PLMTopology
  104. #this scenario shows the effect of an increasing number of plm
  105. #session, and the effect of variable bottleneck (simulated by a CBR flow)
  106. Scenario2 instproc init args {
  107.     eval $self next $args
  108.     $self instvar ns node
  109.     global f
  110.     
  111.     set nb_plm 3
  112.     set nb_cbr 3
  113.     set nb_src [expr $nb_plm + $nb_cbr]
  114.     #puts $f "param $nb_plm $nb_cbr"
  115.    
  116.     $self build_link 0 1 20ms [expr 200e3 * $nb_plm]
  117.     $ns duplex-link-op $node(0) $node(1) queuePos 0.5
  118.   
  119.     for {set i 2} {$i<=[expr $nb_src + 1]} {incr i} {
  120. set delay 5ms 
  121. set bp 10e6
  122. puts stderr "$delay $bp"
  123. $self build_link $i 0 $delay  $bp
  124.     }
  125.     for {set i [expr $nb_src + 2]} {$i<=[expr 2 * $nb_src + 1]} {incr i} {
  126. set delay 5ms 
  127. set bp 10e6
  128. puts stderr "$delay $bp"
  129. $self build_link 1 $i $delay  $bp
  130.     }
  131.     for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {
  132. set addr($i) [$self place_source $i 3]
  133.     }
  134.     puts stderr "sender placed"
  135.     set check_estimate 1
  136.     for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {
  137. set time [expr 10 * ($i - 1)]
  138. $self place_receiver [expr $i + $nb_src] $addr($i) $time $check_estimate
  139.     }
  140.     for {set i 1} {$i<=$nb_cbr} {incr i} {
  141. set null($i) [new Agent/Null]
  142. set udp($i) [new Agent/UDP]
  143. $udp($i) set fid_ [expr $i + $nb_plm]
  144. $ns attach-agent $node([expr $i + $nb_plm + 1]) $udp($i)
  145. $ns attach-agent $node([expr $i + $nb_plm + $nb_src + 1]) $null($i)
  146. $ns connect $udp($i) $null($i)
  147. set cbr($i) [new Application/Traffic/CBR]
  148. $cbr($i) attach-agent $udp($i)
  149. $cbr($i) set random_ 0
  150. $cbr($i) set rate_ 500kb
  151. $ns at [expr 10 * $nb_plm + 10] "$cbr($i) start"
  152. $ns at [expr 10 * $nb_plm + 30] "$cbr($i) stop"
  153.     }
  154.     puts stderr "receivers placed"  
  155.     
  156.     
  157.     #mcast set up
  158.     DM set PruneTimeout 1000
  159.     set mproto DM
  160.     set mrthandle [$ns mrtproto $mproto {} ]
  161. }
  162. Class Scenario3 -superclass PLMTopology
  163. #evaluate the behavior of a mix of plm and tcp flows
  164. Scenario3 instproc init args {
  165.     eval $self next $args
  166.     $self instvar ns node
  167.     global f
  168.     
  169.     Agent/TCP set window_ 4000
  170.     set nb_tcp 2
  171.     set nb_plm 1
  172.     set nb_src [expr $nb_tcp + $nb_plm]
  173.     #puts $f "param $nb_plm $nb_tcp"
  174.     $self build_link 0 1 20ms [expr $nb_src * 100e3]
  175.     $ns duplex-link-op $node(0) $node(1) queuePos 0.5
  176.     for {set i 2} {$i<=[expr $nb_src + 1]} {incr i} {
  177. set delay 5ms
  178. set bp 10e6
  179. puts stderr "$delay $bp"
  180. $self build_link $i 0 $delay  $bp
  181.     }
  182.     for {set i [expr $nb_src + 2]} {$i<=[expr 2 * $nb_src + 1]} {incr i} {
  183. set delay 5ms
  184. set bp 10e6
  185. puts stderr "$delay $bp"
  186. $self build_link 1 $i $delay  $bp
  187.     }
  188.     for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {
  189. set addr($i) [$self place_source $i 3]
  190.     }
  191.     puts stderr "sender placed"
  192.     set check_estimate 1
  193.     for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {
  194. set time 20
  195. $self place_receiver [expr $i + $nb_src] $addr($i) $time $check_estimate
  196.     }
  197.     Agent/TCP set packetSize_ 500
  198.     for {set i 1} {$i<=$nb_tcp} {incr i} {
  199. set sink($i) [new Agent/TCPSink]
  200. set tcp($i) [new Agent/TCP/Reno]
  201. $tcp($i) set fid_ [expr $i + $nb_plm]
  202. $ns attach-agent $node([expr $i + $nb_plm + 1]) $tcp($i)
  203. $ns attach-agent $node([expr $i + $nb_plm + $nb_src + 1]) $sink($i)
  204. $ns connect $tcp($i) $sink($i)
  205. set ftp($i) [new Application/FTP]
  206. $ftp($i) attach-agent $tcp($i)
  207.         switch $i {
  208.             1 {$ns at 0 "$ftp($i) start"}
  209.             2 {$ns at 60 "$ftp($i) start"}
  210.         }
  211.     }
  212.     puts stderr "receivers placed"  
  213. #mcast set up
  214. DM set PruneTimeout 1000
  215. set mproto DM
  216. set mrthandle [$ns mrtproto $mproto {} ]
  217. }
  218. Simulator instproc finish {} {
  219.     global   run_nam
  220.     
  221.     puts finish
  222.     if {$run_nam} {
  223. puts "running nam..."
  224. exec nam -g 600x700 -f dynamic-nam.conf out.nam &
  225.     }
  226.     
  227.     exit 0
  228. }
  229. Simulator instproc tick {} {
  230. puts stderr [$self now]
  231. $self at [expr [$self now] + 10.] "$self tick"
  232. }
  233. set ns [new Simulator -multicast on]
  234. $ns multicast
  235. $ns color 1 blue
  236. $ns color 2 green
  237. $ns color 3 red
  238. $ns color 4 white
  239. # prunes, grafts
  240. $ns color 30 orange
  241. $ns color 31 yellow
  242. #set f [open out.tr w]
  243. #$ns trace-all $f
  244. $ns namtrace-all [open out.nam w]
  245. $ns tick
  246. set scn [new Scenario$scenario $ns]
  247. $ns at [expr $runtime +1] "$ns finish"
  248. $ns run