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

通讯编程

开发平台:

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