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

通讯编程

开发平台:

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-links.tcl,v 1.21 2006/01/24 23:00:06 sallyfloyd Exp $
  34. #
  35. # To view a list of available tests to run with this script:
  36. # ns test-suite-tcpVariants.tcl
  37. #
  38. source misc_simple.tcl
  39. remove-all-packet-headers       ; # removes all except common
  40. add-packet-header Flags IP TCP  ; # hdrs reqd for validation test
  41.  
  42. # FOR UPDATING GLOBAL DEFAULTS:
  43. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  44. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  45. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  46. Agent/TCP set minrto_ 1
  47. # default changed on 10/14/2004.
  48. source support.tcl
  49. Trace set show_tcphdr_ 1
  50. set wrap 90
  51. set wrap1 [expr 90 * 512 + 40]
  52. Class Topology
  53. Topology instproc node? num {
  54.     $self instvar node_
  55.     return $node_($num)
  56. }
  57. #
  58. #
  59. Class Topology/net4 -superclass Topology
  60. Topology/net4 instproc init ns {
  61.     $self instvar node_
  62.     set node_(s1) [$ns node]
  63.     set node_(s2) [$ns node]
  64.     set node_(r1) [$ns node]
  65.     set node_(k1) [$ns node]
  66.     $self next
  67.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  68.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  69.     $ns duplex-link $node_(r1) $node_(k1) 80Kb 10ms DropTail
  70.     $ns queue-limit $node_(r1) $node_(k1) 8
  71.     $ns queue-limit $node_(k1) $node_(r1) 8
  72. }
  73. Class Topology/net4a -superclass Topology
  74. Topology/net4a instproc init ns {
  75.     $self instvar node_
  76.     set node_(s1) [$ns node]
  77.     set node_(s2) [$ns node]
  78.     set node_(r1) [$ns node]
  79.     set node_(k1) [$ns node]
  80.     $self next
  81.     $ns duplex-link $node_(s1) $node_(r1) 100Mb 0ms DropTail
  82.     $ns duplex-link $node_(s2) $node_(r1) 100Mb 0ms DropTail
  83.     $ns duplex-link $node_(r1) $node_(k1) 10Mb 10ms DropTail
  84.     $ns queue-limit $node_(r1) $node_(k1) 100
  85.     $ns queue-limit $node_(k1) $node_(r1) 100
  86. }
  87. TestSuite instproc finish file {
  88. global quiet wrap PERL
  89.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  90.           $PERL ../../bin/raw2xg -a -s 0.01 -m $wrap -t $file > temp.rands
  91.         exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  92.           $PERL ../../bin/raw2xg -a -c -p -s 0.01 -m $wrap -t $file >> 
  93.           temp.rands
  94. if {$quiet == "false"} {
  95. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  96. }
  97.         ## now use default graphing tool to make a data file
  98. ## if so desired
  99.         exit 0
  100. }
  101. TestSuite instproc printtimers { tcp time} {
  102. global quiet
  103. if {$quiet == "false"} {
  104.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  105. }
  106. }
  107. TestSuite instproc printtimersAll { tcp time interval } {
  108.         $self instvar dump_inst_ ns_
  109.         if ![info exists dump_inst_($tcp)] {
  110.                 set dump_inst_($tcp) 1
  111.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  112.                 return
  113.         }
  114. set newTime [expr [$ns_ now] + $interval]
  115. $ns_ at $time "$self printtimers $tcp $time"
  116.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  117. }
  118. TestSuite instproc setup {tcptype} {
  119. }
  120. # Definition of test-suite tests
  121. ###################################################
  122. ## Plain link
  123. ###################################################
  124. Class Test/links -superclass TestSuite
  125. Test/links instproc init {} {
  126. $self instvar net_ test_
  127. set net_ net4
  128. set test_ links
  129. $self next pktTraceFile
  130. }
  131. Test/links instproc run {} {
  132. global wrap wrap1
  133.         $self instvar ns_ node_ testName_
  134. $self setTopo
  135. set fid 1
  136. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  137.         $tcp1 set window_ 1
  138.         set ftp1 [$tcp1 attach-app FTP]
  139.         $ns_ at 0.0 "$ftp1 start"
  140.         $self tcpDump $tcp1 5.0
  141.         ###$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  142. $ns_ at 10.0 "$self cleanupAll $testName_"
  143.         $ns_ run
  144. }
  145. ###################################################
  146. ## Link with changing delay.
  147. ###################################################
  148. Class Test/changeDelay -superclass TestSuite
  149. Test/changeDelay instproc init {} {
  150. $self instvar net_ test_
  151. set net_ net4
  152. set test_ changeDelay
  153. $self next pktTraceFile
  154. }
  155. Test/changeDelay instproc run {} {
  156. global wrap wrap1
  157.         $self instvar ns_ node_ testName_
  158. $self setTopo
  159. set fid 1
  160. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  161.         $tcp1 set window_ 1
  162.         set ftp1 [$tcp1 attach-app FTP]
  163.         $ns_ at 0.0 "$ftp1 start"
  164. $ns_ at 2.0 "$ns_ delay $node_(r1) $node_(k1) 1000ms duplex"
  165. $ns_ at 8.0 "$ns_ delay $node_(r1) $node_(k1) 100ms duplex"
  166.         $self tcpDump $tcp1 5.0
  167.         ##$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  168. $ns_ at 10.0 "$self cleanupAll $testName_"
  169.         $ns_ run
  170. }
  171. ###################################################
  172. ## Link with changing delay, showing reordering.
  173. ###################################################
  174. Class Test/changeDelay1 -superclass TestSuite
  175. Test/changeDelay1 instproc init {} {
  176. $self instvar net_ test_
  177. set net_ net4a
  178. set test_ changeDelay1
  179. $self next pktTraceFile
  180. }
  181. Test/changeDelay1 instproc run {} {
  182. global wrap wrap1
  183.         $self instvar ns_ node_ testName_
  184. $self setTopo
  185. set fid 1
  186. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  187.         $tcp1 set window_ 80
  188.         set ftp1 [$tcp1 attach-app FTP]
  189.         $ns_ at 0.0 "$ftp1 start"
  190. $ns_ at 0.0 "$ns_ delay $node_(r1) $node_(k1) 100ms duplex"
  191. $ns_ at 2.0 "$ns_ delay $node_(r1) $node_(k1) 1ms duplex"
  192. $ns_ at 2.2 "$ns_ delay $node_(r1) $node_(k1) 100ms duplex"
  193.         $self tcpDump $tcp1 5.0
  194. $ns_ at 4.0 "$self cleanupAll $testName_"
  195.         $ns_ run
  196. }
  197. ###################################################
  198. ## Link with changing delay, with no reordering.
  199. ###################################################
  200. Class Test/changeDelay2 -superclass TestSuite
  201. Test/changeDelay2 instproc init {} {
  202. $self instvar net_ test_
  203. set net_ net4a
  204. set test_ changeDelay2
  205. DelayLink set avoidReordering_ true
  206. Test/changeDelay2 instproc run {} [Test/changeDelay1 info instbody run ]
  207. $self next pktTraceFile
  208. }
  209. ###################################################
  210. ## Link with changing bandwidth.
  211. ###################################################
  212. Class Test/links1 -superclass TestSuite
  213. Test/links1 instproc init {} {
  214. $self instvar net_ test_
  215. set net_ net4
  216. set test_ links1
  217. $self next pktTraceFile
  218. }
  219. Test/links1 instproc run {} {
  220. global wrap wrap1
  221.         $self instvar ns_ node_ testName_
  222. $self setTopo
  223. set fid 1
  224. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  225.         $tcp1 set window_ 8
  226.         set ftp1 [$tcp1 attach-app FTP]
  227.         $ns_ at 0.0 "$ftp1 start"
  228.         $self tcpDump $tcp1 5.0
  229.         ##$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  230. $ns_ at 10.0 "$self cleanupAll $testName_"
  231.         $ns_ run
  232. }
  233. Class Test/changeBandwidth -superclass TestSuite
  234. Test/changeBandwidth instproc init {} {
  235. $self instvar net_ test_
  236. set net_ net4
  237. set test_ changeBandwidth
  238. $self next pktTraceFile
  239. }
  240. Test/changeBandwidth instproc run {} {
  241. global wrap wrap1
  242.         $self instvar ns_ node_ testName_
  243. $self setTopo
  244. set fid 1
  245. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  246.         $tcp1 set window_ 8
  247.         set ftp1 [$tcp1 attach-app FTP]
  248.         $ns_ at 0.0 "$ftp1 start"
  249. $ns_ at 2.0 "$ns_ bandwidth $node_(r1) $node_(k1) 8Kb duplex"
  250. $ns_ at 8.0 "$ns_ bandwidth $node_(r1) $node_(k1) 800Kb duplex"
  251.         $self tcpDump $tcp1 5.0
  252.         ##$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  253. $ns_ at 10.0 "$self cleanupAll $testName_"
  254.         $ns_ run
  255. }
  256. ###################################################
  257. ## Two dropped packets.  
  258. ###################################################
  259. Class Test/dropPacket -superclass TestSuite
  260. Test/dropPacket instproc init {} {
  261. $self instvar net_ test_
  262. set net_ net4
  263. set test_ dropPacket
  264. Agent/TCP set minrto_ 1
  265. $self next pktTraceFile
  266. }
  267. Test/dropPacket instproc run {} {
  268. global wrap wrap1
  269.         $self instvar ns_ node_ testName_
  270. $self setTopo
  271. $self June01defaults
  272. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 1]
  273.         $tcp1 set window_ 8
  274.         set ftp1 [$tcp1 attach-app FTP]
  275.         $ns_ at 0.0 "$ftp1 start"
  276.         $self dropPkts [$ns_ link $node_(r1) $node_(k1)] 1 {20 22}
  277. # dropPkts is in support.tcl
  278.         $self tcpDump $tcp1 5.0
  279. $ns_ at 5.0 "$self cleanupAll $testName_"
  280.         $ns_ run
  281. }
  282. ###################################################
  283. ## Two delayed packets.  
  284. ###################################################
  285. Class Test/delayPacket -superclass TestSuite
  286. Test/delayPacket instproc init {} {
  287. $self instvar net_ test_
  288. set net_ net4
  289. set test_ delayPacket
  290. Agent/TCP set minrto_ 1
  291. ErrorModel set delay_pkt_ true
  292. ErrorModel set drop_ false
  293. ErrorModel set delay_ 0.3
  294. Test/delayPacket instproc run {} [Test/dropPacket info instbody run ]
  295. $self next pktTraceFile
  296. }
  297. ###################################################
  298. ## Two delayed packets with different delays
  299. ###################################################
  300. Class Test/delayPacket1 -superclass TestSuite
  301. Test/delayPacket1 instproc init {} {
  302. $self instvar net_ test_
  303. set net_ net4
  304. set test_ delayPacket1
  305. Agent/TCP set minrto_ 1
  306. $self next pktTraceFile
  307. }
  308. Test/delayPacket1 instproc run {} {
  309. global wrap wrap1
  310.         $self instvar ns_ node_ testName_
  311. $self setTopo
  312. $self June01defaults
  313. set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) 1]
  314.         $tcp1 set window_ 8
  315.         set ftp1 [$tcp1 attach-app FTP]
  316.         $ns_ at 0.0 "$ftp1 start"
  317.         $self dropPkts [$ns_ link $node_(r1) $node_(k1)] 1 {20} true 0.3
  318. $self dropPkts [$ns_ link $node_(r1) $node_(k1)] 1 {22} true 0.4
  319. # dropPkts is in support.tcl
  320.         $self tcpDump $tcp1 5.0
  321. $ns_ at 5.0 "$self cleanupAll $testName_"
  322.         $ns_ run
  323. }
  324. ###################################################
  325. ## Delayer module 
  326. ###################################################
  327. ## Link r1-k1 blocked at time 2, unblocked at time 4.
  328. Class Test/delaySpike -superclass TestSuite
  329. Test/delaySpike instproc init {} {
  330. $self instvar net_ test_
  331. set net_ net4
  332. set test_ delaySpike
  333. $self next pktTraceFile
  334. }
  335. Test/delaySpike instproc run {} {
  336. global wrap wrap1
  337.         $self instvar ns_ node_ testName_ 
  338. $self setTopo
  339. set d1 [new Delayer]
  340. set d2 [new Delayer]
  341. $ns_ insert-delayer $node_(k1) $node_(r1) $d2
  342. $ns_ insert-delayer $node_(r1) $node_(k1) $d1
  343. $ns_ at 2.0 "$d1 block"
  344. $ns_ at 2.0 "$d2 block"
  345. $ns_ at 4.0 "$d1 unblock"
  346. $ns_ at 4.0 "$d2 unblock"
  347. set fid 1
  348. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  349.         $tcp1 set window_ 1
  350.         set ftp1 [$tcp1 attach-app FTP]
  351.         $ns_ at 0.0 "$ftp1 start"
  352.         $self tcpDump $tcp1 5.0
  353. $ns_ at 10.0 "$self cleanupAll $testName_"
  354.         $ns_ run
  355. }
  356. ## Link r1-k1 blocked at time 2, unblocked at time 4.
  357. ## TCP connection has a window of 8.
  358. Class Test/delaySpike1 -superclass TestSuite
  359. Test/delaySpike1 instproc init {} {
  360. $self instvar net_ test_
  361. set net_ net4
  362. set test_ delaySpike1
  363. $self next pktTraceFile
  364. }
  365. Test/delaySpike1 instproc run {} {
  366. global wrap wrap1
  367.         $self instvar ns_ node_ testName_ 
  368. $self setTopo
  369. set d1 [new Delayer]
  370. set d2 [new Delayer]
  371. $ns_ insert-delayer $node_(k1) $node_(r1) $d2
  372. $ns_ insert-delayer $node_(r1) $node_(k1) $d1
  373. $ns_ at 2.0 "$d1 block"
  374. $ns_ at 2.0 "$d2 block"
  375. $ns_ at 4.0 "$d1 unblock"
  376. $ns_ at 4.0 "$d2 unblock"
  377. set fid 1
  378. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  379.         $tcp1 set window_ 8
  380.         set ftp1 [$tcp1 attach-app FTP]
  381.         $ns_ at 0.0 "$ftp1 start"
  382.         $self tcpDump $tcp1 5.0
  383. $ns_ at 10.0 "$self cleanupAll $testName_"
  384.         $ns_ run
  385. }
  386. ## link r1-k1 has delay spikes, on average for 0.1 seconds, every 0.5 seconds
  387. Class Test/delaySpikes -superclass TestSuite
  388. Test/delaySpikes instproc init {} {
  389. $self instvar net_ test_
  390. set net_ net4
  391. set test_ delaySpikes
  392. $self next pktTraceFile
  393. }
  394. Test/delaySpikes instproc run {} {
  395. global wrap wrap1
  396.         $self instvar ns_ node_ testName_
  397. $self setTopo
  398. set d1 [new Delayer]
  399. $ns_ insert-delayer $node_(r1) $node_(k1) $d1
  400. set len [new RandomVariable/Exponential]
  401. $len set avg_ 0.1
  402. set int [new RandomVariable/Exponential]
  403. $int set avg_ 0.5
  404. $d1 spike $int $len
  405. set fid 1
  406. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  407.         $tcp1 set window_ 1
  408.         set ftp1 [$tcp1 attach-app FTP]
  409.         $ns_ at 0.0 "$ftp1 start"
  410.         $self tcpDump $tcp1 5.0
  411. $ns_ at 10.0 "$self cleanupAll $testName_"
  412.         $ns_ run
  413. }
  414. ## link r1-k1 has delay spikes, on average for 0.1 seconds, every 0.5 seconds
  415. ## TCP connection has a window of 8.
  416. Class Test/delaySpikes1 -superclass TestSuite
  417. Test/delaySpikes1 instproc init {} {
  418. $self instvar net_ test_
  419. set net_ net4
  420. set test_ delaySpikes1
  421. $self next pktTraceFile
  422. }
  423. Test/delaySpikes1 instproc run {} {
  424. global wrap wrap1
  425.         $self instvar ns_ node_ testName_
  426. $self setTopo
  427. set d1 [new Delayer]
  428. $ns_ insert-delayer $node_(r1) $node_(k1) $d1
  429. set len [new RandomVariable/Exponential]
  430. $len set avg_ 0.1
  431. set int [new RandomVariable/Exponential]
  432. $int set avg_ 0.5
  433. $d1 spike $int $len
  434. set fid 1
  435. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  436.         $tcp1 set window_ 8
  437.         set ftp1 [$tcp1 attach-app FTP]
  438.         $ns_ at 0.0 "$ftp1 start"
  439.         $self tcpDump $tcp1 5.0
  440. $ns_ at 10.0 "$self cleanupAll $testName_"
  441.         $ns_ run
  442. }
  443. ## Channel channelAllocDelayation delay when the queue is empty.
  444. Class Test/channelAllocDelay -superclass TestSuite
  445. Test/channelAllocDelay instproc init {} {
  446. $self instvar net_ test_
  447. set net_ net4
  448. set test_ channelAllocDelay
  449. $self next pktTraceFile
  450. }
  451. Test/channelAllocDelay instproc run {} {
  452. global wrap wrap1
  453.         $self instvar ns_ node_ testName_
  454. $self setTopo
  455. set d1 [new Delayer]
  456. set d2 [new Delayer]
  457. $ns_ insert-delayer $node_(k1) $node_(r1) $d1
  458. $ns_ insert-delayer $node_(r1) $node_(k1) $d2
  459. set len_dl [new RandomVariable/Uniform]
  460. $len_dl set min_ 0.16
  461. $len_dl set max_ 0.19
  462. set int_dl [new RandomVariable/Uniform]
  463. $int_dl set min_ 2
  464. $int_dl set max_ 5
  465. set len_ul [new RandomVariable/Uniform]
  466. $len_ul set min_ 0.5
  467. $len_ul set max_ 0.6
  468. set int_ul [new RandomVariable/Uniform]
  469. $int_ul set min_ 0.01
  470. $int_ul set max_ 0.4
  471. $d1 alloc $int_ul $len_ul
  472. $d2 alloc $int_dl $len_dl
  473. set fid 1
  474. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  475.         $tcp1 set window_ 1
  476.         set ftp1 [$tcp1 attach-app FTP]
  477.         $ns_ at 0.0 "$ftp1 start"
  478.         $self tcpDump $tcp1 5.0
  479. $ns_ at 10.0 "$self cleanupAll $testName_"
  480. $ns_ run
  481. }
  482. ## Channel allocation delay when the queue is empty.
  483. ## Add a second connection on the reverse path.
  484. Class Test/channelAllocDelay1 -superclass TestSuite
  485. Test/channelAllocDelay1 instproc init {} {
  486. $self instvar net_ test_
  487. set net_ net4
  488. set test_ channelAllocDelay1
  489. $self next pktTraceFile
  490. }
  491. Test/channelAllocDelay1 instproc run {} {
  492. global wrap wrap1
  493.         $self instvar ns_ node_ testName_
  494. $self setTopo
  495. set d1 [new Delayer]
  496. set d2 [new Delayer]
  497. $ns_ insert-delayer $node_(k1) $node_(r1) $d1
  498. $ns_ insert-delayer $node_(r1) $node_(k1) $d2
  499. set len_dl [new RandomVariable/Uniform]
  500. $len_dl set min_ 0.16
  501. $len_dl set max_ 0.19
  502. set int_dl [new RandomVariable/Uniform]
  503. $int_dl set min_ 2
  504. $int_dl set max_ 5
  505. $d2 alloc $int_dl $len_dl
  506. set len_ul [new RandomVariable/Uniform]
  507. $len_ul set min_ 0.5
  508. $len_ul set max_ 0.6
  509. set int_ul [new RandomVariable/Uniform]
  510. $int_ul set min_ 0.01
  511. $int_ul set max_ 0.4
  512. $d1 alloc $int_ul $len_ul
  513. # int: time of keeping a channel without data.
  514.   # len: delay in allocating a new channel.
  515. set fid 1
  516. set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) TCPSink/Sack1 $node_(k1) $fid]
  517.         $tcp1 set window_ 1
  518.         set ftp1 [$tcp1 attach-app FTP]
  519.         $ns_ at 0.0 "$ftp1 start"
  520. set fid 2
  521. set tcp2 [$ns_ create-connection TCP/Sack1 $node_(k1) TCPSink/Sack1 $node_(s1) $fid]
  522.         $tcp2 set window_ 3
  523.         set ftp2 [$tcp2 attach-app FTP]
  524.         $ns_ at 3.0 "$ftp2 start"
  525.         $self tcpDump $tcp1 5.0
  526. $ns_ at 10.0 "$self cleanupAll $testName_"
  527. $ns_ run
  528. }
  529. #
  530. # Does not drop extra packets immediately when queue size is lowered.
  531. #
  532. Class Test/change_queue -superclass TestSuite
  533. Test/change_queue instproc init {} {
  534.         $self instvar net_ test_
  535.         set net_        net4
  536.         set test_       change_queue
  537.         $self next pktTraceFile
  538. }
  539. Test/change_queue instproc run {} {
  540.         global wrap wrap1
  541.         $self instvar ns_ node_ testName_
  542.         $self setTopo
  543.         set fid 1
  544.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  545. $tcp1 set window_ 8
  546.         set ftp1 [$tcp1 attach-app FTP]
  547.         $ns_ at 0.0 "$ftp1 start"
  548.         set link1 [$ns_ link $node_(r1) $node_(k1)]
  549.         set queue1 [$link1 queue]
  550.         $ns_ at 5.0 "$ns_ queue-limit $node_(r1) $node_(k1) 5"
  551.         $self tcpDump $tcp1 5.0
  552.         $ns_ at 10.0 "$self cleanupAll $testName_"
  553.         $ns_ run
  554. }
  555. #
  556. # Drops extra packets when queue size is lowered.
  557. # Validation test from Andrei Gurtov.
  558. #
  559. Class Test/queue_shrink -superclass TestSuite
  560. Test/queue_shrink instproc init {} {
  561.         $self instvar net_ test_
  562.         set net_        net4
  563.         set test_       queue_shrink
  564.         $self next pktTraceFile
  565. }
  566. Test/queue_shrink instproc run {} {
  567.         global wrap wrap1
  568.         $self instvar ns_ node_ testName_
  569.         $self setTopo
  570.         set fid 1
  571.         set tcp1 [$ns_ create-connection TCP $node_(s1) TCPSink $node_(k1) $fid]
  572. $tcp1 set window_ 8
  573.         set ftp1 [$tcp1 attach-app FTP]
  574.         $ns_ at 0.0 "$ftp1 start"
  575.         set link1 [$ns_ link $node_(r1) $node_(k1)]
  576.         set queue1 [$link1 queue]
  577.         $ns_ at 5.0 "$ns_ queue-limit $node_(r1) $node_(k1) 5; $queue1 shrink-queue"
  578.         $self tcpDump $tcp1 5.0
  579.         $ns_ at 10.0 "$self cleanupAll $testName_"
  580.         $ns_ run
  581. }
  582. TestSuite runTest