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

通讯编程

开发平台:

Visual C++

  1. # case2b.tcl
  2. set val(chan)           Channel/Sat                 ;#Channel Type
  3. set val(netif)          Phy/Sat            ;# network interface type
  4. set val(mac)            Mac/Sat                 ;# MAC type
  5. set val(ifq)            Queue/DropTail  ;# interface queue type
  6. #set val(ifq)            Queue/XCP
  7. set val(lla)             LL/Sat/HDLC                    ;# link layer type
  8. set val(llb)              LL/Sat
  9. #set val(err)            MarkovErrorModel
  10. set val(err)            ComplexMarkovErrorModel
  11. #set val(err)             UniformErrorProc
  12. set val(bw_up)          10Mb
  13. set val(bw_down)        10Mb
  14. set val(x) 250
  15. set val(y) 250
  16. set durlistA        "11.2 4.0"      ;# unblocked and blocked state duration avg value
  17. set durlistB        "27.0 12.0 0.4 0.4"  ;# for complexmarkoverror model
  18. set BW 10; # in Mb/s
  19. set delay 254; # in ms
  20. # Set the queue length (in packets)
  21. #set qlen [expr round([expr ($BW / 8.0) * $delay * 2])]; # set buffer to pipe size
  22. # set sat link bandwidth and delay
  23. Mac set bandwidth_ 10Mb
  24. #LL set delay_ 125ms
  25. LL set delay_ 250ms
  26. set val(bdp) [expr 10000/8.0 * 125/100]
  27. LL/Sat/HDLC set window_size_ $val(bdp) 
  28. LL/Sat/HDLC set timeout_ 0.26
  29. LL/Sat/HDLC set max_timeouts_ 1
  30. # set selective repeat on; its GoBackN by default
  31. LL/Sat/HDLC set selRepeat_ 1
  32. set qlen $val(bdp)
  33. puts "queue len = $qlen"
  34. set val(ifqlen) $qlen
  35. proc start_time {} {return 0; }
  36. # proc start_time {} {return [expr ([eval ns-random] / 2147483647.0) * 0.1]}
  37. proc UniformErrorProc {} {
  38. global val
  39. set errObj [new ErrorModel]
  40. $errObj unit bit
  41. #$errObj FECstrength $val(FECstrength) 
  42. #$errObj datapktsize 512
  43. #$errObj cntrlpktsize 80
  44. return $errObj
  45. }
  46. proc MarkovErrorModel {} {
  47. global durlistA
  48. puts [lindex $durlistA 0]
  49. puts [lindex $durlistA 1]
  50. set errmodel [new ErrorModel/TwoStateMarkov $durlistA time]
  51. #$errmodel drop-target [new Agent/Null]
  52. return $errmodel
  53. }
  54. proc ComplexMarkovErrorModel {} {
  55. global durlistB
  56. set errmodel [new ErrorModel/ComplexTwoStateMarkov $durlistB time]
  57. $errmodel drop-target [new Agent/Null] 
  58. return $errmodel
  59. }
  60. proc stop {} {
  61.     global ns_ tracefd
  62.     $ns_ flush-trace
  63.     close $tracefd
  64. }
  65. proc setup {tcptype queuetype sources qlen duration file seed c_sources delay rate ecn} {
  66. global val traces ns_ tracefd
  67. # Initialize Global Variables
  68. ns-random $seed
  69. set ns_ [new Simulator]
  70. set tracefd     [open case2b.tr w]
  71. $ns_ trace-all $tracefd
  72. $ns_ eventtrace-all
  73. $ns_ rtproto Static
  74. # Create sat n(0)
  75. # configure node, please note the change below.
  76. $ns_ node-config -satNodeType geo 
  77.     -llType $val(llb) 
  78.     -ifqType $val(ifq) 
  79.     -ifqLen $val(ifqlen) 
  80.     -macType $val(mac) 
  81.     -phyType $val(netif) 
  82.     -channelType $val(chan) 
  83.     -downlinkBW $val(bw_down) 
  84.     -wiredRouting ON
  85. set n(0) [$ns_ node]
  86. $n(0) set-position -95
  87. $ns_ node-config -satNodeType terminal
  88.     -llType $val(lla) 
  89. set n(100) [$ns_ node]
  90. $n(100) set-position 42.3 -71.1; # Boston
  91. set n(101) [$ns_ node]
  92. $n(101) set-position 37.9 -122.3; # Berkeley
  93. $n(100) add-gsl geo $val(ll) $val(ifq) $val(ifqlen) $val(mac) $val(bw_up) 
  94.     $val(netif) [$n(0) set downlink_] [$n(0) set uplink_]
  95. $n(101) add-gsl geo $val(ll) $val(ifq) $val(ifqlen) $val(mac) $val(bw_up) 
  96.     $val(netif) [$n(0) set downlink_] [$n(0) set uplink_]
  97. $n(101) interface-errormodel [$val(err)]  ;#downlink
  98. # determine the actual queutype and save the one asked for 
  99. # assign queueing parameters -- simulate random drop with RED
  100. if { [string match RandomDrop* $queuetype ] } then {
  101. set queuetype [join 
  102.    [concat "RED" 
  103. [string range $queuetype [string length "RandomDrop"] end ]]
  104.    "" ]
  105. Queue/$queuetype set thresh_ [expr 2* $qlen]
  106. Queue/$queuetype set maxthresh_ [expr 2* $qlen]
  107. # added for ECN comparison
  108. Queue/$queuetype set setbit_ $ecn
  109. } elseif { [string match RED* $queuetype ] } then {
  110. #added by nirav
  111. Queue/$queuetype set bytes_ false
  112. Queue/$queuetype set queue_in_bytes_ false
  113. # Queue/$queuetype set q_weight_ = -1
  114. # Queue/$queuetype set max_p = 1
  115. Queue/$queuetype set gentle_ true
  116. #added by nirav
  117. #Queue/$queuetype set thresh_ [expr $qlen * 0.5]
  118. #Queue/$queuetype set maxthresh_ [expr $qlen * 0.75]
  119. Queue/$queuetype set thresh_ 0
  120. Queue/$queuetype set maxthresh_ 0
  121. # added for ECN comparison
  122. Queue/$queuetype set setbit_ $ecn
  123. }
  124. # UDP
  125. # set udp [new Agent/UDP]
  126.   # $ns_ attach-agent $n(100) $udp
  127. #   set cbr [new Application/Traffic/CBR]
  128. #   $cbr set packetSize_ 512
  129. #   #$cbr set interval_ 3.75ms
  130. #   $cbr set rate_ 50Kb
  131. #   #$cbr set maxpkts_ 2000
  132. #   $cbr attach-agent $udp
  133. #   set null [new Agent/Null]
  134. #   $ns_ attach-agent $n(101) $null
  135. #   $ns_ connect $udp $null
  136. #   $ns_ at 0.1 "$cbr start"
  137. Agent/$tcptype set window_ $val(bdp)
  138. #  # TCP
  139.   set tcp [$ns_ create-connection $tcptype $n(100) TCPSink $n(101) 0]
  140.   set ftp [new Application/FTP]
  141.   $ftp attach-agent $tcp
  142.   $ns_ at 0.0 "$ftp start"
  143. # tracing for sat links
  144. $ns_ trace-all-satlinks $tracefd
  145. # setup routing
  146. set satrouteobject_ [new SatRouteObject]
  147. $satrouteobject_ compute_routes
  148. # trace for tcp parameters
  149. $tcp trace cwnd_
  150. $tcp trace t_seqno_
  151. $tcp attach [open "$file.tcp_trace.1" "w"]
  152. # trace queue
  153. #$ns_ trace-queue $n(0) $n(101) [open "$file.queue1" w]
  154. # Stop the sim at $duration
  155. puts "duration = $durationn"
  156. $ns_ at $duration "stop"
  157. $ns_ at $duration "puts "NS EXITING..." ; $ns_ halt"
  158. # start up.
  159. puts "Starting Simulation..."
  160. $ns_ run
  161. }
  162. # traces are the set of info to be put out
  163. set traces [ list "TCP" "queue" ]
  164. # this boring code sets the given parameters from teh command line in order or
  165. # assigns defaults if they're not given.
  166. if { [llength $argv]>0} then { set sources [lindex $argv 0]}
  167. else {set sources 1}
  168. if { [llength $argv]>1} then { set duration [lindex $argv 1]}
  169. else {set duration 50}
  170. if { [llength $argv]>2} then { set file [lindex $argv 2]}
  171. else {set file "case2a"}
  172. if { [llength $argv]>3} then { set qlen [lindex $argv 3]}
  173. else {set qlen 50 }
  174. if { [llength $argv]>4} then { set tcptype [lindex $argv 4]}
  175. else {set tcptype "TCP/Newreno"}
  176. if { [llength $argv]>5} then { set queuetype [lindex $argv 5]}
  177. else {set queuetype "RED"}
  178. if { [llength $argv]>6} then { set seed [lindex $argv 6]}
  179. else {set seed 0}
  180. if { [llength $argv]>7} then { set c_sources [lindex $argv 7]}
  181. else {set  c_sources 0}
  182. if { [llength $argv]>8} then { set delay [lindex $argv 8]}
  183. else {set delay "10ms"}
  184. if { [llength $argv]>9} then { set rate [lindex $argv 9]}
  185. else {set rate "100k"}
  186. if { [llength $argv]>10} then { set ecn [lindex $argv 10]}
  187. else {set ecn 1 }
  188. # Start the sim
  189. puts "sources=$sources, duration=$duration, file=$file, qlen=$qlen, tcptype=$tcptype, queuetype=$queuetype, seec=$seed, c_sources=$c_sources"
  190. setup $tcptype $queuetype $sources $qlen $duration $file $seed $c_sources $delay $rate $ecn