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

通讯编程

开发平台:

Visual C++

  1. # begin common code
  2. set ftime_ 1.5
  3. proc finish {} {
  4.         global ns nf ofile
  5.         $ns flush-trace
  6.         close $nf
  7.         puts "filtering..."
  8.         exec tclsh ../bin/namfilter.tcl ${ofile}.nam
  9. exec rm -f ${ofile}.de
  10. exec make_dropevents ${ofile}.tr > ${ofile}.de
  11.         puts "running nam..."
  12.         exec nam ${ofile}.nam &
  13.         exit 0
  14. }
  15. set ns [new Simulator]
  16. set f [open ${ofile}.tr w]
  17. $ns trace-all $f
  18. set nf [open ${ofile}.nam w]
  19. $ns namtrace-all $nf
  20. # define color index
  21. $ns color 0 red
  22. $ns color 1 blue
  23. $ns color 2 chocolate
  24. $ns color 3 red
  25. $ns color 4 brown
  26. $ns color 5 tan
  27. $ns color 6 gold
  28. $ns color 7 black
  29. # define nodes
  30. set n0 [$ns node]
  31. $n0 color blue
  32. $n0 shape circle
  33. set n1 [$ns node]
  34. $n1 color blue
  35. $n1 shape circle
  36. set n2 [$ns node]
  37. $n2 color blue
  38. $n2 shape circle
  39. set n3 [$ns node]
  40. $n3 color blue
  41. $n3 shape circle
  42. set router [$ns node]
  43. $router color red
  44. $router shape hexagon
  45. set r2 [$ns node]
  46. $r2 color blue
  47. $r2 shape hexagon
  48. $ns at 0.0 "$n2 label "                                                  link(${L1rate},${L1del}) typ""
  49. $ns at 0.0 "$r2 label "/---(${L2rate},${L2del})                          ""
  50. $ns at 0.0 "$router label "                 Q(${L2qlim},${L2type})""
  51. # define topology
  52. $ns duplex-link $n0 $router $L1rate $L1del $L1type
  53. $ns duplex-link $n2 $router $L1rate $L1del $L1type
  54. $ns duplex-link $router $r2 $L2rate $L2del $L2type
  55. $ns duplex-link $r2 $n1 $L1rate $L1del $L1type
  56. $ns duplex-link $r2 $n3 $L1rate $L1del $L1type
  57. # and orientation
  58. $ns duplex-link-op $n0 $router orient right-down
  59. $ns duplex-link-op $r2 $n1 orient right-up
  60. $ns duplex-link-op $n2 $router orient right-up
  61. $ns duplex-link-op $r2 $n3 orient right-down
  62. $ns duplex-link-op $router $r2 orient right
  63. # queue limitations and nam trace info
  64. $ns queue-limit $router $r2 $L2qlim
  65. $ns simplex-link-op $router $r2 queuePos 0.4
  66. Agent/TCP set nam_tracevar_ true
  67. set tcp [new $tcptype]
  68. $ns attach-agent $n0 $tcp
  69. if [info exists sinktype] {
  70. set sink [new $sinktype]
  71. } else {
  72. set sink [new Agent/TCPSink]
  73. }
  74. # just turn these on always, to mark cong action pkts
  75. $sink set ecn_ true
  76. $tcp set ecn_ true
  77. if [info exists ecn] {
  78. puts "using ECN in router"
  79. [[$ns link $router $r2] queue] set setbit_ true
  80. }
  81. if [info exists blimit] {
  82. puts "setting DRR limit to $blimit"
  83. [[$ns link $router $r2] queue] set blimit_ $blimit
  84. }
  85. $ns attach-agent $n1 $sink
  86. $ns connect $tcp $sink
  87. set ftp [new Application/FTP]
  88. $ftp attach-agent $tcp
  89. #$ns add-agent-trace $tcp tcp
  90. #$ns monitor-agent-trace $tcp
  91. #$tcp tracevar cwnd_
  92. set udp [new Agent/UDP]
  93. $udp set fid_ 1
  94. $ns attach-agent $n2 $udp
  95. set cbr [new Application/Traffic/CBR]
  96. $cbr set packetSize_ 1000
  97. $cbr set interval_ 0.02
  98. if [info exists cbrrate] {
  99. $cbr set interval_ $cbrrate
  100. }
  101. $cbr attach-agent $udp
  102. set na [new Agent/Null]
  103. $ns attach-agent $n3 $na
  104. $ns connect $udp $na
  105. $ns at 0.0 "$ns set-animation-rate 2ms"
  106. $ns at $ftpstart "$ftp start"
  107. $ns at $cbrstart "$cbr start"
  108. if [info exists endtime] {
  109. set ftime_ $endtime
  110. }
  111. $ns at 0.0 "$ns trace-annotate "$ofile agent starting""
  112. $ns at $ftpstart "$ns trace-annotate "FTP starts at $ftpstart""
  113. $ns at $cbrstart "$ns trace-annotate "CBR starts at $cbrstart""
  114. $ns at [expr $ftime_ + .49] "$ns trace-annotate "FTP stops""
  115. $ns at [expr $ftime_ + 0.5] "$ns detach-agent $n0 $tcp ; $ns detach-agent $n1 $sink"
  116. $ns at [expr $ftime_ + 0.55] "finish"
  117. source $ofile.de
  118. # end common code