test-suite-tcp-init-win-full.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-tcp-init-win-full.tcl,v 1.15 2006/01/24 23:00:08 sallyfloyd Exp $
  34. #
  35. # To view a list of available tests to run with this script:
  36. # ns test-suite-tcp.tcl
  37. #
  38. source misc_simple.tcl
  39. Agent/TCP set tcpTick_ 0.1
  40. # The default for tcpTick_ is being changed to reflect a changing reality.
  41. Agent/TCP set rfc2988_ false
  42. # The default for rfc2988_ is being changed to true.
  43. set wrap [expr 90 * 1000 + 40]
  44. set scale 0.00001
  45. Agent/TCP/FullTcp set segsize_ 0 ; # segsize_ will come from packetSize_
  46. # FOR UPDATING GLOBAL DEFAULTS:
  47. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  48. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  49. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  50. Queue/RED set bytes_ false              
  51. # default changed on 10/11/2004.
  52. Queue/RED set queue_in_bytes_ false
  53. # default changed on 10/11/2004.
  54. Agent/TCP/Newreno set newreno_changes1_ 0
  55. # The default is being changed to 1 on 5/5/03, to reflect RFC 2582.
  56. Agent/TCP/Newreno set partial_window_deflation_ 0  
  57. # The default is being changed to 1 on 5/5/03, to reflect RFC 2582.
  58. Queue/RED set q_weight_ 0.002
  59. Queue/RED set thresh_ 5 
  60. Queue/RED set maxthresh_ 15
  61. # The RED parameter defaults are being changed for automatic configuration.
  62. Agent/TCP set useHeaders_ false
  63. # The default is being changed to useHeaders_ true.
  64. Agent/TCP set windowInit_ 1
  65. # The default is being changed to 2.
  66. Agent/TCP set singledup_ 0
  67. # The default is being changed to 1
  68. set plotacks false
  69. Agent/TCP set minrto_ 0
  70. # The default is being changed to minrto_ 1
  71. Agent/TCP set syn_ false
  72. Agent/TCP set delay_growth_ false
  73. # In preparation for changing the default values for syn_ and delay_growth_.
  74. Class Topology
  75. Topology instproc node? num {
  76.     $self instvar node_
  77.     return $node_($num)
  78. }
  79. Class Topology/net6 -superclass Topology
  80. Topology/net6 instproc init ns {
  81.     $self instvar node_
  82.     set node_(s1) [$ns node]
  83.     set node_(s2) [$ns node]
  84.     set node_(r1) [$ns node]
  85.     set node_(k1) [$ns node]
  86.     
  87.     Queue/RED set setbit_ true
  88.     $ns duplex-link $node_(s1) $node_(r1) 100Mb 5ms DropTail
  89.     $ns duplex-link $node_(s2) $node_(r1) 100Mb 5ms DropTail
  90.     $ns duplex-link $node_(r1) $node_(k1) 10Mb 100ms RED
  91.     $ns queue-limit $node_(r1) $node_(k1) 25
  92.     $ns queue-limit $node_(k1) $node_(r1) 25
  93. }   
  94.     
  95. Class Topology/net7 -superclass Topology
  96. Topology/net7 instproc init ns {
  97.     $self instvar node_
  98.     set node_(s1) [$ns node]
  99.     set node_(s2) [$ns node]
  100.     set node_(r1) [$ns node]
  101.     set node_(k1) [$ns node]
  102.     
  103.     Queue/RED set setbit_ true
  104.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 5ms DropTail
  105.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 5ms DropTail
  106.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms RED
  107.     $ns queue-limit $node_(r1) $node_(k1) 25
  108.     $ns queue-limit $node_(k1) $node_(r1) 25
  109. }   
  110.     
  111. Class Topology/net8 -superclass Topology
  112. Topology/net8 instproc init ns {
  113.     $self instvar node_
  114.     set node_(r1) [$ns node]
  115.     set node_(k1) [$ns node]
  116.     set node_(s1) [$ns node]
  117.     set node_(s2) [$ns node]
  118.     
  119.     Queue/RED set setbit_ true
  120.     $ns duplex-link $node_(s1) $node_(s2) 1000Mb 0ms DropTail
  121.     $ns duplex-link $node_(s2) $node_(r1) 9.6Kb 1ms DropTail
  122.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 10ms RED
  123.     $ns queue-limit $node_(r1) $node_(k1) 25
  124.     $ns queue-limit $node_(k1) $node_(r1) 25
  125. }   
  126.     
  127. # The ack sequence number is not printed out.
  128. TestSuite instproc finish file {
  129. global quiet PERL plotacks wrap scale
  130. set plotacks false
  131.         exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  132.           $PERL ../../bin/raw2xg -s $scale -m $wrap -t $file > temp.rands
  133.         if {$plotacks == "true"} {
  134.           exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  135.              $PERL ../../bin/raw2xg -a -e -s 0.00001 -m $wrap -t $file > temp1.rands
  136. }
  137. if {$quiet == "false"} {
  138. if {$plotacks == "false"} {
  139.    exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  140.                 } else {
  141.    exec xgraph -bb -tk -nl -m -x time -y packets temp.rands 
  142.        temp1.rands &
  143. }
  144. }
  145.         ## now use default graphing tool to make a data file
  146. ## if so desired
  147.         exit 0
  148. }
  149. TestSuite instproc printtimers { tcp time} {
  150. global quiet
  151. if {$quiet == "false"} {
  152.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  153. }
  154. }
  155. TestSuite instproc printtimersAll { tcp time interval } {
  156.         $self instvar dump_inst_ ns_
  157.         if ![info exists dump_inst_($tcp)] {
  158.                 set dump_inst_($tcp) 1
  159.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  160.                 return
  161.         }
  162. set newTime [expr [$ns_ now] + $interval]
  163. $ns_ at $time "$self printtimers $tcp $time"
  164.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  165. }
  166. # Definition of test-suite tests
  167. TestSuite instproc run_test {tcp1 tcp2 tcp3 dumptime runtime window} {
  168. $self instvar ns_ node_ testName_
  169. set ftp2 [$tcp2 attach-app FTP]
  170. $ns_ at 0.0 "$ftp2 start"
  171. set ftp3 [$tcp3 attach-app FTP]
  172. $ns_ at 0.0 "$ftp3 start"
  173. $self runall_test $tcp1 $dumptime $runtime
  174. }
  175. TestSuite instproc runall_test {tcp1 dumptime runtime} {
  176. $self instvar ns_ node_ testName_
  177. set ftp1 [$tcp1 attach-app FTP]
  178. $ns_ at 0.0 "$ftp1 start"
  179. $self tcpDump $tcp1 $dumptime
  180. #$self traceQueues $node_(r1) [$self openTrace $runtime $testName_]
  181. $ns_ at $runtime "$self cleanupAll $testName_"
  182. $ns_ run
  183. }
  184. TestSuite instproc second_test {tcp1 tcp2} {
  185. $self instvar ns_ node_ testName_
  186. $tcp1 set window_ 40
  187. set ftp1 [$tcp1 attach-app FTP]
  188. $ns_ at 1.0 "$ftp1 start"
  189. $tcp2 set window_ 40
  190. set ftp2 [$tcp2 attach-app FTP]
  191. $ns_ at 0.0 "$ftp2 start"
  192. $self tcpDump $tcp1 5.0
  193. #$self traceQueues $node_(r1) [$self openTrace 10.0 $testName_]
  194. $ns_ at 10.0 "$self cleanupAll $testName_"
  195. $ns_ run
  196. }
  197. TestSuite instproc make_tcp {nodeA nodeB ID type} {
  198. $self instvar ns_ node_ 
  199.         if {$type == "Tahoe"} {
  200. set tcp [$ns_ create-connection-listen TCP/FullTcp/Tahoe $node_($nodeA) TCP/FullTcp/Tahoe $node_($nodeB) $ID]
  201. }
  202.         if {$type == "Reno"} {
  203. set tcp [$ns_ create-connection-listen TCP/FullTcp $node_($nodeA) TCP/FullTcp $node_($nodeB) $ID]
  204. }
  205.         if {$type == "Newreno"} {
  206. set tcp [$ns_ create-connection-listen TCP/FullTcp/Newreno $node_($nodeA) TCP/FullTcp/Newreno $node_($nodeB) $ID]
  207. }
  208.         if {$type == "Sack"} {
  209. set tcp [$ns_ create-connection-listen TCP/FullTcp/Sack $node_($nodeA) TCP/FullTcp/Sack $node_($nodeB) $ID]
  210. }
  211. return $tcp
  212. }
  213. # generate segment size from packet size.
  214. Class Test/tahoe1 -superclass TestSuite
  215. Test/tahoe1 instproc init {} {
  216. $self instvar net_ test_ 
  217. set net_ net6
  218. set test_ tahoe1(variable_packet_sizes)
  219.         $self next pktTraceFile
  220. }
  221. Test/tahoe1 instproc run {} {
  222.         $self instvar ns_ node_ testName_
  223. $self setTopo
  224. Agent/TCP set syn_ true
  225. Agent/TCP set delay_growth_ true
  226. Agent/TCP set windowInitOption_ 2
  227. set tcp1 [$self make_tcp s1 k1 0 Tahoe]
  228. $tcp1 set packetSize_ 1000
  229. set tcp2 [$self make_tcp s2 k1 1 Tahoe]
  230. $tcp2 set packetSize_ 1500
  231. set tcp3 [$self make_tcp s2 k1 2 Tahoe]
  232. $tcp3 set packetSize_ 2500
  233. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  234. }
  235. # generate packetsize from segment size.
  236. Class Test/tahoe1A -superclass TestSuite
  237. Test/tahoe1A instproc init {} {
  238. $self instvar net_ test_ 
  239. set net_ net6
  240. set test_ tahoe1A(variable_packet_sizes)
  241.         $self next pktTraceFile
  242. }
  243. Test/tahoe1A instproc run {} {
  244.         $self instvar ns_ node_ testName_
  245. $self setTopo
  246. Agent/TCP set syn_ true
  247. Agent/TCP set delay_growth_ true
  248. Agent/TCP set windowInitOption_ 2
  249. set tcp1 [$self make_tcp s1 k1 0 Tahoe]
  250. $tcp1 set segsize_ 960
  251. set tcp2 [$self make_tcp s2 k1 1 Tahoe]
  252. $tcp2 set segsize_ 1460
  253. set tcp3 [$self make_tcp s2 k1 2 Tahoe]
  254. $tcp3 set segsize_ 2460
  255. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  256. }
  257. Class Test/tahoe2 -superclass TestSuite
  258. Test/tahoe2 instproc init {} {
  259. $self instvar net_ test_
  260. set net_ net6
  261. set test_ tahoe2(static_initial_windows)
  262. $self next pktTraceFile
  263. }
  264. Test/tahoe2 instproc run {} {
  265. $self instvar ns_ node_ testName_
  266. $self setTopo
  267. set tcp1 [$self make_tcp s1 k1 0 Tahoe] 
  268. $tcp1 set windowInit_ 6
  269. set tcp2 [$self make_tcp s2 k1 1 Tahoe]
  270. $tcp2 set syn_ true
  271. $tcp2 set delay_growth_ true
  272. set tcp3 [$self make_tcp s2 k1 2 Tahoe]
  273. $tcp3 set windowInit_ 6
  274. $tcp3 set syn_ true
  275. $tcp3 set delay_growth_ true
  276. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  277. }
  278. Class Test/tahoe3 -superclass TestSuite
  279. Test/tahoe3 instproc init {} {
  280. $self instvar net_ test_ 
  281. set net_ net6
  282. set test_ tahoe3(dropped_syn)
  283.         $self next pktTraceFile
  284. }
  285. ## Drop the n-th packet for flow on link.
  286. TestSuite instproc drop_pkt { link flow n } {
  287. set em [new ErrorModule Fid]
  288. set errmodel [new ErrorModel/Periodic]
  289. $errmodel unit pkt
  290. $errmodel set offset_ n
  291. $errmodel set period_ 1000.0
  292. $link errormodule $em
  293. $em insert $errmodel
  294. $em bind $errmodel $flow
  295. }
  296. Test/tahoe3 instproc run {} {
  297.         $self instvar ns_ node_ testName_ 
  298. $self setTopo
  299. Agent/TCP set syn_ true
  300. Agent/TCP set delay_growth_ true
  301. Agent/TCP set windowInitOption_ 2
  302. set tcp1 [$self make_tcp s1 k1 0 Tahoe]
  303. $tcp1 set packetSize_ 1000
  304. $self drop_pkt [$ns_ link $node_(r1) $node_(k1)] 0 1
  305. $self runall_test $tcp1 10.0 10.0 
  306. }
  307. Class Test/tahoe4 -superclass TestSuite
  308. Test/tahoe4 instproc init {} {
  309. $self instvar net_ test_
  310. set net_ net7
  311. set test_ tahoe4(fast_retransmit)
  312. Queue/RED set ns1_compat_ true
  313. $self next pktTraceFile
  314. }
  315. Test/tahoe4 instproc run {} {
  316. $self instvar ns_ node_ testName_
  317. $self setTopo
  318. Agent/TCP set packetSize_ 1000
  319. Agent/TCP set windowInitOption_ 2
  320. Agent/TCP set syn_ true
  321. Agent/TCP set delay_growth_ true
  322.         set tcp1 [$self make_tcp s1 k1 0 Tahoe] 
  323.         set tcp2 [$self make_tcp s2 k1 1 Tahoe]
  324. $self second_test $tcp1 $tcp2
  325. }
  326. Class Test/reno1 -superclass TestSuite
  327. Test/reno1 instproc init {} {
  328. $self instvar net_ test_ 
  329. set net_ net6
  330. set test_ reno1(variable_packet_sizes)
  331.         $self next pktTraceFile
  332. }
  333. Test/reno1 instproc run {} {
  334.         $self instvar ns_ node_ testName_
  335. $self setTopo
  336. Agent/TCP set syn_ true
  337. Agent/TCP set delay_growth_ true
  338. Agent/TCP set windowInitOption_ 2
  339. set tcp1 [$self make_tcp s1 k1 0 Reno]
  340. $tcp1 set packetSize_ 1000
  341. set tcp2 [$self make_tcp s2 k1 1 Reno]
  342. $tcp2 set packetSize_ 1500
  343. set tcp3 [$self make_tcp s2 k1 2 Reno]
  344. $tcp3 set packetSize_ 2500
  345. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  346. }
  347. Class Test/reno2 -superclass TestSuite
  348. Test/reno2 instproc init {} {
  349. $self instvar net_ test_
  350. set net_ net6
  351. set test_ reno2(static_initial_windows)
  352. $self next pktTraceFile
  353. }
  354. Test/reno2 instproc run {} {
  355. $self instvar ns_ node_ testName_
  356. $self setTopo
  357. set tcp1 [$self make_tcp s1 k1 0 Reno] 
  358. $tcp1 set windowInit_ 6
  359. set tcp2 [$self make_tcp s2 k1 1 Reno]
  360. $tcp2 set syn_ true
  361. $tcp2 set delay_growth_ true
  362. set tcp3 [$self make_tcp s2 k1 2 Reno]
  363. $tcp3 set windowInit_ 6
  364. $tcp3 set syn_ true
  365. $tcp3 set delay_growth_ true
  366. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  367. }
  368. Class Test/reno3 -superclass TestSuite
  369. Test/reno3 instproc init {} {
  370. $self instvar net_ test_ 
  371. set net_ net6
  372. set test_ reno3(dropped_syn)
  373.         $self next pktTraceFile
  374. }
  375. ## Drop the n-th packet for flow on link.
  376. TestSuite instproc drop_pkt { link flow n } {
  377. set em [new ErrorModule Fid]
  378. set errmodel [new ErrorModel/Periodic]
  379. $errmodel unit pkt
  380. $errmodel set offset_ n
  381. $errmodel set period_ 1000.0
  382. $link errormodule $em
  383. $em insert $errmodel
  384. $em bind $errmodel $flow
  385. }
  386. Test/reno3 instproc run {} {
  387.         $self instvar ns_ node_ testName_ 
  388. $self setTopo
  389. Agent/TCP set syn_ true
  390. Agent/TCP set delay_growth_ true
  391. Agent/TCP set windowInitOption_ 2
  392. set tcp1 [$self make_tcp s1 k1 0 Reno]
  393. $tcp1 set packetSize_ 1000
  394. $self drop_pkt [$ns_ link $node_(r1) $node_(k1)] 0 1
  395. $self runall_test $tcp1 10.0 10.0 
  396. }
  397. Class Test/reno4 -superclass TestSuite
  398. Test/reno4 instproc init {} {
  399. $self instvar net_ test_
  400. set net_ net7
  401. set test_ reno4(fast_retransmit)
  402. Queue/RED set ns1_compat_ true
  403. $self next pktTraceFile
  404. }
  405. Test/reno4 instproc run {} {
  406. $self instvar ns_ node_ testName_
  407. $self setTopo
  408. Agent/TCP set packetSize_ 1000
  409. Agent/TCP set windowInitOption_ 2
  410. Agent/TCP set syn_ true
  411. Agent/TCP set delay_growth_ true
  412.         set tcp1 [$self make_tcp s1 k1 0 Reno] 
  413.         set tcp2 [$self make_tcp s2 k1 1 Reno]
  414. $self second_test $tcp1 $tcp2
  415. }
  416. Class Test/newreno1 -superclass TestSuite
  417. Test/newreno1 instproc init {} {
  418. $self instvar net_ test_ 
  419. set net_ net6
  420. set test_ newreno1(variable_packet_sizes)
  421.         $self next pktTraceFile
  422. }
  423. Test/newreno1 instproc run {} {
  424.         $self instvar ns_ node_ testName_
  425. $self setTopo
  426. Agent/TCP set syn_ true
  427. Agent/TCP set delay_growth_ true
  428. Agent/TCP set windowInitOption_ 2
  429. set tcp1 [$self make_tcp s1 k1 0 Newreno]
  430. $tcp1 set packetSize_ 1000
  431. set tcp2 [$self make_tcp s2 k1 1 Newreno]
  432. $tcp2 set packetSize_ 1500
  433. set tcp3 [$self make_tcp s2 k1 2 Newreno]
  434. $tcp3 set packetSize_ 2500
  435. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  436. }
  437. Class Test/newreno2 -superclass TestSuite
  438. Test/newreno2 instproc init {} {
  439. $self instvar net_ test_
  440. set net_ net6
  441. set test_ newreno2(static_initial_windows)
  442. $self next pktTraceFile
  443. }
  444. Test/newreno2 instproc run {} {
  445. $self instvar ns_ node_ testName_
  446. $self setTopo
  447. set tcp1 [$self make_tcp s1 k1 0 Newreno] 
  448. $tcp1 set windowInit_ 6
  449. set tcp2 [$self make_tcp s2 k1 1 Newreno]
  450. $tcp2 set syn_ true
  451. $tcp2 set delay_growth_ true
  452. set tcp3 [$self make_tcp s2 k1 2 Newreno]
  453. $tcp3 set windowInit_ 6
  454. $tcp3 set syn_ true
  455. $tcp3 set delay_growth_ true
  456. $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  457. }
  458. Class Test/newreno3 -superclass TestSuite
  459. Test/newreno3 instproc init {} {
  460. $self instvar net_ test_ 
  461. set net_ net6
  462. set test_ newreno3(dropped_syn)
  463.         $self next pktTraceFile
  464. }
  465. ## Drop the n-th packet for flow on link.
  466. TestSuite instproc drop_pkt { link flow n } {
  467. set em [new ErrorModule Fid]
  468. set errmodel [new ErrorModel/Periodic]
  469. $errmodel unit pkt
  470. $errmodel set offset_ n
  471. $errmodel set period_ 1000.0
  472. $link errormodule $em
  473. $em insert $errmodel
  474. $em bind $errmodel $flow
  475. }
  476. Test/newreno3 instproc run {} {
  477.         $self instvar ns_ node_ testName_ 
  478. $self setTopo
  479. Agent/TCP set syn_ true
  480. Agent/TCP set delay_growth_ true
  481. Agent/TCP set windowInitOption_ 2
  482. set tcp1 [$self make_tcp s1 k1 0 Newreno]
  483. $tcp1 set packetSize_ 1000
  484. $self drop_pkt [$ns_ link $node_(r1) $node_(k1)] 0 1
  485. $self runall_test $tcp1 10.0 10.0 
  486. }
  487. Class Test/newreno4 -superclass TestSuite
  488. Test/newreno4 instproc init {} {
  489. $self instvar net_ test_
  490. set net_ net7
  491. set test_ newreno4(fast_retransmit)
  492. Queue/RED set ns1_compat_ true
  493. $self next pktTraceFile
  494. }
  495. Test/newreno4 instproc run {} {
  496. $self instvar ns_ node_ testName_
  497. $self setTopo
  498. Agent/TCP set packetSize_ 1000
  499. Agent/TCP set windowInitOption_ 2
  500. Agent/TCP set syn_ true
  501. Agent/TCP set delay_growth_ true
  502.         set tcp1 [$self make_tcp s1 k1 0 Newreno] 
  503.         set tcp2 [$self make_tcp s2 k1 1 Newreno]
  504. $self second_test $tcp1 $tcp2
  505. }
  506. #
  507. #Class Test/sack1 -superclass TestSuite
  508. #Test/sack1 instproc init {} {
  509. # $self instvar net_ test_ 
  510. # set net_ net6
  511. # set test_ sack1(variable_packet_sizes)
  512. #        $self next pktTraceFile
  513. #}
  514. #Test/sack1 instproc run {} {
  515. #        $self instvar ns_ node_ testName_
  516. # $self setTopo
  517. # Agent/TCP set syn_ true
  518. # Agent/TCP set delay_growth_ true
  519. # Agent/TCP set windowInitOption_ 2
  520. # set tcp1 [$self make_tcp s1 k1 0 Sack]
  521. # $tcp1 set packetSize_ 1000
  522. # set tcp2 [$self make_tcp s2 k1 1 Sack]
  523. # $tcp2 set packetSize_ 1500
  524. # set tcp3 [$self make_tcp s2 k1 2 Sack]
  525. # $tcp3 set packetSize_ 2500
  526. # $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  527. #}
  528. #
  529. #Class Test/sack2 -superclass TestSuite
  530. #Test/sack2 instproc init {} {
  531. # $self instvar net_ test_
  532. # set net_ net6
  533. # set test_ sack2(static_initial_windows)
  534. # $self next pktTraceFile
  535. #}
  536. #Test/sack2 instproc run {} {
  537. # $self instvar ns_ node_ testName_
  538. # $self setTopo
  539. # set tcp1 [$self make_tcp s1 k1 0 Sack] 
  540. # $tcp1 set windowInit_ 6
  541. # set tcp2 [$self make_tcp s2 k1 1 Sack]
  542. # $tcp2 set syn_ true
  543. # $tcp2 set delay_growth_ true
  544. # set tcp3 [$self make_tcp s2 k1 2 Sack]
  545. # $tcp3 set windowInit_ 6
  546. # $tcp3 set syn_ true
  547. # $tcp3 set delay_growth_ true
  548. # $self run_test $tcp1 $tcp2 $tcp3 1.0 1.0 16
  549. #}
  550. #
  551. #Class Test/sack3 -superclass TestSuite
  552. #Test/sack3 instproc init {} {
  553. # $self instvar net_ test_ 
  554. # set net_ net6
  555. # set test_ sack3(dropped_syn)
  556. #        $self next pktTraceFile
  557. #}
  558. #
  559. ## Drop the n-th packet for flow on link.
  560. TestSuite instproc drop_pkt { link flow n } {
  561. set em [new ErrorModule Fid]
  562. set errmodel [new ErrorModel/Periodic]
  563. $errmodel unit pkt
  564. $errmodel set offset_ n
  565. $errmodel set period_ 1000.0
  566. $link errormodule $em
  567. $em insert $errmodel
  568. $em bind $errmodel $flow
  569. }
  570. #
  571. #Test/sack3 instproc run {} {
  572. #        $self instvar ns_ node_ testName_ 
  573. # $self setTopo
  574. # Agent/TCP set syn_ true
  575. # Agent/TCP set delay_growth_ true
  576. # Agent/TCP set windowInitOption_ 2
  577. # set tcp1 [$self make_tcp s1 k1 0 Sack]
  578. # $tcp1 set packetSize_ 1000
  579. # $self drop_pkt [$ns_ link $node_(r1) $node_(k1)] 0 1
  580. # $self runall_test $tcp1 10.0 10.0 
  581. #}
  582. #
  583. # This does not work correctly!
  584. # Class Test/sack4 -superclass TestSuite
  585. # Test/sack4 instproc init {} {
  586. #  $self instvar net_ test_
  587. #  set net_ net7
  588. #  set test_ sack4(fast_retransmit)
  589. #  Queue/RED set ns1_compat_ true
  590. #  $self next pktTraceFile
  591. # }
  592. # Test/sack4 instproc run {} {
  593. #  $self instvar ns_ node_ testName_
  594. #  $self setTopo
  595. #  Agent/TCP set packetSize_ 1000
  596. #  Agent/TCP set windowInitOption_ 2
  597. #  Agent/TCP set syn_ true
  598. #  Agent/TCP set delay_growth_ true
  599. #       set tcp1 [$self make_tcp s1 k1 0 Sack] 
  600. #       set tcp2 [$self make_tcp s2 k1 1 Sack]
  601. #  $self second_test $tcp1 $tcp2
  602. # }
  603. TestSuite instproc printtimers { tcp time} {
  604.         global quiet
  605.         if {$quiet == "false"} {
  606. set srtt [expr [$tcp set srtt_]/8 ]
  607. set rttvar [expr [$tcp set rttvar_]/4 ]
  608. set rto [expr $srtt + 2 * $rttvar ]
  609.                 puts "time: $time sRTT(in ticks): $srtt RTTvar(in ticks): $rttvar sRTT+2*RTTvar: $rto backoff: [$tcp set backoff_]" 
  610.         }
  611. }
  612. TestSuite instproc printtimersAll { tcp time interval } {
  613.         $self instvar dump_inst_ ns_   
  614.         if ![info exists dump_inst_($tcp)] {
  615.                 set dump_inst_($tcp) 1
  616.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  617.                 return
  618.         }
  619.         set newTime [expr [$ns_ now] + $interval]
  620.         $ns_ at $time "$self printtimers $tcp $time"
  621.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  622. }
  623. # This test shows the packets and acknowledgements at the source,
  624. # for a path with a 9.6Kbps link, and 1000-byte packets.
  625. Class Test/slowLink -superclass TestSuite
  626. Test/slowLink instproc init {} {
  627. global plotacks
  628. $self instvar net_ test_ 
  629. set net_ net8
  630. set test_ slowLink(9.6K-link,1000-byte-pkt)
  631.         set plotacks true
  632.         $self next pktTraceFile
  633. }
  634. Test/slowLink instproc run {} {
  635.         $self instvar ns_ node_ testName_ 
  636. $self setTopo
  637. Agent/TCP set syn_ true
  638. Agent/TCP set delay_growth_ true
  639. Agent/TCP set windowInitOption_ 2
  640. Agent/TCP set minrto_ 1
  641. set tcp1 [$self make_tcp s1 k1 0 Sack]
  642. $tcp1 set packetSize_ 1000
  643. $ns_ at 0.0 "$self printtimersAll $tcp1 0 1"
  644. $self runall_test $tcp1 30.0 30.0 
  645. }
  646. # # This test shows the packets and acknowledgements at the source,
  647. # # for a path with a 9.6Kbps link, and 1000-byte packets.
  648. # Class Test/slowLinkDelayAck -superclass TestSuite
  649. # Test/slowLinkDelayAck instproc init {} {
  650. #  global plotacks
  651. #  $self instvar net_ test_ 
  652. #  set net_ net8
  653. #  set test_ slowLinkDelayAck(9.6K-link,1000-byte-pkt)
  654. #         set plotacks true
  655. #         $self next pktTraceFile
  656. # }
  657. # Test/slowLinkDelayAck instproc run {} {
  658. #         $self instvar ns_ node_ testName_ 
  659. #  $self setTopo
  660. #  Agent/TCP set syn_ true
  661. #  Agent/TCP set delay_growth_ true
  662. #  Agent/TCP set windowInitOption_ 2
  663. #  Agent/TCP set minrto_ 1
  664. #  set tcp1 [$self make_tcp s1 k1 0 SackDelAck]
  665. #  $tcp1 set packetSize_ 1000
  666. #  $ns_ at 0.0 "$self printtimersAll $tcp1 0 1"
  667. #  $self runall_test $tcp1 30.0 30.0 
  668. # }
  669. # This test shows the packets and acknowledgements at the source,
  670. # for a path with a 9.6Kbps link, and 1500-byte packets.
  671. #Class Test/slowLink1 -superclass TestSuite
  672. #Test/slowLink1 instproc init {} {
  673. # global plotacks
  674. # $self instvar net_ test_ 
  675. # set net_ net8
  676. # set test_ slowLink1(9.6K-link,1500-byte-pkt)
  677. #        set plotacks true
  678. #        $self next pktTraceFile
  679. #}
  680. #
  681. #Test/slowLink1 instproc run {} {
  682. #        $self instvar ns_ node_ testName_ 
  683. # $self setTopo
  684. # Agent/TCP set syn_ true
  685. # Agent/TCP set delay_growth_ true
  686. # Agent/TCP set windowInitOption_ 2
  687. # Agent/TCP set minrto_ 1
  688. # set tcp1 [$self make_tcp s1 k1 0 Sack]
  689. # $tcp1 set packetSize_ 1500
  690. # $self runall_test $tcp1 30.0 30.0 
  691. #}
  692. # This test shows the packets and acknowledgements at the source,
  693. # for a path with a 9.6Kbps link, and 1500-byte packets.
  694. # Initial window of one packet.
  695. Class Test/slowLink2 -superclass TestSuite
  696. Test/slowLink2 instproc init {} {
  697. global plotacks
  698. $self instvar net_ test_ 
  699. set net_ net8
  700. set test_ slowLink2(9.6K-link,1500-byte-pkt)
  701.         set plotacks true
  702.         $self next pktTraceFile
  703. }
  704. Test/slowLink2 instproc run {} {
  705.         $self instvar ns_ node_ testName_ 
  706. $self setTopo
  707. Agent/TCP set syn_ true
  708. Agent/TCP set delay_growth_ true
  709. Agent/TCP set windowInitOption_ 1
  710. Agent/TCP set minrto_ 1
  711. set tcp1 [$self make_tcp s1 k1 0 Sack]
  712. $tcp1 set packetSize_ 1500
  713. $self runall_test $tcp1 30.0 30.0 
  714. }
  715. # time 1.1: RTO, pkt 1 retransmitted, slow-start entered.
  716. # time 1.4: ACK arrives for (first) pkt 1, pkts 2 and 3 transmitted.
  717. # time 2.4: RTO, pkt 2 retransmitted, slow-start entered.
  718. # time 2.6: ACK arrives for (second) pkt 1. 
  719. # time 3.7: RTO, pkt 2 retransmitted, slow-start entered.
  720. # time 3.9: ACK arrives for (first) pkt 2, pkt 3 retransmitted, pkt 4
  721. #           transmitted
  722. # time 5.2: ACK arrives for (first) pkt 3, pkt 5 transmitted.
  723. TestSuite runTest
  724. ### Local Variables:
  725. ### mode: tcl
  726. ### tcl-indent-level: 8
  727. ### tcl-default-application: ns
  728. ### End: