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

通讯编程

开发平台:

Visual C++

  1. # pm-delaybox.tcl
  2. #
  3. # Demonstrates the use of PackMime with DelayBox
  4. # useful constants
  5. set CLIENT 0
  6. set SERVER 1
  7. set rate 32
  8. set run 2
  9. set stoptime 25
  10. # setup simulator
  11. remove-all-packet-headers;            # removes all packet headers
  12. add-packet-header IP TCP;             # adds TCP/IP headers
  13. set ns_ [new Simulator];              # instantiate the simulator
  14. $ns_ use-scheduler Heap;              # use the Heap scheduler
  15. #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  16. # Setup network links and nodes
  17. #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  18. # build end nodes
  19. set client [$ns_ node]
  20. set server [$ns_ node]
  21. # build delayboxes and links
  22. set db_(0) [$ns_ DelayBox]
  23. set db_(1) [$ns_ DelayBox]
  24. $ns_ duplex-link $db_(0) $db_(1) 10Mb 1ms DropTail
  25. $ns_ duplex-link $client $db_(0) 10Mb 1ms DropTail
  26. $ns_ duplex-link $server $db_(1) 10Mb 1ms DropTail
  27. # trace queues
  28. Trace set show_tcphdr_ 1
  29. set db_qmonf [open "pm-delaybox-db.trq" w]
  30. $ns_ trace-queue $db_(0) $db_(1) $db_qmonf
  31. $ns_ trace-queue $db_(1) $db_(0) $db_qmonf
  32. set cli_qmonf [open "pm-delaybox-cli.trq" w]
  33. $ns_ trace-queue $client $db_(0) $cli_qmonf
  34. $ns_ trace-queue $db_(0) $client $cli_qmonf
  35. set srv_qmonf [open "pm-delaybox-srv.trq" w]
  36. $ns_ trace-queue $server $db_(1) $srv_qmonf
  37. $ns_ trace-queue $db_(1) $server $srv_qmonf
  38. # print drops
  39. $db_(0) set-debug 1
  40. $db_(1) set-debug 1
  41. #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  42. #  Setup PackMime Traffic
  43. #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  44. # set rate per PackMime
  45. set rate_ $rate
  46. # create PackMime and assign clients and server clouds
  47. set pm_ [new PackMimeHTTP]
  48. $pm_ set-client $client
  49. $pm_ set-server $server
  50. $pm_ set-TCP Newreno
  51. # create RNGs (appropriate RNG seeds will be assigned automatically)
  52. for {set i 0} {$i < 5} {incr i} {
  53.     set rng_($i) [new RNG]
  54.     # advance the seeds for different experiment runs
  55.     for {set j 1} {$j < $run} {incr j} {
  56. $rng_($i) next-substream
  57.     }
  58. }
  59. # create random variables
  60. set req_size [new RandomVariable/PackMimeHTTPFileSize $rate_ $CLIENT]
  61. set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate_ $SERVER]
  62. set client_delay [new RandomVariable/PackMimeHTTPXmit $rate_ $CLIENT]
  63. set server_delay [new RandomVariable/PackMimeHTTPXmit $rate_ $SERVER]
  64. set client_bw [new RandomVariable/Constant];      # bw 100 Mbps
  65. $client_bw set val_ 100
  66. set server_bw [new RandomVariable/Uniform];      # bw 1-20 Mbps
  67. $server_bw set min_ 1
  68. $server_bw set max_ 20
  69. set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate_]
  70. set loss_rate [new RandomVariable/Uniform];    # loss at each DB
  71. $loss_rate set min_ 0
  72. $loss_rate set max_ 0.001
  73. set zero_loss_rate [new RandomVariable/Constant];
  74. $zero_loss_rate set val_ 0
  75. # assign RNGs to RandomVariables
  76. $req_size use-rng $rng_(0)
  77. $rsp_size use-rng $rng_(1)
  78. $client_delay use-rng $rng_(2)
  79. $server_delay use-rng $rng_(2)
  80. $client_bw use-rng $rng_(3)
  81. $server_bw use-rng $rng_(3)
  82. $flow_arrive use-rng $rng_(4)
  83. # setup rules for DelayBoxes
  84. $db_(0) add-rule [$client id] [$server id] $client_delay $loss_rate 
  85.     $client_bw
  86. $db_(0) add-rule [$server id] [$client id] $client_delay $zero_loss_rate 
  87.     $client_bw
  88. $db_(1) add-rule [$client id] [$server id] $server_delay $loss_rate 
  89.     $server_bw
  90. $db_(1) add-rule [$server id] [$client id] $server_delay $zero_loss_rate 
  91.     $server_bw
  92. # output delays to files
  93. $db_(0) set-delay-file "pm-delaybox-db0.out"
  94. $db_(1) set-delay-file "pm-delaybox-db1.out"
  95. # set PackMime variables
  96. $pm_ set-rate $rate_
  97. $pm_ set-req_size $req_size
  98. $pm_ set-rsp_size $rsp_size
  99. $pm_ set-flow_arrive $flow_arrive
  100. # record HTTP statistics
  101. $pm_ set-outfile "pm-delaybox.dat"
  102. #::::::::::::::::::
  103. # Schedule Traffic 
  104. #::::::::::::::::::
  105. $ns_ at 0.0 "$pm_ start"
  106. $ns_ at $stoptime "$pm_ stop; $db_(0) close-delay-file; $db_(1) close-delay-file; exit 0"
  107. # start the simulation
  108. $ns_ run