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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1998 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 SRM
  17. # To run all tests: test-all-srm
  18. # to run individual test:
  19. # ns test-suite-srm.tcl srm-chain
  20. # ns test-suite-srm.tcl srm-star
  21. # ....
  22. #
  23. # To view a list of available test to run with this script:
  24. # ns test-suite-srm.tcl
  25. #
  26. #remove-all-packet-headers       ; # removes all except common
  27. #add-packet-header Flags IP TCP SRM aSRM SRMEXT; 
  28. # hdrs reqd for validation test
  29. Class TestSuite
  30. Class Test/srm-chain -superclass TestSuite
  31. # Simple chain topology
  32. Class Test/srm-star -superclass TestSuite
  33. # Simple star topology
  34. Class Test/srm-adapt-rep -superclass TestSuite
  35. # simple 8 node star topology, runs for 10s, tests Adaptive repair timers.
  36. Class Test/srm-adapt-req -superclass TestSuite
  37. # simple 8 node star topology, runs for 10s, tests Adaptive request timers.
  38. #Class Test/srm-chain-session -superclass TestSuite
  39. # session simulations using srm in chain topo
  40. proc usage {} {
  41.     global argv0
  42.     puts stderr "usage: ns $argv0 <tests> "
  43.     puts "Valid Tests: srm-chain srm-star adapt-rep-timer adapt-req-timer
  44.     srm-chain-session"
  45.     exit 1
  46. }
  47. Class Topology
  48. Topology instproc init {} {
  49.     $self instvar nmax_ n_
  50. }
  51. Topology instproc totalnodes? {} {
  52.     $self instvar nmax_ 
  53.     return $nmax_
  54. }
  55. Topology instproc node? num {
  56.     $self instvar n_
  57.     return $n_($num)
  58. }
  59. Topology instproc src? {} {
  60.     $self instvar src_
  61.     return $src_
  62. }
  63. Class Topology/chain5 -superclass Topology
  64. Topology/chain5 instproc init ns {
  65.     $self instvar nmax_ n_ src_
  66.     set nmax_ 5
  67.     for {set i 0} {$i <= $nmax_} {incr i} {
  68. set n_($i) [$ns node]
  69.     }
  70.     $self next
  71.     set chainMax [expr $nmax_ - 1]
  72.     set j 0
  73.     for {set i 1} {$i <= $chainMax} {incr i} {
  74. $ns duplex-link $n_($i) $n_($j) 1.5Mb 10ms DropTail
  75. $ns duplex-link-op $n_($j) $n_($i) orient right
  76. set j $i
  77.     }
  78.     set src_ 0
  79.     $ns duplex-link $n_([expr $nmax_ - 2]) $n_($nmax_) 1.5Mb 10ms DropTail
  80.     $ns duplex-link-op $n_([expr $nmax_ - 2]) $n_($nmax_) orient right-up
  81.     $ns duplex-link-op $n_([expr $nmax_ - 2]) $n_([expr $nmax_-1]) orient right-down
  82.     #$ns queue-limit $n_(0) $n_(1) 2 ;# q-limit is 1 more than max #packets in q.
  83.     #$ns queue-limit $n_(1) $n_(0) 2 
  84.     
  85. }
  86. Class Topology/star8 -superclass Topology
  87. Topology/star8 instproc init ns {
  88.     $self instvar nmax_ n_ src_
  89.     set nmax_ 8
  90.     for {set i 0} {$i <= $nmax_} {incr i} {
  91. set n_($i) [$ns node]
  92.     }
  93.     $self next
  94.     for {set i 1} {$i <= $nmax_} {incr i} {
  95. $ns duplex-link $n_($i) $n_(0) 1.5Mb 10ms DropTail
  96.     }
  97.     set src_ 1
  98. }
  99. TestSuite instproc finish {src} {
  100.     global opts
  101.     $self instvar ns_ n_
  102.     $src stop
  103.     $ns_ flush-trace
  104.     if {$opts(quiet) == "false"} {
  105.      puts "finishing.."
  106.     }
  107.     exit 0
  108. }
  109. TestSuite instproc set-mcast {src num time} {
  110.     global opts
  111.     $self instvar ns_ n_ g_
  112.     if {$opts(quiet) == "false"} {
  113.      puts "seting mcast.."
  114.     }
  115.     set mh [$ns_ mrtproto CtrMcast {}]
  116.     $ns_ at 0.3 "$mh switch-treetype $g_"
  117.     
  118.     # now the multicast, and the agents
  119.     #set srmSimType Deterministic
  120.     set fid 0
  121.     for {set i 0} {$i <= $num} {incr i} {
  122. set srm($i) [new Agent/SRM/Deterministic]
  123. $srm($i) set dst_addr_ $g_
  124. $srm($i) set dst_port_ 0
  125. $srm($i) set fid_ [incr fid]
  126. $ns_ at 1.0 "$srm($i) start"
  127. $ns_ attach-agent $n_($i) $srm($i)
  128.     }
  129.     # Attach a data source to srm(1)
  130.     set packetSize 800
  131.     set s [new Agent/CBR]
  132.     $s set interval_ 0.04
  133.     # Agent/CBR is an old form, used in backward compatibility mode only.
  134.     # set s [new Application/Traffic/CBR]
  135.     # 6400 bits/packet, 25 packets per second, 160Kbps
  136.     $s set packetSize_ $packetSize
  137.     # $s set rate_ 160Kb
  138.     # $s attach-agent $srm($src)
  139.     $srm($src) traffic-source $s
  140.     $srm($src) set packetSize_ $packetSize
  141.     $s set fid_ 0
  142.     $ns_ at 3.0 "$srm($src) start-source"
  143.     $ns_ at $time "$self finish $s"
  144. }
  145. TestSuite instproc set-session {src num time } {
  146.     $self instvar ns_ n_ g_
  147.     puts "running session-mcast"
  148.     set fid 0
  149.     for {set i 0} {$i <= $num} {incr i} {
  150. set srm($i) [new Agent/SRM/Deterministic]
  151. $srm($i) set dst_addr_ $g_
  152. $srm($i) set fid_ [incr fid]
  153. $ns_ at 1.0 "$srm($i) start"
  154. $ns_ attach-agent $n_($i) $srm($i)
  155. set sessionhelper($i) [$ns_ create-session $n_($i) $srm($i)]
  156.     }
  157.     # Attach a data source to srm(0)
  158.     set packetSize 800
  159.     set s [new Agent/CBR]
  160.     $s set interval_ 0.04
  161.     $s set packetSize_ $packetSize
  162.     $srm(0) traffic-source $s
  163.     $srm(0) set packetSize_ $packetSize
  164.     $s set fid_ 0
  165.     $ns_ at 3.5 "$srm(0) start-source"
  166.     
  167.     set loss_module [new SRMErrorModel]
  168.     $loss_module drop-packet 2 10 1
  169.     $loss_module drop-target [$ns_ set nullAgent_]
  170.     $ns_ at 1.25 "$sessionhelper(0) insert-depended-loss $loss_module $srm(1) $srm(0) $g_"
  171.     $ns_ at $time "$self finish $s"
  172. }
  173. TestSuite instproc init {} {
  174.     $self instvar ns_ n_ g_ testName_ topo_ net_ time_ num_
  175.     if {$testName_ == "srm-chain-session"} {
  176. set ns_ [new SessionSim]
  177. $ns_ namtrace-all [open temp.rands w]
  178.     } else {
  179. set ns_ [new Simulator -multicast on]
  180. $ns_ trace-all [open temp.rands w]
  181. #$ns_ namtrace-all [open out.nam w]
  182.     }
  183.     set g_ [Node allocaddr]
  184.     set topo_ [new Topology/$net_ $ns_]
  185.     set nmax [$topo_ totalnodes?]
  186.     for {set i 0} {$i <= $nmax} {incr i} { 
  187. set n_($i) [$topo_ node? $i]
  188.     }
  189.     set src [$topo_ src?]
  190.     if {$testName_ == "srm-chain-session"} {
  191. $self set-session $src $num_ $time_
  192.     } else {
  193. $self set-mcast $src $num_ $time_
  194.     }
  195. }
  196. Test/srm-chain instproc init {} {
  197.     $self instvar ns_ testName_ net_ time_ num_
  198.     set testName_ srm-chain
  199.     set net_ chain5
  200.     set time_ 4.0
  201.     set num_ 5
  202.     $self next
  203. }
  204. Test/srm-chain instproc run {} {
  205.     $self instvar ns_ n_
  206.     set loss_module [new SRMErrorModel]
  207.     $loss_module drop-packet 2 10 1
  208.     $loss_module drop-target [$ns_ set nullAgent_]
  209.     $ns_ at 1.25 "$ns_ lossmodel $loss_module $n_(0) $n_(1)"
  210.     $ns_ run
  211. }
  212. Test/srm-star instproc init {} {
  213.     $self instvar ns_ testName_ net_ time_ num_
  214.     set testName_ srm-star
  215.     set net_ star8
  216.     set time_ 4.0
  217.     set num_ 8
  218.     $self next
  219. }
  220. Test/srm-star instproc run {} {
  221.     $self instvar ns_ n_
  222.     set loss_module [new SRMErrorModel]
  223.     $loss_module drop-packet 2 10 1
  224.     $loss_module drop-target [$ns_ set nullAgent_]
  225.     $ns_ at 1.25 "$ns_ lossmodel $loss_module $n_(1) $n_(0)"
  226.     $ns_ run
  227. }
  228. Test/srm-adapt-rep instproc init {} {
  229.     $self instvar ns_ testName_ net_ time_ num_
  230.     set testName_ srm-adapt-rep
  231.     set net_ star8
  232.     set time_ 10.0
  233.     set num_ 8
  234.     $self next
  235. }
  236. Test/srm-adapt-rep instproc run {} {
  237.     $self instvar ns_ n_
  238.     $n_(0) shape "other"
  239.     $n_(1) shape "box"
  240.     $ns_ duplex-link-op $n_(0) $n_(1) queuePos 0
  241.     set loss_module [new SRMErrorModel]
  242.     $loss_module drop-packet 2 200 1
  243.     $loss_module drop-target [$ns_ set nullAgent_]
  244.     $ns_ lossmodel $loss_module $n_(0) $n_(2)
  245.     $ns_ run
  246. }
  247. Test/srm-adapt-req instproc init {} {
  248.     $self instvar ns_ testName_ net_ time_ num_
  249.     set testName_ srm-adapt-req
  250.     set net_ star8
  251.     set time_ 10.0
  252.     set num_ 8
  253.     $self next
  254. }
  255. Test/srm-adapt-req instproc run {} {
  256.     $self instvar ns_ n_
  257.     $n_(0) shape "other"
  258.     $n_(1) shape "box"
  259.     $ns_ duplex-link-op $n_(0) $n_(1) queuePos 0
  260.     set loss_module [new SRMErrorModel]
  261.     $loss_module drop-packet 2 200 1
  262.     $loss_module drop-target [$ns_ set nullAgent_]
  263.     $ns_ lossmodel $loss_module $n_(1) $n_(0)
  264.     $ns_ run
  265. }
  266. #Test/srm-chain-session instproc init {} {
  267. #    $self instvar ns_ testName_ net_ time_ num_
  268. #    set testName_ srm-chain-session
  269. #    set net_ chain5
  270. #    set time_ 4.0
  271. #    set num_ 5
  272. #    $self next
  273. #}
  274. #Test/srm-chain-session instproc run {} {
  275. #    $self instvar ns_
  276. #    $ns_ run
  277. #}
  278. proc runtest {arg} {
  279.     global opts
  280.     set opts(quiet) false
  281.     set b [llength $arg]
  282.     if {$b == 1} {
  283. set test $arg
  284.     } elseif {$b == 2} {
  285. set test [lindex $arg 0]
  286. set second [lindex $arg 1]
  287. if {$second == "QUIET" || $second == "quiet"} {
  288. set opts(quiet) true
  289. }
  290.     } else {
  291. usage
  292.     }
  293.     if [catch {set t [new Test/$test]} result] {
  294. puts stderr $result
  295. puts "Error: Unknown test:$test"
  296. usage
  297. exit 1
  298.     }
  299.     $t run
  300. }
  301. global argv argv0
  302. runtest $argv