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

通讯编程

开发平台:

Visual C++

  1. # Creates connection. First creates a source agent of type s_type and binds
  2. # it to source.  Next creates a destination agent of type d_type and binds
  3. # it to dest.  Finally creates bindings for the source and destination agents,
  4. # connects them, and  returns a list of source agent and destination agent.
  5. TestSuite instproc create-connection-list {s_type source d_type dest pktClass} {
  6. $self instvar ns_
  7. set s_agent [new Agent/$s_type]
  8. set d_agent [new Agent/$d_type]
  9. $s_agent set fid_ $pktClass
  10. $d_agent set fid_ $pktClass
  11. $ns_ attach-agent $source $s_agent
  12. $ns_ attach-agent $dest $d_agent
  13. $ns_ connect $s_agent $d_agent
  14. return "$s_agent $d_agent"
  15. }    
  16. #
  17. # create and schedule a cbr source/dst 
  18. #
  19. TestSuite instproc new_Cbr { startTime source dest pktSize interval fid maxPkts} {
  20. $self instvar ns_
  21. set cbrboth 
  22.     [$self create-connection-list CBR $source LossMonitor $dest $fid ]
  23. set cbr [lindex $cbrboth 0]
  24. $cbr set packetSize_ $pktSize
  25. $cbr set interval_ $interval
  26. if {$maxPkts > 0} {$cbr set maxpkts_ $maxPkts}
  27. set cbrsnk [lindex $cbrboth 1]
  28. $ns_ at $startTime "$cbr start"
  29. }
  30. #
  31. # dynamically varying rate 
  32. #
  33. TestSuite instproc new_VaryingCbr { startTime source dest pktSize interval fid maxPkts} {
  34. $self instvar ns_
  35. set cbrboth 
  36.     [$self create-connection-list CBR $source LossMonitor $dest $fid ]
  37. set cbr [lindex $cbrboth 0]
  38. $cbr set packetSize_ $pktSize
  39. $cbr set interval_ $interval
  40. set cbrsnk [lindex $cbrboth 1]
  41. $ns_ at $startTime "$cbr start"
  42. $ns_ at 50.0 "$self ChangeCBRInterval $cbr 0.0625"
  43. # $ns_ at 100.0 "$self ChangeCBRInterval $cbr 2.0"
  44. $ns_ at 250.0 "$self ChangeCBRInterval $cbr 16.0"
  45. # $ns_ at 250.0 "$self ChangeCBRInterval $cbr 0.5"
  46. #   $ns_ at 50.0 "$self ChangeCBRInterval $cbr 2.0"
  47. #   $ns_ at 70.0 "$self ChangeCBRInterval $cbr 2.0"
  48. #   $ns_ at 90.0 "$self ChangeCBRInterval $cbr 0.5"
  49. #   $ns_ at 110.0 "$self ChangeCBRInterval $cbr 0.5"
  50. }
  51. TestSuite instproc ChangeCBRInterval { cbr mulfactor } {
  52. $self instvar ns_
  53. # puts "[$ns_ now] [$cbr set interval_]"
  54. set interval [$cbr set interval_]
  55. $cbr set interval_ [expr $interval*$mulfactor]
  56. # puts "[$ns_ now] [$cbr set interval_]"
  57. }
  58. #
  59. # create and schedule a tcp source/dst
  60. #
  61. TestSuite instproc new_Tcp { startTime source dest window fid dump size type maxPkts {stopTime 0}} {
  62. $self instvar ns_
  63. $self instvar tcpRateFileDesc_
  64. $self instvar stoptime_
  65.         if { $type == "reno" } {
  66. set tcp [$ns_ create-connection TCP/Reno $source TCPSink $dest $fid]
  67.         }
  68.         if { $type == "sack" } {
  69. set tcp [$ns_ create-connection TCP/Sack1 $source TCPSink/Sack1 $dest $fid]
  70.         }
  71. $tcp set window_ $window
  72. #   $tcp set tcpTick_ 0.1
  73. $tcp set tcpTick_ 0.01
  74. if {$size > 0}  {
  75. $tcp set packetSize_ $size
  76. }
  77. set ftp [$tcp attach-source FTP]
  78. if {$maxPkts > 0} {$ftp set maxpkts_ $maxPkts}
  79. $ns_ at $startTime "$ftp start"
  80. if {$stopTime == 0} {
  81. set stopTime $stoptime_
  82. }
  83. if {$dump != 0} {
  84. $ns_ at $stopTime "$self reportTCPRate $tcp $startTime $stopTime $fid $tcpRateFileDesc_"
  85. }
  86.     }
  87. TestSuite instproc reportTCPRate {tcp startTime stopTime fid fdesc} {
  88. set bytes [$tcp set ack_]
  89. set rate [expr $bytes.0/($stopTime - $startTime)]
  90. puts $fdesc "$fid $rate $bytes"
  91. }
  92. TestSuite instproc new_TFRC { startTime source dest fid size} {
  93.     $self instvar ns_
  94.     
  95.  
  96.     set tfrc [$ns_ create-connection TFRC $source TFRCSink $dest $fid]
  97.     if {$size > 0} {
  98. $tfrc set packetSize_ $size
  99.     }
  100.     $ns_ at $startTime "$tfrc start"
  101. }