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

通讯编程

开发平台:

Visual C++

  1. #
  2. # A simple example for tcp/srm  
  3. #
  4. #
  5. #
  6. # Create a simple six node topology:
  7. #
  8. #        s1                 s3
  9. #                          /
  10. # 10Mb,2ms   1.5Mb,20ms   / 1.5Mb,10ms
  11. #           r1 --------- r2
  12. # 10Mb,3ms /                10Mb,5ms
  13. #         /                 
  14. #        s2                 s4
  15. #
  16. # updated to use -multicast on and allocaddr by Lloyd Wood
  17. proc build_topology { ns } {
  18.     global node_
  19.     set node_(s1) [$ns node]
  20.     set node_(s2) [$ns node]
  21.     set node_(r1) [$ns node]
  22.     set node_(r2) [$ns node]
  23.     set node_(s3) [$ns node]
  24.     set node_(s4) [$ns node]
  25.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  26.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 3ms DropTail
  27.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  28.     $ns queue-limit $node_(r1) $node_(r2) 10
  29.     $ns queue-limit $node_(r2) $node_(r1) 10
  30.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  31.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  32.  
  33.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  34.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  35.     $ns duplex-link-op $node_(r1) $node_(r2) orient right
  36.     $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0
  37.     $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0
  38.     $ns duplex-link-op $node_(s3) $node_(r2) orient left-down
  39.     $ns duplex-link-op $node_(s4) $node_(r2) orient left-up
  40. }
  41.  
  42. source ../mcast/srm-nam.tcl
  43. set ns [new Simulator -multicast on]
  44. set f [open out.tr w]
  45. $ns trace-all $f
  46. set nf [open out.nam w]
  47. $ns namtrace-all $nf
  48. build_topology $ns
  49. set group [Node allocaddr]
  50. set mh [$ns mrtproto DM {}]
  51. set srmStats [open srmStats.tr w]
  52. set srmEvents [open srmEvents.tr w]
  53. set n(0) $node_(r2)
  54. set n(1) $node_(r1)
  55. set n(2) $node_(s3)
  56. set n(3) $node_(s4)
  57. set fid 0
  58. foreach i [array names n] {
  59.         set srm($i) [new Agent/SRM]
  60.         $srm($i) set dst_addr_ $group
  61.         $srm($i) set dst_port_ 0
  62.         $srm($i) set fid_ [incr fid]
  63.         $srm($i) log $srmStats
  64.         $srm($i) trace $srmEvents
  65.         $ns attach-agent $n($i) $srm($i)
  66. }
  67. # Attach a data source to srm(0)
  68. set packetSize 210
  69. set exp0 [new Application/Traffic/Exponential]
  70. $exp0 set packetSize_ $packetSize
  71. $exp0 set burst_time_ 500ms
  72. $exp0 set idle_time_ 500ms
  73. $exp0 set rate_ 100k
  74. $exp0 attach-agent $srm(0)
  75. $srm(0) set tg_ $exp0
  76. $srm(0) set app_fid_ 0
  77. $srm(0) set packetSize_ $packetSize     ;# so repairs are correct
  78. $ns at 0.0 "$srm(0) start; $srm(0) start-source"
  79. $ns at 1.0 "$srm(1) start"
  80. $ns at 1.1 "$srm(2) start"
  81. $ns at 1.2 "$srm(3) start"
  82. # tcp setup
  83. set redq [[$ns link $node_(r1) $node_(r2)] queue]
  84. $redq set setbit_ true
  85.  
  86. set tcp1 [$ns create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 0]
  87. $tcp1 set window_ 15
  88. $tcp1 set ecn_ 1
  89. #set tcp2 [$ns create-connection TCP/Reno $node_(s2) TCPSink $node_(s1) 1]
  90. #$tcp2 set window_ 15
  91. #$tcp2 set ecn_ 1
  92.  
  93. set ftp1 [$tcp1 attach-app FTP]    
  94. #set ftp2 [$tcp2 attach-app FTP]
  95.  
  96. $ns at 4.0 "$ftp1 start"
  97. #$ns at 0.0 "$ftp2 start"
  98. proc finish src {
  99.         $src stop
  100.  
  101.         global ns srmStats srmEvents
  102.         $ns flush-trace
  103.         #close $f
  104.         #close $nf
  105. close $srmStats
  106.         close $srmEvents
  107.         #XXX
  108.         puts "Filtering ..."
  109. exec tclsh8.0 ../../../nam-1/bin/namfilter.tcl out.nam
  110.         puts "running nam..."
  111.         exec nam out.nam &
  112.         exit 0
  113. }
  114. $ns at 5.0 "finish $exp0"
  115. $ns run