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

通讯编程

开发平台:

Visual C++

  1. #! /bin/sh
  2. #
  3. # Copyright (c) 2000 The Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. #    notice, this list of conditions and the following disclaimer in the
  13. #    documentation and/or other materials provided with the distribution.
  14. # 3. All advertising materials mentioning features or use of this software
  15. #    must display the following acknowledgement:
  16. # This product includes software developed by the Network Research
  17. # Group at Lawrence Berkeley National Laboratory.
  18. # 4. Neither the name of the University nor of the Laboratory may be used
  19. #    to endorse or promote products derived from this software without
  20. #    specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-plm.tcl,v 1.6 2005/06/11 05:51:37 sfloyd Exp $
  35. #
  36. # Contributed by Arnaud Legout at EURECOM
  37. #remove-all-packet-headers       ; # removes all except common
  38. #add-packet-header Flags IP RTP TCP LRWPAN ; # hdrs reqd for validation test
  39.  
  40. # FOR UPDATING GLOBAL DEFAULTS:
  41. set packetSize 500
  42. set runtime 80
  43. set plm_debug_flag 3; #from 0 to 3: 0 no output, 3 full output
  44. set rates "20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3"
  45. set level [llength $rates]
  46. set rates_cum [calc_cum $rates]
  47. #puts stderr $rates_cum
  48. set run_nam 0
  49. set check_estimate 1
  50. set Queue_sched_ FQ
  51. set PP_burst_length 2
  52. set PP_estimation_length 3
  53. Class Test/PLM -superclass PLMTopology
  54. #This scenario is for validation purpose. It aims to trigger most of
  55. #the PLM functionalities.
  56. Test/PLM instproc init args {
  57. $self instvar ns node
  58. set ns [new Simulator -multicast on]
  59. $ns color 1 blue
  60. $ns color 2 green
  61. $ns color 3 red
  62. $ns color 4 white
  63. # prunes, grafts
  64. $ns color 30 orange
  65. $ns color 31 yellow
  66. global f check_estimate nb_plm runtime
  67.     
  68. set f [open temp.rands w]
  69. $ns trace-all $f
  70. $ns at [expr $runtime +1] "$self finish"
  71. eval $self next $ns
  72. set nb_src 20
  73. Queue/DropTail set limit_ 5
  74.  
  75. $self build_link 0 1 200ms 200e3
  76. $ns duplex-link-op $node(0) $node(1) queuePos 0.5
  77.   
  78. #create sources links
  79. for {set i 2} {$i<=[expr $nb_src + 1]} {incr i} {
  80. set delay [expr 5 * $i]ms
  81. set bp ${i}e5
  82. # puts stderr "$delay $bp"
  83. $self build_link $i 0 $delay  $bp
  84. }
  85. #create receivers links
  86. for {set i [expr $nb_src + 2]} {$i<=[expr 2 * $nb_src + 1]} {incr i} {
  87. set delay [expr 4 * ($i -20)]ms
  88. set bp [expr $i - 20]e5
  89. # puts stderr "$delay $bp"
  90. $self build_link 1 $i $delay  $bp
  91. }
  92. #place three PLM sources
  93. for {set i 2} {$i <= 4} {incr i} {
  94. set addr($i) [$self place_source $i 3]
  95. }
  96. #    puts stderr "sender placed"
  97. #place six PLM receiver: 2 receivers per source
  98. set j 2
  99. for {set i 2} {$i <=  7} {incr i 2} {
  100. set time [expr $i/2. + 3]
  101. $self place_receiver [expr $i + $nb_src] $addr($j) $time $check_estimate $i
  102. $self place_receiver [expr $i + $nb_src +1] $addr($j) $time $check_estimate [expr $i + 1]
  103. incr j
  104. }
  105. for {set i 1} {$i<=10} {incr i} {
  106. set null($i) [new Agent/Null]
  107. set udp($i) [new Agent/UDP]
  108. $udp($i) set fid_ [expr $i + 3]
  109. $ns attach-agent $node([expr $i + 4]) $udp($i)
  110. $ns attach-agent $node([expr $i + 27]) $null($i)
  111. $ns connect $udp($i) $null($i)
  112. set cbr($i) [new Application/Traffic/CBR]
  113. $cbr($i) attach-agent $udp($i)
  114. $cbr($i) set random_ 0
  115. $cbr($i) set rate_ 1Mb
  116. $cbr($i) set packet_size_ 1000
  117. }
  118. #    puts stderr "receivers placed"  
  119. for {set i 1} {$i<=3} {incr i} {
  120. $ns at 10 "$cbr($i) start"
  121. $ns at 15 "$cbr($i) stop"
  122. }
  123. for {set i 1} {$i<=10} {incr i} {
  124. $ns at 20 "$cbr($i) start"
  125. $ns at 25 "$cbr($i) stop"
  126. }
  127. #mcast set up
  128. DM set PruneTimeout 1000
  129. set mproto DM
  130. set mrthandle [$ns mrtproto $mproto {} ]
  131. }
  132. Test/PLM instproc finish {} {
  133.     global run_nam PLMrcvr
  134.     #    puts finish
  135.     if {$run_nam} {
  136. puts "running nam..."
  137. exec nam -g 600x700 -f dynamic-nam.conf out.nam &
  138.     }
  139.     exit 0
  140. }
  141. proc isProc? {cls prc} {
  142. if [catch "Object info subclass $cls/$prc" r] {
  143. global argv0
  144. puts stderr "$argv0: no such $cls: $prc"
  145. usage
  146. }
  147. }
  148. proc get-subclasses {cls pfx} {
  149. set ret ""
  150. set l [string length $pfx]
  151. set c $cls
  152. while {[llength $c] > 0} {
  153. set t [lindex $c 0]
  154. set c [lrange $c 1 end]
  155. if [string match ${pfx}* $t] {
  156. lappend ret [string range $t $l end]
  157. }
  158. eval lappend c [$t info subclass]
  159. }
  160. set ret
  161. }
  162. proc usage {} {
  163. global argv0
  164. puts stderr "usage: ns $argv0 <tests> [<topologies>]"
  165. puts stderr "Valid tests are:t[get-subclasses TestSuite Test/]"
  166. puts stderr "Valid Topologies are:t[get-subclasses SkelTopology Topology/]"
  167. exit 1
  168. }
  169. Test/PLM instproc run {} {
  170. $self instvar ns
  171. $ns run
  172. }
  173. Test/PLM proc runTest {} {
  174. global argc argv quiet
  175. set quiet false
  176. switch $argc {
  177. 1 {
  178. set test $argv
  179. isProc? Test $test
  180. set topo ""
  181. }
  182. 2 {
  183. set test [lindex $argv 0]
  184. isProc? Test $test
  185. set topo [lindex $argv 1]
  186. if {$topo == "QUIET"} {
  187. set quiet true
  188. set topo ""
  189. } else {
  190. isProc? Topology $topo
  191. }
  192. }
  193. 3 {
  194. set test [lindex $argv 0]
  195. isProc? Test $test
  196. set topo [lindex $argv 1]
  197. isProc? Topology $topo
  198. set extra [lindex $argv 2]
  199. if {$extra == "QUIET"} {
  200. set quiet true
  201. }
  202. }
  203. default {
  204. usage
  205. }
  206. }
  207. set t [new Test/$test $topo]
  208. $t run
  209. }
  210. Test/PLM runTest