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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1998,2000 University of Southern California.
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # This test suite is for validating the diffserv module ported from Nortel
  17. # To run all tests: test-all-diffserv
  18. #
  19. # To run individual test:
  20. # ns test-suite-diffserv.tcl tb | tsw2cm | tsw3cm | srtcm | trtcm
  21. #
  22. # To view a list of available test to run with this script:
  23. # ns test-suite-diffserv.tcl
  24. #
  25. remove-all-packet-headers       ; # removes all except common
  26. add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
  27. # FOR UPDATING GLOBAL DEFAULTS:
  28. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  29. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  30. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  31. Agent/TCP set minrto_ 1
  32. # default changed on 10/14/2004.
  33. Queue/RED set bytes_ false              
  34. # default changed on 10/11/2004.
  35. Queue/RED set queue_in_bytes_ false
  36. # default changed on 10/11/2004.
  37. Queue/RED set q_weight_ 0.002
  38. Queue/RED set thresh_ 5 
  39. Queue/RED set maxthresh_ 15
  40. # The RED parameter defaults are being changed for automatic configuration.
  41. # The topology used in the test suite is:
  42. #
  43. #    s1 -------
  44. #        10 Mb  
  45. #         5 ms   
  46. #                 e1 ----- core ------ e2 ------ dest
  47. #                /   10 Mb       5 Mb      10 Mb 
  48. #               /     5 ms       5 ms       5 ms
  49. #    s2 -------
  50. #        10 Mb
  51. #         5 ms
  52. #
  53. Class TestSuite
  54. # With Policy as Token Bucket
  55. Class Test/tb -superclass TestSuite
  56. # With Policy as Time Sliding Window Two Color Marker (tsw2cm)
  57. Class Test/tsw2cm -superclass TestSuite
  58. # With Policy as Time Sliding Window Two Color Marker (tsw3cm)
  59. Class Test/tsw3cm -superclass TestSuite
  60. # With Policy as Single Rate Three Color Marker (srtcm)
  61. Class Test/srtcm -superclass TestSuite
  62. # With Policy as Two Rate Three Color Marker (trtcm)
  63. Class Test/trtcm -superclass TestSuite
  64. proc usage {} {
  65. global argv0
  66. puts stderr "usage: ns $argv0 <tests> "
  67. puts "Valid Tests: tb tsw2cm tsw3cm srtcm trtcm"
  68. exit 1
  69. }
  70. # Set up parameters for ds redqs for a link.
  71. TestSuite instproc create_q {qec_ qce_ s1 s2 d1 d2} {
  72.     $self instvar packetSize_ testName_
  73.     $self instvar cir0 cbs0 pir0 pbs0 ebs0 rate0 cir1 cbs1 pir1 pbs1 ebs1 rate1
  74.     # Set DS RED parameters from Edge to Core:
  75.     $qec_ meanPktSize $packetSize_
  76.     $qec_ set numQueues_ 1
  77.     $qec_ setNumPrec 2
  78.     switch $testName_ {
  79. "tb" {          # Token bucket policy
  80.     $qec_ addPolicyEntry [$s1 id] [$d1 id] TokenBucket 10 $cir0 $cbs0
  81.     $qec_ addPolicyEntry [$s2 id] [$d2 id] TokenBucket 10 $cir1 $cbs1
  82.     $qec_ addPolicerEntry TokenBucket 10 11
  83. }
  84. "tsw2cm" {  # TSW2CM policy
  85.     $qec_ addPolicyEntry [$s1 id] [$d1 id] TSW2CM 10 $cir0
  86.     $qec_ addPolicyEntry [$s2 id] [$d2 id] TSW2CM 10 $cir1
  87.     $qec_ addPolicerEntry TSW2CM 10 11
  88. }
  89. "tsw3cm" {  # TSW3CM policy
  90.     $qec_ setNumPrec 3
  91.     $qec_ addPolicyEntry [$s1 id] [$d1 id] TSW3CM 10 $cir0 $pir0
  92.     $qec_ addPolicyEntry [$s2 id] [$d2 id] TSW3CM 10 $cir1 $pir1
  93.     $qec_ addPolicerEntry TSW3CM 10 11 12
  94.     $qec_ addPHBEntry 12 0 2
  95.     $qec_ configQ 0 2  5 10 0.20
  96. }
  97. "srtcm" {  # SRTCM policy
  98.     $qec_ setNumPrec 3
  99.     $qec_ addPolicyEntry [$s1 id] [$d1 id] srTCM 10 $cir0 $cbs0 $ebs0
  100.     $qec_ addPolicyEntry [$s2 id] [$d2 id] srTCM 10 $cir1 $cbs1 $ebs1
  101.     $qec_ addPolicerEntry srTCM 10 11 12
  102.     $qec_ addPHBEntry 12 0 2
  103.     $qec_ configQ 0 2  5 10 0.20
  104. }
  105. "trtcm" {  # TRTCM policy
  106.     $qec_ setNumPrec 3
  107.     $qec_ addPolicyEntry [$s1 id] [$d1 id] trTCM 10 $cir0 $cbs0 $pir0 $pbs0
  108.     $qec_ addPolicyEntry [$s2 id] [$d2 id] trTCM 10 $cir1 $cbs1 $pir1 $pbs1
  109.     $qec_ addPolicerEntry trTCM 10 11 12
  110.     $qec_ addPHBEntry 12 0 2
  111.     $qec_ configQ 0 2  5 10 0.20
  112. }
  113. default {error "Unknow policer!!! exist"}
  114.     }
  115.     $qec_ addPHBEntry 10 0 0
  116.     $qec_ addPHBEntry 11 0 1
  117.     $qec_ configQ 0 0 20 40 0.02
  118.     $qec_ configQ 0 1 10 20 0.10
  119.     # Set DS RED parameters from Core to Edge:
  120.     $qce_ meanPktSize $packetSize_
  121.     $qce_ set numQueues_ 1
  122.     $qce_ setNumPrec 2
  123.     $qce_ addPHBEntry 10 0 0
  124.     $qce_ addPHBEntry 11 0 1
  125.     $qce_ configQ 0 0 20 40 0.02
  126.     $qce_ configQ 0 1 10 20 0.10
  127.     if {$testName_ == "tsw3cm" || $testName_ == "srtcm" || $testName_ == "trtcm"} {
  128. $qce_ setNumPrec 3
  129. $qce_ addPHBEntry 12 0 2
  130. $qce_ configQ 0 2  5 10 0.20
  131.     }
  132. }
  133. # Create the simulation scenario for the test suite.
  134. TestSuite instproc create-scenario {} { 
  135.     global quiet
  136.     $self instvar ns_ packetSize_ finishTime_ testName_ rate0 rate1
  137.     # Set up the network topology shown above:
  138.     set s1 [$ns_ node]
  139.     set s2 [$ns_ node]
  140.     set e1 [$ns_ node]
  141.     set core [$ns_ node]
  142.     set e2 [$ns_ node]
  143.     set dest [$ns_ node]
  144.     $ns_ duplex-link $s1 $e1 10Mb 5ms DropTail
  145.     $ns_ duplex-link $s2 $e1 10Mb 5ms DropTail
  146.     
  147.     $ns_ simplex-link $e1 $core 10Mb 5ms dsRED/edge
  148.     $ns_ simplex-link $core $e1 10Mb 5ms dsRED/core
  149.     
  150.     $ns_ simplex-link $core $e2 5Mb 5ms dsRED/core
  151.     $ns_ simplex-link $e2 $core 5Mb 5ms dsRED/edge
  152.     
  153.     $ns_ duplex-link $e2 $dest 10Mb 5ms DropTail
  154.     # Config each RED queue.
  155.     set qE1C [[$ns_ link $e1 $core] queue]
  156.     set qE2C [[$ns_ link $e2 $core] queue]
  157.     set qCE1 [[$ns_ link $core $e1] queue]
  158.     set qCE2 [[$ns_ link $core $e2] queue]
  159.     # Set DS RED parameters for Qs:
  160.     $self create_q $qE1C $qCE1 $s1 $s2 $dest $dest
  161.     $self create_q $qE2C $qCE2 $dest $dest $s1 $s2
  162.     
  163.     # Set up one CBR connection between each source and the destination:
  164.     set udp0 [new Agent/UDP]
  165.     $ns_ attach-agent $s1 $udp0
  166.     set cbr0 [new Application/Traffic/CBR]
  167.     $cbr0 attach-agent $udp0
  168.     $cbr0 set packet_size_ $packetSize_
  169.     $udp0 set packetSize_ $packetSize_
  170.     $cbr0 set rate_ $rate0
  171.     set null0 [new Agent/Null]
  172.     $ns_ attach-agent $dest $null0
  173.     $ns_ connect $udp0 $null0
  174.     $ns_ at 0.0 "$cbr0 start"
  175.     $ns_ at $finishTime_ "$cbr0 stop"
  176.     set udp1 [new Agent/UDP]
  177.     $ns_ attach-agent $s2 $udp1
  178.     set cbr1 [new Application/Traffic/CBR]
  179.     $cbr1 attach-agent $udp1
  180.     $cbr1 set packet_size_ $packetSize_
  181.     $udp1 set packetSize_ $packetSize_
  182.     $cbr1 set rate_ $rate1
  183.     set null1 [new Agent/Null]
  184.     $ns_ attach-agent $dest $null1
  185.     $ns_ connect $udp1 $null1
  186.     $ns_ at 0.0 "$cbr1 start"
  187.     $ns_ at $finishTime_ "$cbr1 stop"
  188.     if {$quiet == 0} {
  189. $qE1C printPolicyTable
  190. $qE1C printPolicerTable
  191. $ns_ at 10.0 "$qCE2 printStats"
  192. $ns_ at 20.0 "$qCE2 printStats"
  193.     }
  194. }
  195. TestSuite instproc init {} {
  196.     global tracefd quiet
  197.     $self instvar ns_ testName_ finishTime_ packetSize_
  198.     set ns_         [new Simulator]
  199.     set tracefd [open "temp.rands" w]
  200.     $ns_ trace-all $tracefd
  201.     set finishTime_ 10.0
  202.     set packetSize_ 1000
  203.     
  204.     if {$quiet == 0} {
  205. $ns_ at $finishTime_ "puts "NS EXITING..." ;"
  206.     }
  207.     $ns_ at [expr $finishTime_ + 1.0] "$self finish"
  208. }
  209. Test/tb instproc init {} {
  210.     $self instvar ns_ testName_ cir0 cbs0 rate0 cir1 cbs1 rate1
  211.     set testName_       tb
  212.     set cir0  1000000
  213.     set cbs0     3000
  214.     set rate0 2000000
  215.     set cir1  1000000
  216.     set cbs1    10000
  217.     set rate1 3000000
  218.     $self next
  219. }
  220. Test/tb instproc run {} {
  221.     $self instvar ns_
  222.     
  223.     $self create-scenario
  224.     $ns_ run
  225. }
  226. Test/tsw2cm instproc init {} {
  227.     $self instvar ns_ testName_ cir0 rate0 cir1 rate1
  228.     set testName_       tsw2cm
  229.     set cir0  1000000
  230.     set rate0 2000000
  231.     set cir1  1000000
  232.     set rate1 3000000
  233.     $self next
  234. }
  235. Test/tsw2cm instproc run {} {
  236.     $self instvar ns_
  237.     $self create-scenario
  238.     $ns_ run
  239. }
  240. Test/tsw3cm instproc init {} {
  241.     $self instvar ns_ testName_ cir0 pir0 rate0 cir1 pir1 rate1
  242.     set testName_       tsw3cm
  243.     set cir0   100000
  244.     set pir0   500000
  245.     set rate0 4000000
  246.     set cir1   400000
  247.     set pir1  1000000
  248.     set rate1 2000000
  249.     $self next
  250. }
  251. Test/tsw3cm instproc run {} {
  252.     $self instvar ns_
  253.     $self create-scenario
  254.     $ns_ run
  255. }
  256. Test/srtcm instproc init {} {
  257.     $self instvar ns_ testName_ cir0 cbs0 ebs0 rate0 cir1 cbs1 ebs1 rate1
  258.     set testName_ srtcm
  259.     set cir0  1000000
  260.     set cbs0     2000
  261.     set ebs0     3000 
  262.     set rate0 3000000
  263.     set cir1  1000000
  264.     set cbs1     2000
  265.     set ebs1     6000
  266.     set rate1 3000000
  267.     $self next
  268. }
  269. Test/srtcm instproc run {} {
  270.     $self instvar ns_
  271.     $self create-scenario
  272.     $ns_ run
  273. }
  274. Test/trtcm instproc init {} {
  275.     $self instvar ns_ testName_ cir0 cbs0 pir0 pbs0 rate0 cir1 cbs1 pir1 pbs1 rate1
  276.     set testName_ trtcm
  277.     set cir0  1000000
  278.     set cbs0     2000
  279.     set pir0  2000000
  280.     set pbs0     3000 
  281.     set rate0 3000000
  282.     set cir1  1000000
  283.     set cbs1     2000
  284.     set pir1  1000000
  285.     set pbs1     3000
  286.     set rate1 3000000
  287.     $self next
  288. }
  289. Test/trtcm instproc run {} {
  290.     $self instvar ns_
  291.     $self create-scenario
  292.     $ns_ run
  293. }
  294. TestSuite instproc finish {} {
  295.     global quiet tracefd
  296.     $self instvar ns_
  297.     
  298.     $ns_ flush-trace
  299.     close $tracefd
  300.     
  301.     if {$quiet == 0} {
  302. puts "finishing.." }
  303.     exit 0
  304. }
  305. proc runtest {arg} {
  306. global quiet
  307. set quiet 0
  308. set b [llength $arg]
  309. if {$b == 1} {
  310. set test $arg
  311. } elseif {$b == 2} {
  312. set test [lindex $arg 0]
  313. if {[lindex $arg 1] == "QUIET"} {
  314. set quiet 1
  315. }
  316. } else {
  317. usage
  318. }
  319. set t [new Test/$test]
  320. if {$quiet == 0} {
  321.     puts "Starting Simulation..." }
  322. $t run
  323. }
  324. global argv arg0
  325. runtest $argv