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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (C) 2000 by USC/ISI
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. #
  17. # $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-linkstate.tcl,v 1.15 2006/01/24 23:00:06 sallyfloyd Exp $
  18. # Simple test for Link State routing contributed by 
  19. # Mingzhou Sun <msun@rainfinity.com> based on Kannan's old equal-cost 
  20. # multi-path routing test code.
  21. # Simple example of an equal cost multi-path routing through
  22. # two equal cost routes.  Equal cost paths are achieved by diddling
  23. # link costs.
  24. #
  25. #
  26. # $n0       $n3
  27. #         /   
  28. #        /     
  29. #      $n2-------$n4
  30. #     /
  31. #    /
  32. # $n1
  33. #
  34. # However, this is not as simple.  Because $n2 is directly connected to $n4,
  35. # it prefers its ``Direct'' route over multiple equal cost routes learned
  36. # via DV.  Hence,we raise the preference of Direct routes over DV routes.
  37. #
  38. # Furthermore, in this example, link <$n2, $n4> is made dynamic.  This allows
  39. # us to watch traffic between $n2 and $n4 alternate between taking multiple
  40. # equi-cost routes, and the only available route.
  41. Agent/TCP set syn_ false
  42. Agent/TCP set delay_growth_ false
  43. # In preparation for changing the default values for syn_ and delay_growth_.
  44. remove-all-packet-headers       ; # removes all except common
  45. add-packet-header Flags IP TCP rtProtoLS ; # hdrs reqd for validation test
  46.  
  47. # FOR UPDATING GLOBAL DEFAULTS:
  48. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  49. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  50. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  51. Agent/TCP set tcpTick_ 0.1
  52. # The default for tcpTick_ is being changed to reflect a changing reality.
  53. Agent/TCP set rfc2988_ false
  54. # The default for rfc2988_ is being changed to true.
  55. # FOR UPDATING GLOBAL DEFAULTS:
  56. Agent/TCP set minrto_ 1
  57. # default changed on 10/14/2004.
  58. Agent/TCP set useHeaders_ false
  59. # The default is being changed to useHeaders_ true.
  60. Agent/TCP set windowInit_ 1
  61. # The default is being changed to 2.
  62. Agent/TCP set singledup_ 0
  63. # The default is being changed to 1
  64. Agent/TCP set SetCWRonRetransmit_ true
  65. # Changing the default value.
  66. if {![TclObject is-class Agent/rtProto/LS]} {
  67. puts "Linkstate module is not present; validation skipped"
  68. exit 2
  69. }
  70. Class TestSuite
  71. Class Test/eqp -superclass TestSuite
  72. Agent/rtProto/Direct set preference_ 200
  73. Test/eqp instproc init {} {
  74. $self instvar ns
  75. set ns [new Simulator]
  76. Node set multiPath_ 1
  77. set n0 [$ns node]
  78. set n1 [$ns node]
  79. set n2 [$ns node]
  80. set n3 [$ns node]
  81. set n4 [$ns node]
  82. $n0 shape "circle"
  83. $n1 shape "circle"
  84. $n2 shape "other"
  85. $n3 shape "other"
  86. $n4 shape "box"
  87. set f [open temp.rands w]
  88. $ns trace-all $f
  89. global quiet
  90. if { $quiet == "false" } {
  91. set nf [open eqp.nam w]
  92. $ns namtrace-all $nf
  93. }
  94. $ns color 0 blue
  95. $ns color 1 red
  96. $ns color 2 white
  97. $ns duplex-link $n0 $n2 10Mb 2ms DropTail
  98. $ns duplex-link $n1 $n2 10Mb 2ms DropTail
  99. $ns duplex-link-op $n0 $n2 orient right-down
  100. $ns duplex-link-op $n1 $n2 orient right-up
  101. $ns duplex-link $n2 $n3 1.5Mb 10ms DropTail
  102. $ns duplex-link $n3 $n4 1.5Mb 10ms DropTail
  103. $ns queue-limit $n2 $n3 5
  104. $ns duplex-link-op $n2 $n3 orient right-up
  105. $ns duplex-link-op $n3 $n4 orient right-down
  106. $ns duplex-link-op $n2 $n3 queuePos 0
  107. $ns duplex-link $n2 $n4 1.5Mb 10ms DropTail
  108. $ns queue-limit $n2 $n4 5
  109. $ns duplex-link-op $n2 $n4 orient right
  110. $ns duplex-link-op $n2 $n3 queuePos 0
  111. $ns duplex-link-op $n2 $n4 queuePos 0
  112. [$ns link $n2 $n4] cost 2
  113. [$ns link $n4 $n2] cost 2
  114. [$self build-tcp $n0 $n4 0.7] set class_ 0
  115. [$self build-tcp $n1 $n4 0.9] set class_ 1
  116. $ns rtmodel Deterministic {.35 .25} $n2 $n4
  117. [$ns link $n2 $n4] trace-dynamics $ns stdout
  118. $ns rtproto LS
  119. }
  120. Test/eqp instproc build-tcp { n0 n1 startTime } {
  121. $self instvar ns
  122. set tcp [new Agent/TCP]
  123. $ns attach-agent $n0 $tcp
  124. set snk [new Agent/TCPSink]
  125. $ns attach-agent $n1 $snk
  126. $ns connect $tcp $snk
  127. set ftp [new Application/FTP]
  128. $ftp attach-agent $tcp
  129. $ns at $startTime "$ftp start"
  130. return $tcp
  131. }
  132. Test/eqp instproc finish {} {
  133. $self instvar ns
  134. $ns flush-trace
  135. exit 0
  136. }
  137. Test/eqp instproc run {} {
  138. $self instvar ns
  139. $ns at 1.2 "$self finish"
  140. $ns run
  141. }
  142. proc usage {} {
  143. global argv0
  144. puts stderr "usage: ns $argv0 <tests>"
  145. puts stderr "Valid tests are:t[get-subclasses TestSuite Test/]"
  146. exit 1
  147. }
  148. proc isProc? {cls prc} {
  149. if [catch "Object info subclass $cls/$prc" r] {
  150. global argv0
  151. puts stderr "$argv0: no such $cls: $prc"
  152. usage
  153. }
  154. }
  155. proc get-subclasses {cls pfx} {
  156. set ret ""
  157. set l [string length $pfx]
  158. set c $cls
  159. while {[llength $c] > 0} {
  160. set t [lindex $c 0]
  161. set c [lrange $c 1 end]
  162. if [string match ${pfx}* $t] {
  163. lappend ret [string range $t $l end]
  164. }
  165. eval lappend c [$t info subclass]
  166. }
  167. set ret
  168. }
  169. TestSuite proc runTest {} {
  170. global argc argv quiet
  171. set quiet false
  172. switch $argc {
  173. 1 {
  174. set test $argv
  175. isProc? Test $test
  176. }
  177. 2 {
  178. set test [lindex $argv 0]
  179. isProc? Test $test
  180. if {[lindex $argv 1] == "QUIET"} {
  181. set quiet true
  182. }
  183. default {
  184. usage
  185. }
  186. }
  187. set t [new Test/$test]
  188. $t run
  189. }
  190. TestSuite runTest