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

通讯编程

开发平台:

Visual C++

  1. # pm-end-pairs.tcl
  2. #
  3. # Demonstrates the use of PackMime and using the number
  4. # of completed HTTP request-response pairs as a stopping criteria 
  5. # for the simulation
  6. # useful constants
  7. set CLIENT 0
  8. set SERVER 1
  9. set goal_pairs 50
  10. remove-all-packet-headers;             # removes all packet headers
  11. add-packet-header IP TCP;              # adds TCP/IP headers
  12. set ns [new Simulator];                # instantiate the Simulator
  13. $ns use-scheduler Heap;                # use the Heap scheduler
  14. # SETUP TOPOLOGY
  15. # create nodes
  16. set n(0) [$ns node]
  17. set n(1) [$ns node]
  18. # create link
  19. $ns duplex-link $n(0) $n(1) 10Mb 0ms DropTail
  20. # SETUP PACKMIME
  21. set rate 15
  22. set pm [new PackMimeHTTP]
  23. $pm set-client $n(0);                  # name $n(0) as client
  24. $pm set-server $n(1);                  # name $n(1) as server
  25. $pm set-rate $rate;                    # new connections per second
  26. $pm set-http-1.1;                      # use HTTP/1.1
  27. # SETUP PACKMIME RANDOM VARIABLES
  28. # create RNGs (appropriate RNG seeds are assigned automatically)
  29. set flowRNG [new RNG]
  30. set reqsizeRNG [new RNG]
  31. set rspsizeRNG [new RNG]
  32. # create RandomVariables
  33. set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate]
  34. set req_size [new RandomVariable/PackMimeHTTPFileSize $rate $CLIENT]
  35. set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate $SERVER]
  36. # assign RNGs to RandomVariables
  37. $flow_arrive use-rng $flowRNG
  38. $req_size use-rng $reqsizeRNG
  39. $rsp_size use-rng $rspsizeRNG
  40. # set PackMime variables
  41. $pm set-flow_arrive $flow_arrive
  42. $pm set-req_size $req_size
  43. $pm set-rsp_size $rsp_size
  44. # record HTTP statistics
  45. $pm set-outfile "pm-end-pairs.dat"
  46. $ns at 0.0 "$pm start"
  47. # force quit after completing desired number of pairs
  48. for {set i 0} {$i < 10000} {incr i} {
  49.     $ns at $i "check_pairs"
  50. }
  51. proc check_pairs {} {
  52.     global pm goal_pairs
  53.     set cur_pairs [$pm get-pairs]
  54.     if {$cur_pairs >= $goal_pairs} {
  55. #
  56. # NOTE: "$pm stop" will not stop PackMime immediately.  Those 
  57. #       connections that have already started will be allowed to 
  58. #       complete, so pm-end-pairs.dat will likely contain slightly 
  59. #       more than "goal_pairs" entries.
  60. #
  61. puts stderr "Completed $goal_pairs HTTP pairs.  Finishing..."
  62. $pm stop
  63. exit 0
  64.     }
  65. }
  66. $ns run