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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1995 The Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/old/test-suite.tcl,v 1.1.1.1 1996/12/19 03:22:47 mccanne Exp $
  34. #
  35. #
  36. # This test suite reproduces most of the tests from the following note:
  37. # Floyd, S., Simulator Tests. July 1995.  
  38. # URL ftp://ftp.ee.lbl.gov/papers/simtests.ps.Z.
  39. #
  40. # To run all tests:  test-all
  41. # To run individual tests:
  42. # ns test-suite.tcl tahoe1
  43. # ns test-suite.tcl tahoe2
  44. # ...
  45. #
  46. # Create a simple four node topology:
  47. #
  48. #        s1
  49. #          
  50. #  8Mb,5ms   0.8Mb,100ms
  51. #           r1 --------- k1
  52. #  8Mb,5ms /
  53. #         /
  54. #        s2
  55. #
  56. proc create_testnet { } {
  57. global s1 s2 r1 k1
  58. set s1 [ns node]
  59. set s2 [ns node]
  60. set r1 [ns node]
  61. set k1 [ns node]
  62. ns_duplex $s1 $r1 8Mb 5ms drop-tail
  63. ns_duplex $s2 $r1 8Mb 5ms drop-tail
  64. set L [ns_duplex $r1 $k1 800Kb 100ms drop-tail]
  65. [lindex $L 0] set queue-limit 6
  66. [lindex $L 1] set queue-limit 6
  67. }
  68. proc create_testnet1 { } {
  69. global s1 s2 r1 k1
  70. set s1 [ns node]
  71. set s2 [ns node]
  72. set r1 [ns node]
  73. set k1 [ns node]
  74. ns_duplex $s1 $r1 10Mb 5ms drop-tail
  75. ns_duplex $s2 $r1 10Mb 5ms drop-tail
  76. set L [ns_duplex $r1 $k1 1.5Mb 100ms drop-tail]
  77. [lindex $L 0] set queue-limit 23
  78. [lindex $L 1] set queue-limit 23
  79. }
  80. #
  81. # Create a simple six node topology:
  82. #
  83. #        s1     s3
  84. #               /
  85. # 10Mb,2ms   1.5Mb,20ms   / 10Mb,4ms
  86. #           r1 --------- r2
  87. # 10Mb,3ms /     10Mb,5ms
  88. #         /     
  89. #        s2     s4 
  90. #
  91. proc create_testnet2 { } {
  92. global s1 s2 r1 r2 s3 s4
  93. set s1 [ns node]
  94. set s2 [ns node]
  95. set r1 [ns node]
  96. set r2 [ns node]
  97. set s3 [ns node]
  98. set s4 [ns node]
  99. ns_duplex $s1 $r1 10Mb 2ms drop-tail
  100. ns_duplex $s2 $r1 10Mb 3ms drop-tail
  101. set L [ns_duplex $r1 $r2 1.5Mb 20ms red]
  102. [lindex $L 0] set queue-limit 25
  103. [lindex $L 1] set queue-limit 25
  104. ns_duplex $s3 $r2 10Mb 4ms drop-tail
  105. ns_duplex $s4 $r2 10Mb 5ms drop-tail
  106. }
  107. proc finish file {
  108. set f [open temp.rands w]
  109. puts $f "TitleText: $file"
  110. puts $f "Device: Postscript"
  111. exec rm -f temp.p temp.d 
  112. exec touch temp.d temp.p
  113. #
  114. # split queue/drop events into two separate files.
  115. # we don't bother checking for the link we're interested in
  116. # since we know only such events are in our trace file
  117. #
  118. exec awk {
  119. {
  120. if (($1 == "+" || $1 == "-" ) && 
  121.     ($5 == "tcp" || $5 == "ack"))
  122. print $2, $8 + ($11 % 90) * 0.01
  123. }
  124. } out.tr > temp.p
  125. exec awk {
  126. {
  127. if ($1 == "d")
  128. print $2, $8 + ($11 % 90) * 0.01
  129. }
  130. } out.tr > temp.d
  131. puts $f "packets
  132. flush $f
  133. exec cat temp.p >@ $f
  134. flush $f
  135. # insert dummy data sets so we get X's for marks in data-set 4
  136. puts $f [format "n"skip-1n0 1nn"skip-2n0 1nn"]
  137. puts $f "drops
  138. flush $f
  139. #
  140. # Repeat the first line twice in the drops file because
  141. # often we have only one drop and xgraph won't print marks
  142. # for data sets with only one point.
  143. #
  144. exec head -1 temp.d >@ $f
  145. exec cat temp.d >@ $f
  146. close $f
  147. exec xgraph -bb -tk -nl -m -x time -y packet temp.rands &
  148. exit 0
  149. }
  150. #
  151. # Arrange for tcp source stats to be dumped for $tcpSrc every
  152. # $interval seconds of simulation time
  153. #
  154. proc tcpDump { tcpSrc interval } {
  155. proc dump { src interval } {
  156. ns at [expr [ns now] + $interval] "dump $src $interval"
  157. puts [ns now]/cwnd=[$src get cwnd]/ssthresh=[$src get ssthresh]/ack=[$src get ack]
  158. }
  159. ns at 0.0 "dump $tcpSrc $interval"
  160. }
  161. proc tcpDumpAll { tcpSrc interval label } {
  162. proc dump { src interval label } {
  163. ns at [expr [ns now] + $interval] "dump $src $interval $label"
  164. puts $label/time=[ns now]/cwnd=[$src get cwnd]/ssthresh=[$src get ssthresh]/ack=[$src get ack]/rtt=[$src get rtt]
  165. }
  166. puts $label:window=[$tcpSrc get window]/packet-size=[$tcpSrc get packet-size]/bug-fix=[$tcpSrc get bug-fix]
  167. ns at 0.0 "dump $tcpSrc $interval $label"
  168. }
  169. proc openTrace { stopTime testName } {
  170. exec rm -f out.tr temp.rands
  171. global r1 k1    
  172. set traceFile [open out.tr w]
  173. ns at $stopTime 
  174. "close $traceFile ; finish $testName"
  175. set T [ns trace]
  176. $T attach $traceFile
  177. return $T
  178. }
  179. proc test_tahoe1 {} {
  180. global s1 s2 r1 k1
  181. create_testnet
  182. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  183. $tcp1 set window 50
  184. set ftp1 [$tcp1 source ftp]
  185. ns at 0.0 "$ftp1 start"
  186. tcpDump $tcp1 1.0
  187. # trace only the bottleneck link
  188. [ns link $r1 $k1] trace [openTrace 5.0 test_tahoe]
  189. ns run
  190. }
  191. proc test_tahoe2 {} {
  192. global s1 s2 r1 k1
  193. create_testnet
  194. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  195. $tcp1 set window 14
  196. set ftp1 [$tcp1 source ftp]
  197. ns at 1.0 "$ftp1 start"
  198. tcpDump $tcp1 1.0
  199. # trace only the bottleneck link
  200. [ns link $r1 $k1] trace [openTrace 5.0 test_tahoe2]
  201. ns run
  202. }
  203. proc test_tahoe3 {} {
  204. global s1 s2 r1 k1
  205. create_testnet
  206. [ns link $r1 $k1] set queue-limit 8
  207. [ns link $k1 $r1] set queue-limit 8
  208. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  209. $tcp1 set window 100
  210. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  211. $tcp2 set window 16
  212. set ftp1 [$tcp1 source ftp]
  213. set ftp2 [$tcp2 source ftp]
  214. ns at 1.0 "$ftp1 start"
  215. ns at 0.5 "$ftp2 start"
  216. tcpDump $tcp1 1.0
  217. # trace only the bottleneck link
  218. [ns link $r1 $k1] trace [openTrace 8.0 test_tahoe3]
  219. ns run
  220. }
  221. proc test_tahoe4 {} {
  222. global s1 s2 r1 k1
  223. create_testnet
  224. [ns link $s2 $r1] set delay 200ms
  225. [ns link $r1 $s2] set delay 200ms
  226. [ns link $r1 $k1] set queue-limit 11
  227. [ns link $k1 $r1] set queue-limit 11
  228. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  229. $tcp1 set window 30
  230. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  231. $tcp2 set window 30
  232. set ftp1 [$tcp1 source ftp]
  233. set ftp2 [$tcp2 source ftp]
  234. ns at 0.0 "$ftp1 start"
  235. ns at 0.0 "$ftp2 start"
  236. tcpDump $tcp1 5.0
  237. # trace only the bottleneck link
  238. [ns link $r1 $k1] trace [openTrace 25.0 test_tahoe4]
  239. ns run
  240. }
  241. proc test_no_bug {} {
  242. global s1 s2 r1 k1
  243. create_testnet1
  244. [ns link $s1 $r1] set delay 3ms
  245. [ns link $r1 $s1] set delay 3ms 
  246. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  247. $tcp1 set window 50
  248. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  249. $tcp2 set window 50
  250. set ftp1 [$tcp1 source ftp]
  251. set ftp2 [$tcp2 source ftp]
  252. ns at 1.0 "$ftp1 start"
  253. ns at 1.75 "$ftp2 produce 100"
  254. tcpDump $tcp1 1.0
  255. # trace only the bottleneck link
  256. [ns link $r1 $k1] trace [openTrace 6.0 test_no_bug]
  257. ns run
  258. }
  259. proc test_bug {} {
  260. global s1 s2 r1 k1
  261. create_testnet1
  262. [ns link $s1 $r1] set delay 3ms
  263. [ns link $r1 $s1] set delay 3ms 
  264. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  265. $tcp1 set window 50
  266. $tcp1 set bug-fix false
  267. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  268. $tcp2 set window 50
  269. $tcp2 set bug-fix false
  270. set ftp1 [$tcp1 source ftp]
  271. set ftp2 [$tcp2 source ftp]
  272. ns at 1.0 "$ftp1 start"
  273. ns at 1.75 "$ftp2 produce 100"
  274. tcpDump $tcp1 1.0
  275. # trace only the bottleneck link
  276. [ns link $r1 $k1] trace [openTrace 6.0 test_bug]
  277. ns run
  278. }
  279. proc test_reno1 {} {
  280. global s1 s2 r1 k1
  281. create_testnet
  282. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  283. $tcp1 set window 14
  284. set ftp1 [$tcp1 source ftp]
  285. ns at 1.0 "$ftp1 start"
  286. tcpDump $tcp1 1.0
  287. # trace only the bottleneck link
  288. [ns link $r1 $k1] trace [openTrace 5.0 test_reno1]
  289. ns run
  290. }
  291. proc test_reno {} {
  292. global s1 s2 r1 k1
  293. create_testnet
  294. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  295. $tcp1 set window 28
  296. $tcp1 set maxcwnd 14
  297. set ftp1 [$tcp1 source ftp]
  298. ns at 1.0 "$ftp1 start"
  299. tcpDump $tcp1 1.0
  300. # trace only the bottleneck link
  301. [ns link $r1 $k1] trace [openTrace 5.0 test_reno]
  302. ns run
  303. }
  304. proc test_renoA {} {
  305. global s1 s2 r1 k1
  306. create_testnet
  307. [ns link $r1 $k1] set queue-limit 8
  308. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  309. $tcp1 set window 28
  310. set tcp2 [ns_create_connection tcp-reno $s1 tcp-sink $k1 1]
  311. $tcp2 set window 4
  312. set tcp3 [ns_create_connection tcp-reno $s1 tcp-sink $k1 2]
  313. $tcp3 set window 4
  314. set ftp1 [$tcp1 source ftp]
  315. ns at 1.0 "$ftp1 start"
  316. set ftp2 [$tcp2 source ftp]
  317. ns at 1.2 "$ftp2 start"
  318. $ftp2 set maxpkts 7
  319. set ftp3 [$tcp3 source ftp]
  320. ns at 1.2 "$ftp3 start"
  321. $ftp3 set maxpkts 7
  322. tcpDump $tcp1 1.0
  323. tcpDump $tcp2 1.0
  324. tcpDump $tcp3 1.0
  325. # trace only the bottleneck link
  326. [ns link $r1 $k1] trace [openTrace 5.0 test_renoA]
  327. ns run
  328. }
  329. proc test_reno2 {} {
  330. global s1 s2 r1 k1
  331. create_testnet
  332. [ns link $r1 $k1] set queue-limit 9
  333. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  334. $tcp1 set window 50
  335. set tcp2 [ns_create_connection tcp-reno $s2 tcp-sink $k1 1]
  336. $tcp2 set window 20
  337. set ftp1 [$tcp1 source ftp]
  338. set ftp2 [$tcp2 source ftp]
  339. ns at 1.0 "$ftp1 start"
  340. ns at 1.0 "$ftp2 start"
  341. tcpDump $tcp1 1.0
  342. # trace only the bottleneck link
  343. [ns link $r1 $k1] trace [openTrace 10.0 test_reno2]
  344. ns run
  345. }
  346. proc test_reno3 {} {
  347. global s1 s2 r1 k1
  348. create_testnet
  349. [ns link $r1 $k1] set queue-limit 8
  350. [ns link $k1 $r1] set queue-limit 8
  351. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  352. $tcp1 set window 100
  353. set tcp2 [ns_create_connection tcp-reno $s2 tcp-sink $k1 1]
  354. $tcp2 set window 16
  355. set ftp1 [$tcp1 source ftp]
  356. set ftp2 [$tcp2 source ftp]
  357. ns at 1.0 "$ftp1 start"
  358. ns at 0.5 "$ftp2 start"
  359. tcpDump $tcp1 1.0
  360. # trace only the bottleneck link
  361. [ns link $r1 $k1] trace [openTrace 8.0 test_reno3]
  362. ns run
  363. }
  364. proc test_reno4 {} { 
  365.         global s1 s2 r1 r2 s3 s4
  366.         create_testnet2
  367.         [ns link $r1 $r2] set queue-limit 29
  368.         set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink-da $r2 0]
  369.         $tcp1 set window 80
  370.   $tcp1 set maxcwnd 40
  371.         set ftp1 [$tcp1 source ftp]
  372.         ns at 0.0 "$ftp1 start"
  373.         tcpDump $tcp1 1.0
  374.         # trace only the bottleneck link
  375.         [ns link $s1 $r1] trace [openTrace 2.0 test_reno4]
  376.         ns run
  377. }
  378. proc test_reno4a {} { 
  379.         global s1 s2 r1 r2 s3 s4
  380.         create_testnet2
  381.         [ns link $r1 $r2] set queue-limit 29
  382.         set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink-da $r2 0]
  383.         $tcp1 set window 40
  384. $tcp1 set maxcwnd 40
  385.         set ftp1 [$tcp1 source ftp]
  386.         ns at 0.0 "$ftp1 start"
  387.         tcpDump $tcp1 1.0
  388.         # trace only the bottleneck link
  389.         [ns link $s1 $r1] trace [openTrace 2.0 test_reno4]
  390.         ns run
  391. }
  392. proc test_reno5 {} {
  393.         global s1 s2 r1 k1
  394.         create_testnet
  395.         [ns link $r1 $k1] set queue-limit 9
  396.         set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  397.         $tcp1 set window 50
  398.         $tcp1 set bug-fix false
  399.         set tcp2 [ns_create_connection tcp-reno $s2 tcp-sink $k1 1]
  400.         $tcp2 set window 20
  401.         $tcp2 set bug-fix false
  402.         set ftp1 [$tcp1 source ftp]
  403.         set ftp2 [$tcp2 source ftp]
  404.         ns at 1.0 "$ftp1 start"
  405.         ns at 1.0 "$ftp2 start"
  406.         tcpDump $tcp1 1.0
  407.         # trace only the bottleneck link
  408.         [ns link $r1 $k1] trace [openTrace 10.0 test_reno5]
  409.         ns run
  410. }
  411. proc test_telnet {} {
  412. global s1 s2 r1 k1
  413. create_testnet
  414. [ns link $r1 $k1] set queue-limit 8
  415. [ns link $k1 $r1] set queue-limit 8
  416. set tcp1 [ns_create_connection tcp-reno $s1 tcp-sink $k1 0]
  417. set tcp2 [ns_create_connection tcp-reno $s2 tcp-sink $k1 1]
  418. set tcp3 [ns_create_connection tcp-reno $s2 tcp-sink $k1 2]
  419. set telnet1 [$tcp1 source telnet] ; $telnet1 set interval 1
  420. set telnet2 [$tcp2 source telnet] ; $telnet2 set interval 0
  421.   # Interval 0 designates the tcplib telnet interarrival distribution
  422. set telnet3 [$tcp3 source telnet] ; $telnet3 set interval 0
  423. ns at 0.0 "$telnet1 start"
  424. ns at 0.0 "$telnet2 start"
  425. ns at 0.0 "$telnet3 start"
  426. tcpDump $tcp1 5.0
  427. # trace only the bottleneck link
  428. [ns link $r1 $k1] trace [openTrace 50.0 test_telnet]
  429. # use a different seed each time
  430. puts seed=[ns random 0]
  431. ns run
  432. }
  433. proc test_delayed {} {
  434. global s1 s2 r1 k1
  435. create_testnet
  436. set tcp1 [ns_create_connection tcp $s1 tcp-sink-da $k1 0]
  437. $tcp1 set window 50
  438. # lookup up the sink and set it's delay interval
  439. [$k1 agent [$tcp1 dst-port]] set interval 100ms
  440. set ftp1 [$tcp1 source ftp]
  441. ns at 1.0 "$ftp1 start"
  442. tcpDump $tcp1 1.0
  443. # trace only the bottleneck link
  444. [ns link $r1 $k1] trace [openTrace 4.0 test_delayed]
  445. ns run
  446. }
  447. proc test_phase {} {
  448. global s1 s2 r1 k1
  449. create_testnet
  450. [ns link $s2 $r1] set delay 3ms
  451. [ns link $r1 $s2] set delay 3ms
  452. [ns link $r1 $k1] set queue-limit 16
  453. [ns link $k1 $r1] set queue-limit 100
  454. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  455. $tcp1 set window 32
  456. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  457. $tcp2 set window 32
  458. set ftp1 [$tcp1 source ftp]
  459. set ftp2 [$tcp2 source ftp]
  460. ns at 5.0 "$ftp1 start"
  461. ns at 1.0 "$ftp2 start"
  462. tcpDump $tcp1 5.0
  463. # trace only the bottleneck link
  464. [ns link $r1 $k1] trace [openTrace 25.0 test_phase]
  465. ns run
  466. }
  467. proc test_phase1 {} {
  468. global s1 s2 r1 k1
  469. create_testnet
  470. [ns link $s2 $r1] set delay 9.5ms
  471. [ns link $r1 $s2] set delay 9.5ms
  472. [ns link $r1 $k1] set queue-limit 16
  473. [ns link $k1 $r1] set queue-limit 100
  474. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  475. $tcp1 set window 32
  476. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  477. $tcp2 set window 32
  478. set ftp1 [$tcp1 source ftp]
  479. set ftp2 [$tcp2 source ftp]
  480. ns at 5.0 "$ftp1 start"
  481. ns at 1.0 "$ftp2 start"
  482. tcpDump $tcp1 5.0
  483. # trace only the bottleneck link
  484. [ns link $r1 $k1] trace [openTrace 25.0 test_phase1]
  485. ns run
  486. }
  487. proc test_phase2 {} {
  488.         global s1 s2 r1 k1
  489.         create_testnet  
  490.         [ns link $s2 $r1] set delay 3ms
  491.         [ns link $r1 $s2] set delay 3ms
  492.         [ns link $r1 $k1] set queue-limit 16
  493.         [ns link $k1 $r1] set queue-limit 100
  494.         set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  495.         $tcp1 set window 32
  496.         $tcp1 set overhead 0.01
  497.         set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  498.         $tcp2 set window 32
  499.         $tcp2 set overhead 0.01
  500.         
  501.         set ftp1 [$tcp1 source ftp]
  502.         set ftp2 [$tcp2 source ftp]
  503.  
  504.         ns at 5.0 "$ftp1 start"
  505.         ns at 1.0 "$ftp2 start"
  506.         
  507.         tcpDump $tcp1 5.0
  508.  
  509.         # trace only the bottleneck link
  510.         [ns link $r1 $k1] trace [openTrace 25.0 test_phase2]
  511.         ns run
  512. }
  513. proc test_timers {} {
  514. global s1 s2 r1 k1
  515. create_testnet
  516. [ns link $r1 $k1] set queue-limit 2
  517. [ns link $k1 $r1] set queue-limit 100
  518. set tcp1 [ns_create_connection tcp $s1 tcp-sink-da $k1 0]
  519. $tcp1 set window 4
  520. # lookup up the sink and set it's delay interval
  521. [$k1 agent [$tcp1 dst-port]] set interval 100ms
  522. set tcp2 [ns_create_connection tcp $s2 tcp-sink-da $k1 1]
  523. $tcp2 set window 4
  524. # lookup up the sink and set it's delay interval
  525. [$k1 agent [$tcp2 dst-port]] set interval 100ms
  526. set ftp1 [$tcp1 source ftp]
  527. set ftp2 [$tcp2 source ftp]
  528. ns at 1.0 "$ftp1 start"
  529. ns at 1.3225 "$ftp2 start"
  530. tcpDump $tcp1 5.0
  531. # trace only the bottleneck link
  532. [ns link $r1 $k1] trace [openTrace 10.0 test_timers]
  533. ns run
  534. }
  535. proc test_stats {} {
  536. global s1 s2 r1 k1
  537. create_testnet
  538. [ns link $s2 $r1] set delay 200ms
  539. [ns link $r1 $s2] set delay 200ms
  540. [ns link $r1 $k1] set queue-limit 10
  541. [ns link $k1 $r1] set queue-limit 10
  542. set tcp1 [ns_create_connection tcp $s1 tcp-sink $k1 0]
  543. $tcp1 set window 30
  544. set tcp2 [ns_create_connection tcp $s2 tcp-sink $k1 1]
  545. $tcp2 set window 30
  546. set ftp1 [$tcp1 source ftp]
  547. set ftp2 [$tcp2 source ftp]
  548. ns at 1.0 "$ftp1 start"
  549. ns at 1.0 "$ftp2 start"
  550. tcpDumpAll $tcp1 5.0 tcp1
  551. tcpDumpAll $tcp2 5.0 tcp2
  552. # trace only the bottleneck link
  553. [ns link $r1 $k1] trace [openTrace 10.0 test_stats]
  554. ns run
  555. }
  556. if { $argc != 1 } {
  557. puts stderr {usage: ns test-suite.tcl [ tahoe1 tahoe2 ... reno reno2 ... ]}
  558. exit 1
  559. }
  560. if { "[info procs test_$argv]" != "test_$argv" } {
  561. puts stderr "test-suite.tcl: no such test: $argv"
  562. }
  563. test_$argv