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

通讯编程

开发平台:

Visual C++

  1. # Correlated and Uncorrelated Loss Scenario:
  2. # Topology:
  3. #           0 0 Source
  4. #             |
  5. #           1 0 
  6. #            / 
  7. #           /   
  8. #       2  0   3 0 
  9. #         /      
  10. #      4 0 5 0   6 0
  11. #       R1   R2    R3
  12. #
  13. # Simulation A : All links have 1Mbps BW. There is 10% loss in link 0-1
  14. # No loss in other links.
  15. # Simulation B: Similar to setup of A except that 10% loss now takes 
  16. # place in links 1-2 and 1-3. No loss in other links. 
  17. # Simulation C: 10% loss in link 1-3. and 5% loss in link 1-2. No 
  18. # loss in other links. 
  19. # Flow monitors measure thruput at link 2-4, 2-5 and 3-6.
  20. #usage: ns rmcc-1.tcl -test <#test no>
  21. #test number options: 1,2, 3 or 4
  22. source ../../mcast/srm-nam.tcl ;#to separate control messages
  23. source rmcc.tcl
  24. ScenLib/RM instproc make_topo1 { at } {
  25.     global ns n prog t
  26.     $self make_nodes 7
  27.     #color them
  28.     $n(0) color "red"
  29.     $n(4) color "orchid"
  30.     $n(5) color "orchid"
  31.     $n(6) color "orchid"
  32.     
  33.     #now setup topology
  34.     $ns duplex-link $n(0) $n(1) 1Mb 10ms DropTail
  35.     $ns duplex-link $n(1) $n(2) 1Mb 10ms DropTail
  36.     $ns duplex-link $n(1) $n(3) 1Mb 10ms DropTail
  37.     $ns duplex-link $n(2) $n(4) 1Mb 10ms DropTail
  38.     $ns duplex-link $n(2) $n(5) 1Mb 10ms DropTail
  39.     $ns duplex-link $n(3) $n(6) 1Mb 10ms DropTail
  40.     
  41.     $ns duplex-link-op $n(0) $n(1) orient down
  42.     $ns duplex-link-op $n(1) $n(2) orient left-down
  43.     $ns duplex-link-op $n(1) $n(3) orient right-down
  44.     $ns duplex-link-op $n(2) $n(4) orient left-down
  45.     $ns duplex-link-op $n(2) $n(5) orient right-down
  46.     $ns duplex-link-op $n(3) $n(6) orient right-down
  47.     
  48.     $self make_flowmon $at $n(2) $n(4) flowStats_2_4.$t 
  49.     $n(2) $n(5) flowStats_2_5.$t 
  50.     $n(3) $n(6) flowStats_3_6.$t
  51.     # $self make_flowmon $n(2) $n(5) flowStats_2_5.$t
  52.     # $self make_flowmon $n(3) $n(6) flowStats_3_6.$t
  53. }
  54. #ScenLib/RM instproc setup_mcast {} {
  55.  #   global ns n opts srmStats srmEvents
  56.     # mproto options : 5
  57.     # CtrMcast, DM, detailedDM, dynamicDM, pimDM
  58.   #  set mrthandle [$ns mrtproto $opts(routingProto) {}]
  59.     
  60.    # set fid 0
  61.    # set dest [Node allocaddr]
  62.    # $ns at 0.3 "$mrthandle switch-treetype $dest"
  63.     
  64.    # set src [new Agent/$opts(srmSimType)]
  65.    # $src set dst_ $dest
  66.    # $src set fid_ [incr fid]
  67.    # $src trace $srmEvents
  68.    # $src log $srmStats
  69.    # $ns at 1.0 "$src start"
  70.    # $ns attach-agent $n(0) $src
  71.     
  72.    # for {set i 4} {$i < 7} {incr i} {
  73. # set rcvr($i) [new Agent/$opts(srmSimType)]
  74. # $rcvr($i) set dst_ $dest
  75. # $rcvr($i) set fid_ [incr fid]
  76. # $rcvr($i) trace $srmEvents
  77. # $rcvr($i) log $srmStats
  78. # $ns attach-agent $n($i) $rcvr($i)
  79. # $ns at 1.0 "$rcvr($i) start"
  80. #    }
  81.     
  82.     #setup source
  83.  #   set cbr [new Agent/CBR]
  84.  #   $cbr set packetSize_ 1000
  85.  #   $src traffic-source $cbr
  86.  #   $src set packetSize_ 1000  ;#so repairs are correct
  87.  #   $cbr set fid_ 0
  88.  #   $ns at 3.0 "$src start-source"
  89. #}
  90. #ScenLib/RM instproc attach-tcp {} {
  91.  #   global ns n
  92.     #Attach a TCP flow between src and recvr1
  93.  #   set tcp [new Agent/TCP]
  94.  #   $tcp set fid_ 2
  95.  #   $tcp set packetSize_ 1000
  96.  #   $ns attach-agent $n(0) $tcp
  97.     
  98.  #   set sink [new Agent/TCPSink]
  99.  #   $ns attach-agent $n(4) $sink
  100.  #   $ns connect $tcp $sink
  101.     
  102.  #   set ftp [new Application/FTP]
  103.  #   $ftp attach-agent $tcp
  104.  #   $ns at 1.5 "$ftp start"
  105.     
  106. #}
  107. proc test {num } {
  108.     global ns n prog
  109.     puts "running test$num"
  110.     set test_scen [new ScenLib/RM]
  111.     switch $num {
  112. "1" { 
  113.     $test_scen make_topo1 6.0
  114.     $test_scen create_mcast 0 0.3 1.0 3.0 4 5 6 
  115.     $test_scen loss-model-case1 2.52 0 1
  116.     #$ns at 6.0 "$flowmon dump"
  117.     $ns at 6.0 "finish" 
  118. }
  119. "2" {
  120.     $test_scen make_topo1 12.0
  121.     $test_scen create_mcast 0 0.3 1.0 3.0 4 5 6
  122.     $test_scen loss-model-case2 2.52 2.52 1 2 1 3
  123.     #$ns at 12.0 "$flowmon dump"
  124.     $ns at 12.0 "finish"
  125. }
  126. "3" {
  127.     $test_scen make_topo1 18.0
  128.     $test_scen create_mcast 0 0.3 1.0 3.0 4 5 6
  129.     $test_scen loss-model-case3 2.52 2.52 1 2 1 3
  130.     #$ns at 18.0 "$flowmon dump"
  131.     $ns at 18.0 "finish"
  132. }
  133. default {
  134.     puts "Unknown test number $num"
  135.     usage $prog
  136. }
  137.     }
  138.     $test_scen create_tcp 0 4 1.5
  139.     $ns run
  140. }
  141. global argv prog mflag
  142. set mflag 0
  143. if [string match {*.tcl} $argv0] {
  144.     set prog [string range $argv0 0 [expr [string length $argv0] - 5]]
  145. } else {
  146.     set prog $argv0
  147. }
  148. if {[llength $argv] < 1} {
  149.     puts "Insufficient number of arguments"
  150.     usage $prog
  151. }
  152. global opts t
  153. process_args $argv
  154. set t $prog.$opts(test)
  155. test $opts(test)