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

通讯编程

开发平台:

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/test/test-suite-routed.tcl,v 1.10 2006/01/24 23:00:07 sallyfloyd 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 individual tests:
  41. # ns test-suite.tcl tahoe1
  42. # ns test-suite.tcl tahoe2
  43. # ...
  44. #
  45. set dir [pwd]
  46. catch "cd tcl/test"
  47. source misc.tcl
  48. Agent/TCP set tcpTick_ 0.1
  49. # The default for tcpTick_ is being changed to reflect a changing reality.
  50. Agent/TCP set rfc2988_ false
  51. # The default for rfc2988_ is being changed to true.
  52. source topologies.tcl
  53. catch "cd $dir"
  54. # FOR UPDATING GLOBAL DEFAULTS:
  55. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  56. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  57. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  58. Agent/TCP set minrto_ 1
  59. # default changed on 10/14/2004.
  60. Agent/TCP set useHeaders_ false
  61. # The default is being changed to useHeaders_ true.
  62. Class Test/tahoe1 -superclass TestSuite
  63. Test/tahoe1 instproc init topo {
  64. $self instvar net_ defNet_ test_
  65. set net_ $topo
  66. set defNet_ net0
  67. set test_ tahoe
  68. $self next
  69. }
  70. Test/tahoe1 instproc run {} {
  71. $self instvar ns_ node_ testName_
  72. # Set up TCP connection
  73. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  74. $tcp1 set window_ 50
  75. # Set up FTP source
  76. set ftp1 [$tcp1 attach-app FTP]
  77. $ns_ at 0.0 "$ftp1 start"
  78. $self tcpDump $tcp1 1.0
  79. # Trace only the bottleneck link
  80. #
  81. # Actually, we now trace all activity at the node around the
  82. # bottleneck link.  This allows us to track acks, as well
  83. # packets taking any alternate paths around the bottleneck
  84. # link.
  85. #
  86. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  87. $ns_ run
  88. }
  89. Class Test/tahoe2 -superclass TestSuite
  90. Test/tahoe2 instproc init topo {
  91. $self instvar net_ defNet_ test_
  92. set net_ $topo
  93. set defNet_ net0
  94. set test_ tahoe2
  95. $self next
  96. }
  97. Test/tahoe2 instproc run {} {
  98. $self instvar ns_ node_ testName_
  99. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  100. $tcp1 set window_ 14
  101. set ftp1 [$tcp1 attach-app FTP]
  102. $ns_ at 1.0 "$ftp1 start"
  103. $self tcpDump $tcp1 1.0
  104. # Trace only the bottleneck link
  105. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  106. $ns_ run
  107. }
  108. Class Test/tahoe3 -superclass TestSuite
  109. Test/tahoe3 instproc init topo {
  110. $self instvar net_ defNet_ test_
  111. set net_ $topo
  112. set defNet_ net0
  113. set test_ tahoe3
  114. $self next
  115. }
  116. Test/tahoe3 instproc run {} {
  117. $self instvar ns_ node_ testName_
  118. $ns_ queue-limit $node_(r1) $node_(k1) 8   
  119. $ns_ queue-limit $node_(k1) $node_(r1) 8   
  120. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  121. $tcp1 set window_ 100
  122. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  123. $tcp2 set window_ 16
  124. set ftp1 [$tcp1 attach-app FTP]
  125. set ftp2 [$tcp2 attach-app FTP]
  126. $ns_ at 1.0 "$ftp1 start"
  127. $ns_ at 0.5 "$ftp2 start"
  128. $self tcpDump $tcp1 1.0
  129. # Trace only the bottleneck link
  130. $self traceQueues $node_(r1) [$self openTrace 8.0 $testName_]
  131. $ns_ run
  132. }
  133. Class Test/tahoe4 -superclass TestSuite
  134. Test/tahoe4 instproc init topo {
  135. $self instvar net_ defNet_ test_
  136. set net_ $topo
  137. set defNet_ net0
  138. set test_ tahoe4
  139. $self next
  140. }
  141. Test/tahoe4 instproc run {} {
  142. $self instvar ns_ node_ testName_
  143. $ns_ delay $node_(s2) $node_(r1) 200ms
  144. $ns_ delay $node_(r1) $node_(s2) 200ms
  145. $ns_ queue-limit $node_(r1) $node_(k1) 11
  146. $ns_ queue-limit $node_(k1) $node_(r1) 11  
  147. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  148. $tcp1 set window_ 30
  149. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  150. $tcp2 set window_ 30
  151. set ftp1 [$tcp1 attach-app FTP]
  152. set ftp2 [$tcp2 attach-app FTP]
  153. $ns_ at 0.0 "$ftp1 start"
  154. $ns_ at 0.0 "$ftp2 start"
  155. $self tcpDump $tcp1 5.0
  156. # Trace only the bottleneck link
  157. $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  158. $ns_ run
  159. }
  160. Class Test/tahoe5 -superclass TestSuite
  161. Test/tahoe5 instproc init topo {
  162.     $self instvar net_ defNet_ test_
  163.     set net_ $topo
  164.     set defNet_ net1
  165.     set test_ tahoe5
  166.     $self next
  167. }
  168. Test/tahoe5 instproc run {} {
  169.     $self instvar ns_ node_ testName_
  170.     $ns_ delay $node_(s1) $node_(r1) 3ms
  171.     $ns_ delay $node_(r1) $node_(s1) 3ms
  172.     set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  173.     $tcp1 set window_ 50
  174.     $tcp1 set bugFix_ false
  175.     set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  176.     $tcp2 set window_ 50
  177.     $tcp2 set bugFix_ false
  178.     set ftp1 [$tcp1 attach-app FTP]
  179.     set ftp2 [$tcp2 attach-app FTP]
  180.     $ns_ at 1.0 "$ftp1 start"
  181.     $ns_ at 1.75 "$ftp2 produce 100"
  182.     $self tcpDump $tcp1 1.0
  183.     # trace only the bottleneck link
  184.     $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  185.     $ns_ run
  186. }
  187. Class Test/no_bug -superclass TestSuite
  188. Test/no_bug instproc init topo {
  189. $self instvar net_ defNet_ test_
  190. set net_ $topo
  191. set defNet_ net1
  192. set test_ no_bug
  193. $self next
  194. }
  195. Test/no_bug instproc run {} {
  196. $self instvar ns_ node_ testName_
  197. $ns_ delay $node_(s1) $node_(r1) 3ms
  198. $ns_ delay $node_(r1) $node_(s1) 3ms
  199. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  200. $tcp1 set window_ 50
  201. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  202. $tcp2 set window_ 50
  203. set ftp1 [$tcp1 attach-app FTP]
  204. set ftp2 [$tcp2 attach-app FTP]
  205. $ns_ at 1.0 "$ftp1 start"
  206. $ns_ at 1.75 "$ftp2 produce 100"
  207. $self tcpDump $tcp1 1.0
  208. # Trace only the bottleneck link
  209. $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  210. $ns_ run
  211. }
  212. Class Test/bug -superclass TestSuite
  213. Test/bug instproc init topo {
  214. $self instvar net_ defNet_ test_
  215. set net_ $topo
  216. set defNet_ net1
  217. set test_ bug
  218. $self next
  219. }
  220. Test/bug instproc run {} {
  221. $self instvar ns_ node_ testName_
  222. $ns_ delay $node_(s1) $node_(r1) 3ms
  223. $ns_ delay $node_(r1) $node_(s1) 3ms
  224. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  225. $tcp1 set window_ 50
  226. $tcp1 set bugFix_ false
  227. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  228. $tcp2 set window_ 50
  229. $tcp2 set bugFix_ false
  230. set ftp1 [$tcp1 attach-app FTP]
  231. set ftp2 [$tcp2 attach-app FTP]
  232. $ns_ at 1.0 "$ftp1 start"
  233. $ns_ at 1.75 "$ftp2 produce 100"
  234. $self tcpDump $tcp1 1.0
  235. # Trace only the bottleneck link
  236. $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  237. $ns_ run
  238. }
  239. Class Test/reno1 -superclass TestSuite
  240. Test/reno1 instproc init topo {
  241. $self instvar net_ defNet_ test_
  242. set net_ $topo
  243. set defNet_ net0
  244. set test_ reno1
  245. $self next
  246. }
  247. Test/reno1 instproc run {} {
  248. $self instvar ns_ node_ testName_
  249. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  250. $tcp1 set window_ 14
  251. set ftp1 [$tcp1 attach-app FTP]
  252. $ns_ at 1.0 "$ftp1 start"
  253. $self tcpDump $tcp1 1.0
  254. # trace only the bottleneck link
  255. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  256. $ns_ run
  257. }
  258. Class Test/reno -superclass TestSuite
  259. Test/reno instproc init topo {
  260. $self instvar net_ defNet_ test_
  261. set net_ $topo
  262. set defNet_ net0
  263. set test_ reno
  264. $self next
  265. }
  266. Test/reno instproc run {} {
  267. $self instvar ns_ node_ testName_
  268. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  269. $tcp1 set window_ 28
  270. $tcp1 set maxcwnd_ 14
  271. set ftp1 [$tcp1 attach-app FTP]
  272. $ns_ at 1.0 "$ftp1 start"
  273. $self tcpDump $tcp1 1.0
  274. # trace only the bottleneck link
  275. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  276. $ns_ run
  277. }
  278. Class Test/renoA -superclass TestSuite
  279. Test/renoA instproc init topo {
  280. $self instvar net_ defNet_ test_
  281. set net_ $topo
  282. set defNet_ net0
  283. set test_ renoA
  284. $self next
  285. }
  286. Test/renoA instproc run {} {
  287. $self instvar ns_ node_ testName_
  288. $ns_ queue-limit $node_(r1) $node_(k1) 8
  289. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  290. $tcp1 set window_ 28
  291. set tcp2 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 1]
  292. $tcp2 set window_ 4
  293. set tcp3 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 2]
  294. $tcp3 set window_ 4
  295. set ftp1 [$tcp1 attach-app FTP]
  296. $ns_ at 1.0 "$ftp1 start"
  297. set ftp2 [$tcp2 attach-app FTP]
  298. $ns_ at 1.2 "$ftp2 produce 7"
  299. set ftp3 [$tcp3 attach-app FTP]
  300. $ns_ at 1.2 "$ftp3 produce 7"
  301. $self tcpDump $tcp1 1.0
  302. $self tcpDump $tcp2 1.0
  303. $self tcpDump $tcp3 1.0
  304. # Trace only the bottleneck link
  305. $self traceQueues $node_(r1) [$self openTrace 5.0 $testName_]
  306. $ns_ run
  307. }
  308. Class Test/reno2 -superclass TestSuite
  309. Test/reno2 instproc init topo {
  310. $self instvar net_ defNet_ test_
  311. set net_ $topo
  312. set defNet_ net0
  313. set test_ reno2
  314. $self next
  315. }
  316. Test/reno2 instproc run {} {
  317. $self instvar ns_ node_ testName_
  318. $ns_ queue-limit $node_(r1) $node_(k1) 9
  319. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  320. $tcp1 set window_ 50
  321. set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1]
  322. $tcp2 set window_ 20
  323. set ftp1 [$tcp1 attach-app FTP]
  324. set ftp2 [$tcp2 attach-app FTP]
  325. $ns_ at 1.0 "$ftp1 start"
  326. $ns_ at 1.0 "$ftp2 start"
  327. $self tcpDump $tcp1 1.0
  328. # Trace only the bottleneck link
  329. $self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  330. $ns_ run
  331. }
  332. Class Test/reno3 -superclass TestSuite
  333. Test/reno3 instproc init topo {
  334. $self instvar net_ defNet_ test_
  335. set net_ $topo
  336. set defNet_ net0
  337. set test_ reno3
  338. $self next
  339. }
  340. Test/reno3 instproc run {} {
  341. $self instvar ns_ node_ testName_
  342. $ns_ queue-limit $node_(r1) $node_(k1) 8
  343. $ns_ queue-limit $node_(k1) $node_(r1) 8
  344. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  345. $tcp1 set window_ 100
  346. set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1]
  347. $tcp2 set window_ 16
  348. set ftp1 [$tcp1 attach-app FTP]
  349. set ftp2 [$tcp2 attach-app FTP]
  350. $ns_ at 1.0 "$ftp1 start"
  351. $ns_ at 0.5 "$ftp2 start"
  352. $self tcpDump $tcp1 1.0
  353. # Trace only the bottleneck link
  354. $self traceQueues $node_(r1) [$self openTrace 8.0 $testName_]
  355. $ns_ run
  356. }
  357. Class Test/reno4 -superclass TestSuite
  358. Test/reno4 instproc init topo {
  359. $self instvar net_ defNet_ test_
  360. set net_ $topo
  361. set defNet_ net2
  362. set test_ reno4
  363. $self next
  364. }
  365. Test/reno4 instproc run {} {
  366. $self instvar ns_ node_ testName_
  367. $ns_ queue-limit $node_(r1) $node_(r2) 29
  368. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink/DelAck $node_(r2) 0]
  369. $tcp1 set window_ 80
  370. $tcp1 set maxcwnd_ 40
  371. set ftp1 [$tcp1 attach-app FTP]
  372. $ns_ at 0.0 "$ftp1 start"
  373. $self tcpDump $tcp1 1.0
  374. # Trace only the bottleneck link
  375. $self traceQueues $node_(s1) [$self openTrace 2.0 $testName_]
  376. $ns_ run
  377. }
  378. Class Test/reno4a -superclass TestSuite
  379. Test/reno4a instproc init topo {
  380. $self instvar net_ defNet_ test_
  381. set net_ $topo
  382. set defNet_ net2
  383. set test_ reno4a
  384. $self next
  385. }
  386. Test/reno4a instproc run {} {
  387. $self instvar ns_ node_ testName_
  388. $ns_ queue-limit $node_(r1) $node_(r2) 29
  389. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink/DelAck $node_(r2) 0]
  390. $tcp1 set window_ 40
  391. $tcp1 set maxcwnd_ 40
  392. set ftp1 [$tcp1 attach-app FTP]
  393. $ns_ at 0.0 "$ftp1 start"
  394. $self tcpDump $tcp1 1.0
  395. # Trace only the bottleneck link
  396. $self traceQueues $node_(s1) [$self openTrace 2.0 $testName_]
  397. $ns_ run
  398. }
  399. Class Test/reno5 -superclass TestSuite
  400. Test/reno5 instproc init topo {
  401. $self instvar net_ defNet_ test_
  402. set net_ $topo
  403. set defNet_ net0
  404. set test_ reno5
  405. $self next
  406. }
  407. Test/reno5 instproc run {} {
  408. $self instvar ns_ node_ testName_
  409. $ns_ queue-limit $node_(r1) $node_(k1) 9
  410. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  411. $tcp1 set window_ 50
  412. $tcp1 set bugFix_ false
  413. set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1]
  414. $tcp2 set window_ 20
  415. $tcp2 set bugFix_ false
  416. set ftp1 [$tcp1 attach-app FTP]
  417. set ftp2 [$tcp2 attach-app FTP]
  418. $ns_ at 1.0 "$ftp1 start"
  419. $ns_ at 1.0 "$ftp2 start"
  420. $self tcpDump $tcp1 1.0
  421. # Trace only the bottleneck link
  422. $self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  423. $ns_ run
  424. }
  425. Class Test/reno5a -superclass TestSuite
  426. Test/reno5a instproc init topo {
  427.     $self instvar net_ defNet_ test_
  428.     set net_ $topo
  429.     set defNet_ net1
  430.     set test_ reno5a
  431.     $self next
  432. }
  433. Test/reno5a instproc run {} {
  434.     $self instvar ns_ node_ testName_
  435.     $ns_ delay $node_(s1) $node_(r1) 3ms
  436.     $ns_ delay $node_(r1) $node_(s1) 3ms
  437.     set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  438.     $tcp1 set window_ 50
  439.     $tcp1 set bugFix_ false
  440.     set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1]
  441.     $tcp2 set window_ 50
  442.     $tcp2 set bugFix_ false
  443.     set ftp1 [$tcp1 attach-app FTP]
  444.     set ftp2 [$tcp2 attach-app FTP]
  445.     $ns_ at 1.0 "$ftp1 start"
  446.     $ns_ at 1.75 "$ftp2 produce 100"
  447.     $self tcpDump $tcp1 1.0
  448.     # trace only the bottleneck link
  449.     $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  450.     $ns_ run
  451. }
  452. Class XTest/telnet -superclass TestSuite
  453. XTest/telnet instproc init topo {
  454. $self instvar net_ defNet_ test_
  455. set net_ $topo
  456. set defNet_ net0
  457. set test_ telnet
  458. $self next
  459. }
  460. XTest/telnet instproc run {} {
  461. $self instvar ns_ node_ testName_
  462. $ns_ queue-limit $node_(r1) $node_(k1) 8
  463. $ns_ queue-limit $node_(k1) $node_(r1) 8
  464. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(k1) 0]
  465. set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 1]
  466. set tcp3 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(k1) 2]
  467. set telnet1 [$tcp1 attach-app TELNET]; $telnet1 set interval_ 1
  468. set telnet2 [$tcp2 attach-app TELNET]; $telnet2 set interval_ 0
  469. # Interval 0 designates the tcplib telnet interarrival distribution
  470. set telnet3 [$tcp3 attach-app TELNET]; $telnet3 set interval_ 0
  471. $ns_ at 0.0 "$telnet1 start"
  472. $ns_ at 0.0 "$telnet2 start"
  473. $ns_ at 0.0 "$telnet3 start"
  474. $self tcpDump $tcp1 5.0
  475. # Trace only the bottleneck link
  476. $self traceQueues $node_(r1) [$self openTrace 50.0 $testName_]
  477. # use a different seed each time
  478. puts seed=[$ns_ random 0]
  479. $ns_ run
  480. }
  481. Class Test/delayed -superclass TestSuite
  482. Test/delayed instproc init topo {
  483. $self instvar net_ defNet_ test_
  484. set net_ $topo
  485. set defNet_ net0
  486. set test_ delayed
  487. $self next
  488. }
  489. Test/delayed instproc run {} {
  490. $self instvar ns_ node_ testName_
  491. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink/DelAck $node_(k1) 0]
  492. $tcp1 set window_ 50
  493. # lookup up the sink and set it's delay interval
  494. [$node_(k1) agent [$tcp1 dst-port]] set interval 100ms
  495. set ftp1 [$tcp1 attach-app FTP];
  496. $ns_ at 1.0 "$ftp1 start"
  497. $self tcpDump $tcp1 1.0
  498. # Trace only the bottleneck link
  499. $self traceQueues $node_(r1) [$self openTrace 4.0 $testName_]
  500. $ns_ run
  501. }
  502. Class Test/phase -superclass TestSuite
  503. Test/phase instproc init topo {
  504. $self instvar net_ defNet_ test_
  505. set net_ $topo
  506. set defNet_ net0
  507. set test_ phase
  508. $self next
  509. }
  510. Test/phase instproc run {} {
  511. $self instvar ns_ node_ testName_
  512. $ns_ delay $node_(s2) $node_(r1) 3ms
  513. $ns_ delay $node_(r1) $node_(s2) 3ms
  514. $ns_ queue-limit $node_(r1) $node_(k1) 16
  515. $ns_ queue-limit $node_(k1) $node_(r1) 100
  516. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  517. $tcp1 set window_ 32 
  518. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  519. $tcp2 set window_ 32 
  520. set ftp1 [$tcp1 attach-app FTP]
  521. set ftp2 [$tcp2 attach-app FTP]
  522. $ns_ at 5.0 "$ftp1 start"
  523. $ns_ at 1.0 "$ftp2 start"
  524. $self tcpDump $tcp1 5.0
  525. # Trace only the bottleneck link
  526. $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  527. $ns_ run
  528. }
  529. Class Test/phase1 -superclass TestSuite
  530. Test/phase1 instproc init topo {
  531. $self instvar net_ defNet_ test_
  532. set net_ $topo
  533. set defNet_ net0
  534. set test_ phase1
  535. $self next
  536. }
  537. Test/phase1 instproc run {} {
  538. $self instvar ns_ node_ testName_
  539. $ns_ delay $node_(s2) $node_(r1) 9.5ms
  540. $ns_ delay $node_(r1) $node_(s2) 9.5ms
  541. $ns_ queue-limit $node_(r1) $node_(k1) 16
  542. $ns_ queue-limit $node_(k1) $node_(r1) 100
  543. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  544. $tcp1 set window_ 32 
  545. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  546. $tcp2 set window_ 32 
  547. set ftp1 [$tcp1 attach-app FTP]
  548. set ftp2 [$tcp2 attach-app FTP]
  549. $ns_ at 5.0 "$ftp1 start"
  550. $ns_ at 1.0 "$ftp2 start"
  551. $self tcpDump $tcp1 5.0
  552. # Trace only the bottleneck link
  553. $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  554. $ns_ run
  555. }
  556. Class Test/phase2 -superclass TestSuite
  557. Test/phase2 instproc init topo {
  558. $self instvar net_ defNet_ test_
  559. set net_ $topo
  560. set defNet_ net0
  561. set test_ phase2
  562. $self next
  563. }
  564. Test/phase2 instproc run {} {
  565. $self instvar ns_ node_ testName_
  566. $ns_ delay $node_(s2) $node_(r1) 3ms
  567. $ns_ delay $node_(r1) $node_(s2) 3ms
  568. $ns_ queue-limit $node_(r1) $node_(k1) 16
  569. $ns_ queue-limit $node_(k1) $node_(r1) 100
  570. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  571. $tcp1 set window_ 32 
  572. $tcp1 set overhead_ 0.01
  573. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  574. $tcp2 set window_ 32 
  575. $tcp2 set overhead_ 0.01
  576. set ftp1 [$tcp1 attach-app FTP]
  577. set ftp2 [$tcp2 attach-app FTP]
  578. $ns_ at 5.0 "$ftp1 start"
  579. $ns_ at 1.0 "$ftp2 start"
  580. $self tcpDump $tcp1 5.0
  581. # Trace only the bottleneck link
  582. $self traceQueues $node_(r1) [$self openTrace 25.0 $testName_]
  583. $ns_ run
  584. }
  585. Class Test/timers -superclass TestSuite
  586. Test/timers instproc init topo {
  587. $self instvar net_ defNet_ test_
  588. set net_ $topo
  589. set defNet_ net0
  590. set test_ timers
  591. $self next
  592. }
  593. Test/timers instproc run {} {
  594. $self instvar ns_ node_ testName_
  595. $ns_ queue-limit $node_(r1) $node_(k1) 2
  596. $ns_ queue-limit $node_(k1) $node_(r1) 100
  597. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink/DelAck $node_(k1) 0]
  598. $tcp1 set window_ 4
  599. # look up the sink and set its delay interval
  600. [$node_(k1) agent [$tcp1 dst-port]] set interval_ 100ms
  601. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink/DelAck $node_(k1) 1]
  602. $tcp2 set window_ 4
  603. # look up the sink and set its delay interval
  604. [$node_(k1) agent [$tcp2 dst-port]] set interval_ 100ms
  605. set ftp1 [$tcp1 attach-app FTP]
  606. set ftp2 [$tcp2 attach-app FTP]
  607. $ns_ at 1.0 "$ftp1 start"
  608. $ns_ at 1.3225 "$ftp2 start"
  609. $self tcpDump $tcp1 5.0
  610. # Trace only the bottleneck link
  611. $self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  612. $ns_ run
  613. }
  614. Class Test/stats -superclass TestSuite
  615. Test/stats instproc init topo {
  616. $self instvar net_ defNet_ test_
  617. set net_ $topo
  618. set defNet_ net0
  619. set test_ stats
  620. $self next
  621. }
  622. Test/stats instproc printpkts { label tcp } {
  623. puts "tcp $label total_packets_acked [$tcp set ack_]"
  624. }
  625. #XXX Still unfinished in ns-2
  626. Test/stats instproc printdrops { label link } {
  627. puts "link $label total_drops [$link stat 0 drops]"
  628. puts "link $label total_packets [$link stat 0 packets]"
  629. puts "link $label total_bytes [$link stat 0 bytes]"
  630. }
  631. Test/stats instproc printstop { stoptime } {
  632. puts "stop-time $stoptime"
  633. }
  634. Test/stats instproc run {} {
  635. $self instvar ns_ node_ testName_
  636. $ns_ delay $node_(s2) $node_(r1) 200ms
  637. $ns_ delay $node_(r1) $node_(s2) 200ms
  638. $ns_ queue-limit $node_(r1) $node_(k1) 10
  639. $ns_ queue-limit $node_(k1) $node_(r1) 10
  640. set stoptime 10.1 
  641. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 0]
  642. $tcp1 set window_ 30
  643. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(k1) 1]
  644. $tcp2 set window_ 30
  645. set ftp1 [$tcp1 attach-app FTP]
  646. set ftp2 [$tcp2 attach-app FTP]
  647. $ns_ at 1.0 "$ftp1 start"
  648. $ns_ at 1.0 "$ftp2 start"
  649. $self tcpDumpAll $tcp1 5.0 tcp1
  650. $self tcpDumpAll $tcp2 5.0 tcp2
  651. $ns_ at $stoptime "$self printstop $stoptime"
  652. $ns_ at $stoptime "$self printpkts 1 $tcp1"
  653. #XXX Awaiting completion of link stats
  654. #$ns_ at $stoptime "$self printdrops 1 [$ns_ link $node_(r1) $node_(k1)]"
  655. # trace only the bottleneck link
  656. $self traceQueues $node_(r1) [$self openTrace $stoptime $testName_]
  657. $ns_ run
  658. }
  659. Class Test/tahoe_long -superclass TestSuite
  660. Test/tahoe_long instproc init topo {
  661. $self instvar net_ defNet_ test_
  662. set net_ $topo
  663. set defNet_ net3
  664. set test_ tahoe_long
  665. $self next
  666. }
  667. Test/tahoe_long instproc run {} {
  668. $self instvar ns_ node_ testName_
  669. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(s3) 0]
  670. $tcp1 set window_ 100
  671. set tcp2 [$ns_ create-connection TCP $node_(s2) TCPSink $node_(s3) 1]
  672. $tcp2 set window_ 16
  673. set ftp1 [$tcp1 attach-app FTP]
  674. set ftp2 [$tcp2 attach-app FTP]
  675. $ns_ at 1.0 "$ftp1 start"
  676. $ns_ at 0.5 "$ftp2 start"
  677. $self tcpDump $tcp1 5.0
  678. # Trace only the bottleneck link
  679. set traceFile [$self openTrace 15.0 $testName_]
  680. $self traceQueues $node_(r1) $traceFile
  681. foreach i [list {r2 r3} {r3 r4}] {
  682. set L [$ns_ link $node_([lindex $i 0]) $node_([lindex $i 1])]
  683. $L trace-dynamics $ns_ $traceFile
  684. $L trace-dynamics $ns_ stdout
  685. }
  686. $ns_ run
  687. }
  688. Class Test/reno_long -superclass TestSuite
  689. Test/reno_long instproc init topo {
  690. $self instvar net_ defNet_ test_
  691. set net_ $topo
  692. set defNet_ net3
  693. set test_ reno_long
  694. $self next
  695. }
  696. Test/reno_long instproc run {} {
  697. $self instvar ns_ node_ testName_
  698. set tcp1 [$ns_ create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 0]
  699. $tcp1 set window_ 100
  700. set tcp2 [$ns_ create-connection TCP/Reno $node_(s2) TCPSink $node_(s3) 1]
  701. $tcp2 set window_ 16
  702. # $tcp1 set bugFix_ false
  703. # $tcp2 set bugFix_ false
  704. set ftp1 [$tcp1 attach-app FTP]
  705. set ftp2 [$tcp2 attach-app FTP]
  706. $ns_ at 1.0 "$ftp1 start"
  707. $ns_ at 0.5 "$ftp2 start"
  708. $self tcpDump $tcp1 5.0
  709. # Trace only the bottleneck link
  710. set traceFile [$self openTrace 15.0 $testName_]
  711. $self traceQueues $node_(r1) $traceFile
  712. foreach i [list {r2 r3} {r3 r4}] {
  713. set L [$ns_ link $node_([lindex $i 0]) $node_([lindex $i 1])]
  714. $L trace-dynamics $ns_ $traceFile
  715. $L trace-dynamics $ns_ stdout
  716. }
  717. $ns_ run
  718. }
  719. TestSuite runTest
  720. ### Local Variables:
  721. ### mode: tcl
  722. ### tcl-indent-level: 8
  723. ### tcl-default-application: ns
  724. ### End: