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

通讯编程

开发平台:

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-rfc2001.tcl,v 1.11 2006/01/24 23:00:07 sallyfloyd Exp $
  34. #
  35. # To view a list of available tests to run with this script:
  36. # ns test-suite-tcpVariants.tcl
  37. #
  38. # This validation test does not need to be included in "./validate", but it 
  39. # should be kept for documentation purposes, as it is referred to in
  40. # other documents.  
  41. source misc.tcl
  42. Agent/TCP set tcpTick_ 0.1
  43. # The default for tcpTick_ is being changed to reflect a changing reality.
  44. Agent/TCP set rfc2988_ false
  45. # The default for rfc2988_ is being changed to true.
  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. Agent/TCP set useHeaders_ false
  51. # The default is being changed to useHeaders_ true.
  52. Agent/TCP set windowInit_ 1
  53. # The default is being changed to 2.
  54. Agent/TCP set singledup_ 0
  55. # The default is being changed to 1
  56. source topologies.tcl
  57. Agent/TCP set syn_ false
  58. Agent/TCP set delay_growth_ false
  59. # In preparation for changing the default values for syn_ and delay_growth_.
  60. Trace set show_tcphdr_ 1
  61. set wrap 90
  62. set wrap1 [expr 90 * 512 + 40]
  63. TestSuite instproc finish file {
  64. global quiet wrap PERL
  65.         exec $PERL ../../bin/set_flow_id -s all.tr | 
  66.           $PERL ../../bin/getrc -s 2 -d 3 | 
  67.           $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  68. if {$quiet == "false"} {
  69. exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  70. }
  71.         ## now use default graphing tool to make a data file
  72. ## if so desired
  73.         exit 0
  74. }
  75. TestSuite instproc printtimers { tcp time} {
  76. global quiet
  77. if {$quiet == "false"} {
  78.          puts "time: $time sRTT(in ticks): [$tcp set srtt_]/8 RTTvar(in ticks): [$tcp set rttvar_]/4 backoff: [$tcp set backoff_]"
  79. }
  80. }
  81. TestSuite instproc printtimersAll { tcp time interval } {
  82.         $self instvar dump_inst_ ns_
  83.         if ![info exists dump_inst_($tcp)] {
  84.                 set dump_inst_($tcp) 1
  85.                 $ns_ at $time "$self printtimersAll $tcp $time $interval"
  86.                 return
  87.         }
  88. set newTime [expr [$ns_ now] + $interval]
  89. $ns_ at $time "$self printtimers $tcp $time"
  90.         $ns_ at $newTime "$self printtimersAll $tcp $newTime $interval"
  91. }
  92. #
  93. # Links1 uses 8Mb, 5ms feeders, and a 800Kb 10ms bottleneck.
  94. # Queue-limit on bottleneck is 2 packets.
  95. #
  96. Class Topology/net4 -superclass NodeTopology/4nodes
  97. Topology/net4 instproc init ns {
  98.     $self next $ns
  99.     $self instvar node_
  100.     $ns duplex-link $node_(s1) $node_(r1) 8Mb 0ms DropTail
  101.     $ns duplex-link $node_(s2) $node_(r1) 8Mb 0ms DropTail
  102.     $ns duplex-link $node_(r1) $node_(k1) 800Kb 100ms DropTail
  103.     $ns queue-limit $node_(r1) $node_(k1) 8
  104.     $ns queue-limit $node_(k1) $node_(r1) 8
  105.     if {[$class info instprocs config] != ""} {
  106. $self config $ns
  107.     }
  108.     $self instvar lossylink_
  109.     set lossylink_ [$ns link $node_(r1) $node_(k1)]
  110.     set em [new ErrorModule Fid] 
  111.     set errmodel [new ErrorModel/Periodic]
  112.     $errmodel unit pkt
  113.     $lossylink_ errormodule $em
  114. }
  115. TestSuite instproc emod {} {
  116.         $self instvar topo_
  117.         $topo_ instvar lossylink_
  118.         set errmodule [$lossylink_ errormodule]
  119.         return $errmodule
  120. TestSuite instproc drop_pkts pkts {
  121.     $self instvar ns_
  122.     set emod [$self emod]
  123.     set errmodel1 [new ErrorModel/List]
  124.     $errmodel1 droplist $pkts
  125.     $emod insert $errmodel1
  126.     $emod bind $errmodel1 1
  127. }
  128. TestSuite instproc setup {tcptype list} {
  129. global wrap wrap1
  130.         $self instvar ns_ node_ testName_
  131. set fid 1
  132.         # Set up TCP connection
  133.      if {$tcptype == "Tahoe"} {
  134.        set tcp1 [$ns_ create-connection TCP $node_(s1) 
  135.            TCPSink $node_(k1) $fid]
  136.      } elseif {$tcptype == "Sack1"} {
  137.        set tcp1 [$ns_ create-connection TCP/Sack1 $node_(s1) 
  138.            TCPSink/Sack1  $node_(k1) $fid]
  139.      } elseif {$tcptype == "FullTcp"} {
  140. set wrap $wrap1
  141.         set tcp1 [new Agent/TCP/FullTcp]
  142.         set sink [new Agent/TCP/FullTcp]
  143.         $ns_ attach-agent $node_(s1) $tcp1
  144.         $ns_ attach-agent $node_(k1) $sink
  145.         $tcp1 set fid_ $fid
  146.         $sink set fid_ $fid
  147.         $ns_ connect $tcp1 $sink
  148.         # set up TCP-level connections
  149.         $sink listen ; # will figure out who its peer is
  150.      } elseif {$tcptype == "FullTcpTahoe"} {
  151. set wrap $wrap1
  152.         set tcp1 [new Agent/TCP/FullTcp/Tahoe]
  153.         set sink [new Agent/TCP/FullTcp/Tahoe]
  154.         $ns_ attach-agent $node_(s1) $tcp1
  155.         $ns_ attach-agent $node_(k1) $sink
  156.         $tcp1 set fid_ $fid
  157.         $sink set fid_ $fid
  158.         $ns_ connect $tcp1 $sink
  159.         # set up TCP-level connections
  160.         $sink listen ; # will figure out who its peer is
  161.      } elseif {$tcptype == "FullTcpNewreno"} {
  162. set wrap $wrap1
  163.         set tcp1 [new Agent/TCP/FullTcp/Newreno]
  164.         set sink [new Agent/TCP/FullTcp/Newreno]
  165.         $ns_ attach-agent $node_(s1) $tcp1
  166.         $ns_ attach-agent $node_(k1) $sink
  167.         $tcp1 set fid_ $fid
  168.         $sink set fid_ $fid
  169.         $ns_ connect $tcp1 $sink
  170.         # set up TCP-level connections
  171.         $sink listen ; # will figure out who its peer is
  172.      } elseif {$tcptype == "FullTcpSack1"} {
  173. set wrap $wrap1
  174.         set tcp1 [new Agent/TCP/FullTcp/Sack]
  175.         set sink [new Agent/TCP/FullTcp/Sack]
  176.         $ns_ attach-agent $node_(s1) $tcp1
  177.         $ns_ attach-agent $node_(k1) $sink
  178.         $tcp1 set fid_ $fid
  179.         $sink set fid_ $fid
  180.         $ns_ connect $tcp1 $sink
  181.         # set up TCP-level connections
  182.         $sink listen ; # will figure out who its peer is
  183.      } else {
  184.        set tcp1 [$ns_ create-connection TCP/$tcptype $node_(s1) 
  185.            TCPSink $node_(k1) $fid]
  186.      }
  187.         $tcp1 set window_ 28
  188.         set ftp1 [$tcp1 attach-app FTP]
  189.         $ns_ at 1.0 "$ftp1 start"
  190.         $self tcpDump $tcp1 5.0
  191.         $self drop_pkts $list
  192.         $self traceQueues $node_(r1) [$self openTrace 6.0 $testName_]
  193.         $ns_ run
  194. }
  195. # Definition of test-suite tests
  196. ###################################################
  197. ## Three drops, Reno has a retransmit timeout.
  198. ###################################################
  199. Class Test/reno -superclass TestSuite
  200. Test/reno instproc init topo {
  201. $self instvar net_ defNet_ test_
  202. set net_ $topo
  203. set defNet_ net4
  204. set test_ reno
  205. $self next
  206. }
  207. Test/reno instproc run {} {
  208. Agent/TCP set bugFix_ false
  209.         $self setup Reno {14 26 28}
  210. }
  211. # Class Test/reno_bugfix -superclass TestSuite
  212. # Test/reno_bugfix instproc init topo {
  213. #  $self instvar net_ defNet_ test_
  214. #  set net_ $topo
  215. #  set defNet_ net4
  216. #  set test_ reno_bugfix
  217. #  $self next
  218. # }
  219. # Test/reno_bugfix instproc run {} {
  220. #  Agent/TCP set bugFix_ true
  221. #         $self setup Reno {14 26 28}
  222. # }
  223. Class Test/newreno -superclass TestSuite
  224. Test/newreno instproc init topo {
  225. $self instvar net_ defNet_ test_
  226. set net_ $topo
  227. set defNet_ net4
  228. set test_ newreno
  229. $self next
  230. }
  231. Test/newreno instproc run {} {
  232. Agent/TCP set bugFix_ false
  233.         $self setup Newreno {14 26 28}
  234. }
  235. # Class Test/newreno_bugfix -superclass TestSuite
  236. # Test/newreno_bugfix instproc init topo {
  237. #  $self instvar net_ defNet_ test_
  238. #  set net_ $topo
  239. #  set defNet_ net4
  240. #  set test_ newreno_bugfix
  241. #  $self next
  242. # }
  243. # Test/newreno_bugfix instproc run {} {
  244. #  Agent/TCP set bugFix_ true
  245. #         $self setup Newreno {14 26 28}
  246. # }
  247. # Class Test/newreno_A -superclass TestSuite
  248. # Test/newreno_A instproc init topo {
  249. #  $self instvar net_ defNet_ test_
  250. #  set net_ $topo
  251. #  set defNet_ net4
  252. #  set test_ newreno_A
  253. #  $self next
  254. # }
  255. # Test/newreno_A instproc run {} {
  256. #  Agent/TCP set bugFix_ false
  257. #  Agent/TCP/Newreno set newreno_changes1_ 1
  258. #         $self setup Newreno {14 26 28}
  259. # }
  260. # Class Test/newreno_bugfix_A -superclass TestSuite
  261. # Test/newreno_bugfix_A instproc init topo {
  262. #  $self instvar net_ defNet_ test_
  263. #  set net_ $topo
  264. #  set defNet_ net4
  265. #  set test_ newreno_bugfix_A
  266. #  $self next
  267. # }
  268. # Test/newreno_bugfix_A instproc run {} {
  269. #  Agent/TCP set bugFix_ true
  270. #  Agent/TCP/Newreno set newreno_changes1_ 1
  271. #         $self setup Newreno {14 26 28}
  272. # }
  273. ###################################################
  274. ## Many drops, Reno has a retransmit timeout.
  275. ###################################################
  276. Class Test/reno1 -superclass TestSuite
  277. Test/reno1 instproc init topo {
  278. $self instvar net_ defNet_ test_
  279. set net_ $topo
  280. set defNet_ net4
  281. set test_ reno1
  282. $self next
  283. }
  284. Test/reno1 instproc run {} {
  285. Agent/TCP set bugFix_ false
  286.         $self setup Reno {14 15 16 17 18 19 20 21 25 }
  287. }
  288. # Class Test/reno1_bugfix -superclass TestSuite
  289. # Test/reno1_bugfix instproc init topo {
  290. #  $self instvar net_ defNet_ test_
  291. #  set net_ $topo
  292. #  set defNet_ net4
  293. #  set test_ reno1_bugfix
  294. #  $self next
  295. # }
  296. # Test/reno1_bugfix instproc run {} {
  297. #  Agent/TCP set bugFix_ true
  298. #         $self setup Reno {14 15 16 17 18 19 20 21 25 }
  299. # }
  300. Class Test/newreno1 -superclass TestSuite
  301. Test/newreno1 instproc init topo {
  302. $self instvar net_ defNet_ test_
  303. set net_ $topo
  304. set defNet_ net4
  305. set test_ newreno1
  306. $self next
  307. }
  308. Test/newreno1 instproc run {} {
  309. Agent/TCP set bugFix_ false
  310.         $self setup Newreno {14 15 16 17 18 19 20 21 25 }
  311. }
  312. # Class Test/newreno1_bugfix -superclass TestSuite
  313. # Test/newreno1_bugfix instproc init topo {
  314. #  $self instvar net_ defNet_ test_
  315. #  set net_ $topo
  316. #  set defNet_ net4
  317. #  set test_ newreno1_bugfix
  318. #  $self next
  319. # }
  320. # Test/newreno1_bugfix instproc run {} {
  321. #  Agent/TCP set bugFix_ true
  322. #         $self setup Newreno {14 15 16 17 18 19 20 21 25 }
  323. # }
  324. Class Test/newreno1_A -superclass TestSuite
  325. Test/newreno1_A instproc init topo {
  326. $self instvar net_ defNet_ test_
  327. set net_ $topo
  328. set defNet_ net4
  329. set test_ newreno1_A
  330. $self next
  331. }
  332. Test/newreno1_A instproc run {} {
  333. Agent/TCP set bugFix_ false
  334. Agent/TCP/Newreno set newreno_changes1_ 1
  335.         $self setup Newreno {14 15 16 17 18 19 20 21 25 }
  336. }
  337. # Class Test/newreno1_A_bugfix -superclass TestSuite
  338. # Test/newreno1_A_bugfix instproc init topo {
  339. #  $self instvar net_ defNet_ test_
  340. #  set net_ $topo
  341. #  set defNet_ net4
  342. #  set test_ newreno1_A_bugfix
  343. #  $self next
  344. # }
  345. # Test/newreno1_A_bugfix instproc run {} {
  346. #  Agent/TCP set bugFix_ true
  347. #  Agent/TCP/Newreno set newreno_changes1_ 1
  348. #         $self setup Newreno {14 15 16 17 18 19 20 21 25 }
  349. # }
  350. ###################################################
  351. ## Multiple fast retransmits.
  352. ###################################################
  353. Class Test/reno2 -superclass TestSuite
  354. Test/reno2 instproc init topo {
  355. $self instvar net_ defNet_ test_
  356. set net_ $topo
  357. set defNet_ net4
  358. set test_ reno2
  359. $self next
  360. }
  361. Test/reno2 instproc run {} {
  362. Agent/TCP set bugFix_ false
  363.         $self setup Reno {24 25 26 28 31 35 40 45 46 47 48 }
  364. }
  365. Class Test/reno2_bugfix -superclass TestSuite
  366. Test/reno2_bugfix instproc init topo {
  367. $self instvar net_ defNet_ test_
  368. set net_ $topo
  369. set defNet_ net4
  370. set test_ reno2_bugfix
  371. $self next
  372. }
  373. Test/reno2_bugfix instproc run {} {
  374. Agent/TCP set bugFix_ true
  375. #        $self setup Reno {24 25 26 28 31 35 37 40 43 47 48 }
  376.         $self setup Reno {24 25 26 28 31 35 40 45 46 47 48 }
  377. }
  378. Class Test/newreno2_A -superclass TestSuite
  379. Test/newreno2_A instproc init topo {
  380. $self instvar net_ defNet_ test_
  381. set net_ $topo
  382. set defNet_ net4
  383. set test_ newreno2_A
  384. $self next
  385. }
  386. Test/newreno2_A instproc run {} {
  387. Agent/TCP set bugFix_ false
  388. Agent/TCP/Newreno set newreno_changes1_ 1
  389. $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  390. }
  391. Class Test/newreno2_A_bugfix -superclass TestSuite
  392. Test/newreno2_A_bugfix instproc init topo {
  393. $self instvar net_ defNet_ test_
  394. set net_ $topo
  395. set defNet_ net4
  396. set test_ newreno2_A_bugfix
  397. $self next
  398. }
  399. Test/newreno2_A_bugfix instproc run {} {
  400. Agent/TCP set bugFix_ true
  401. Agent/TCP/Newreno set newreno_changes1_ 1
  402. $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  403. }
  404. # Class Test/newreno3 -superclass TestSuite
  405. # Test/newreno3 instproc init topo {
  406. #  $self instvar net_ defNet_ test_
  407. #  set net_ $topo
  408. #  set defNet_ net4
  409. #  set test_ newreno3
  410. #  $self next
  411. # }
  412. # Test/newreno3 instproc run {} {
  413. #  Agent/TCP set bugFix_ false
  414. #  $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  415. # }
  416. # Class Test/newreno3_bugfix -superclass TestSuite
  417. # Test/newreno3_bugfix instproc init topo {
  418. #  $self instvar net_ defNet_ test_
  419. #  set net_ $topo
  420. #  set defNet_ net4
  421. #  set test_ newreno3_bugfix
  422. #  $self next
  423. # }
  424. # Test/newreno3_bugfix instproc run {} {
  425. #  Agent/TCP set bugFix_ true
  426. #  $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  427. # }
  428. # Class Test/newreno4_A -superclass TestSuite
  429. # Test/newreno4_A instproc init topo {
  430. #  $self instvar net_ defNet_ test_
  431. #  set net_ $topo
  432. #  set defNet_ net4
  433. #  set test_ newreno4_A
  434. #  $self next
  435. # }
  436. # Test/newreno4_A instproc run {} {
  437. #  Agent/TCP set bugFix_ false
  438. #  Agent/TCP/Newreno set newreno_changes1_ 1
  439. #  $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  440. # }
  441. # Class Test/newreno4_A_bugfix -superclass TestSuite
  442. # Test/newreno4_A_bugfix instproc init topo {
  443. #  $self instvar net_ defNet_ test_
  444. #  set net_ $topo
  445. #  set defNet_ net4
  446. #  set test_ newreno4_A_bugfix
  447. #  $self next
  448. # }
  449. # Test/newreno4_A_bugfix instproc run {} {
  450. #  Agent/TCP set bugFix_ true
  451. #  Agent/TCP/Newreno set newreno_changes1_ 1
  452. #  $self setup Newreno {24 25 26 28 31 35 40 45 46 47 48 }
  453. # }
  454. TestSuite runTest