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

通讯编程

开发平台:

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. #
  14. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  15. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  16. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  17. #
  18. # This test suite is for validating shadowing propagation model
  19. # To run all tests: test-all-wireless-shadowing
  20. # to run individual test:
  21. # ns test-suite-wireless-shadowing.tcl dsdv
  22. # ns test-suite-wireless-shadowing.tcl dsr
  23. #
  24. # To view a list of available test to run with this script:
  25. # ns test-suite-wireless-shadowing.tcl
  26. Mac/802_11 set bugFix_timer_ false;     # default changed 2006/1/30
  27. Class TestSuite
  28. # wireless model using destination sequence distance vector
  29. Class Test/dsdv -superclass TestSuite
  30. # wireless model using dynamic source routing
  31. Class Test/dsr -superclass TestSuite
  32. proc usage {} {
  33. global argv0
  34. puts stderr "usage: ns $argv0 <tests> "
  35. puts "Valid Tests: dsdv dsr"
  36. exit 1
  37. }
  38. proc default_options {} {
  39. global opt
  40. set opt(chan) Channel/WirelessChannel
  41. set opt(prop) Propagation/Shadowing
  42. set opt(netif) Phy/WirelessPhy
  43. set opt(mac) Mac/802_11
  44. set opt(ifq) Queue/DropTail/PriQueue
  45. set opt(ll) LL
  46. set opt(ant)    Antenna/OmniAntenna
  47. set opt(x) 670 ;# X dimension of the topography
  48. set opt(y) 670;# Y dimension of the topography
  49. set opt(ifqlen) 50       ;# max packet in ifq
  50. set opt(seed) 0.0
  51. set opt(tr) temp.rands    ;# trace file
  52. set opt(lm) "off"          ;# log movement
  53. }
  54. # =====================================================================
  55. # Other default settings
  56. LL set mindelay_ 50us
  57. LL set delay_ 25us
  58. LL set bandwidth_ 0 ;# not used
  59. Agent/Null set sport_ 0
  60. Agent/Null set dport_ 0
  61. Agent/CBR set sport_ 0
  62. Agent/CBR set dport_ 0
  63. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  64. # unity gain, omni-directional antennas
  65. # set up the antennas to be centered in the node and 1.5 meters above it
  66. Antenna/OmniAntenna set X_ 0
  67. Antenna/OmniAntenna set Y_ 0
  68. Antenna/OmniAntenna set Z_ 1.5
  69. Antenna/OmniAntenna set Gt_ 1.0
  70. Antenna/OmniAntenna set Gr_ 1.0
  71. # Initialize the SharedMedia interface with parameters to make
  72. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  73. Phy/WirelessPhy set CPThresh_ 10.0
  74. Phy/WirelessPhy set CSThresh_ 1.559e-11
  75. Phy/WirelessPhy set RXThresh_ 3.652e-10
  76. Phy/WirelessPhy set bandwidth_ 2e6
  77. Phy/WirelessPhy set Pt_ 0.28183815
  78. Phy/WirelessPhy set freq_ 914e+6
  79. Phy/WirelessPhy set L_ 1.0
  80. # =====================================================================
  81. TestSuite instproc init {} {
  82. global opt tracefd topo chan prop_
  83. global node_ god_
  84. $self instvar ns_ testName_
  85. set ns_         [new Simulator]
  86. if {[string compare $testName_ "dsdv"] && 
  87. [string compare $testName_ "dsr"]} {
  88. $ns_ node-config -addressType hierarchical
  89. AddrParams set domain_num_ 3
  90. lappend cluster_num 2 1 1
  91. AddrParams set cluster_num_ $cluster_num
  92. lappend eilastlevel 1 1 4 1
  93. AddrParams set nodes_num_ $eilastlevel
  94. }
  95. set topo [new Topography]
  96. set tracefd [open $opt(tr) w]
  97. set prop_ [new $opt(prop)]
  98. $prop_ set pathlossExp_ 2.0
  99. $prop_ set std_db_ 4.0
  100. $prop_ set dist0_ 1.0
  101. $prop_ seed predef 0
  102. $ns_ trace-all $tracefd
  103. $topo load_flatgrid $opt(x) $opt(y)
  104. puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  105. puts $tracefd "M 0.0 sc:$opt(sc) cp:$opt(cp) seed:$opt(seed)"
  106. puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  107. set god_ [create-god $opt(nn)]
  108. }
  109. Test/dsdv instproc init {} {
  110.     global opt node_ god_ chan topo prop_
  111.     $self instvar ns_ testName_
  112.     set testName_       dsdv
  113.     set opt(rp)         dsdv
  114.     set opt(cp) "../mobility/scene/cbr-50-20-4-512"
  115.     set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0" ;
  116.     set opt(nn) 50
  117.     set opt(stop)       500.0
  118.     $self next
  119.     $ns_ node-config -adhocRouting DSDV 
  120.                          -llType $opt(ll) 
  121.                          -macType $opt(mac) 
  122.                          -ifqType $opt(ifq) 
  123.                          -ifqLen $opt(ifqlen) 
  124.                          -antType $opt(ant) 
  125.                          -propInstance $prop_ 
  126.                          -phyType $opt(netif) 
  127.  -channel [new $opt(chan)] 
  128.  -topoInstance $topo 
  129.                          -agentTrace ON 
  130.                          -routerTrace OFF 
  131.                          -macTrace OFF 
  132.                          -movementTrace OFF
  133.     for {set i 0} {$i < $opt(nn) } {incr i} {
  134.                 set node_($i) [$ns_ node]
  135.                 $node_($i) random-motion 0          ;# disable random motion
  136.     }
  137.     puts "Loading connection pattern..."
  138.     source $opt(cp)
  139.     puts "Loading scenario file..."
  140.     source $opt(sc)
  141.     puts "Load complete..."
  142.     #
  143.     # Tell all the nodes when the simulation ends
  144.     #
  145.     for {set i 0} {$i < $opt(nn) } {incr i} {
  146. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  147.     }
  148.     $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  149.     $ns_ at $opt(stop).1 "$self finish"
  150. }
  151. Test/dsdv instproc run {} {
  152.     $self instvar ns_
  153.     puts "Starting Simulation..."
  154.     $ns_ run
  155. }
  156. Test/dsr instproc init {} {
  157.     global opt node_ god_ chan topo prop_
  158.     $self instvar ns_ testName_
  159.     set testName_       dsr
  160.     set opt(rp)         dsr
  161.     set opt(ifq)        CMUPriQueue
  162.     set opt(cp)         "../mobility/scene/cbr-50-20-4-512"
  163.     set opt(sc)         "../mobility/scene/scen-670x670-50-600-20-0" ;
  164.     set opt(nn)         50
  165.     set opt(stop)       500.0
  166.     $self next
  167.     $ns_ node-config -adhocRouting $opt(rp) 
  168.                          -llType $opt(ll) 
  169.                          -macType $opt(mac) 
  170.                          -ifqType $opt(ifq) 
  171.                          -ifqLen $opt(ifqlen) 
  172.                          -antType $opt(ant) 
  173.                          -propInstance $prop_ 
  174.                          -phyType $opt(netif) 
  175.  -channel [new $opt(chan)] 
  176.  -topoInstance $topo 
  177.                          -agentTrace ON 
  178.                          -routerTrace OFF 
  179.                          -macTrace OFF 
  180.                          -movementTrace OFF
  181.     for {set i 0} {$i < $opt(nn) } {incr i} {
  182.                 set node_($i) [$ns_ node]
  183.                 $node_($i) random-motion 0          ;# disable random motion
  184.     }
  185.     puts "Loading connection pattern..."
  186.     source $opt(cp)
  187.     puts "Loading scenario file..."
  188.     source $opt(sc)
  189.     puts "Load complete..."
  190.     #
  191.     # Tell all the nodes when the simulation ends
  192.     #
  193.     for {set i 0} {$i < $opt(nn) } {incr i} {
  194. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  195.     }
  196.     $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  197.     $ns_ at $opt(stop).1 "$self finish"
  198. }
  199. Test/dsr instproc run {} {
  200. $self instvar ns_
  201. puts "Starting Simulation..."
  202. $ns_ run
  203. }
  204. TestSuite instproc finish-dsr {} {
  205. $self instvar ns_
  206. global quiet opt tracefd
  207. $ns_ flush-trace
  208. flush $tracefd
  209. close $tracefd
  210.         set tracefd [open $opt(tr) r]
  211.         set tracefd2    [open $opt(tr).w w]
  212.         while { [eof $tracefd] == 0 } {
  213.     set line [gets $tracefd]
  214.     set items [split $line " "]
  215.     set time [lindex $items 1]
  216.     set times [split $time "."]
  217.     set time1 [lindex $times 0]
  218.     set time2 [lindex $times 1]
  219.     set newtime2 [string range $time2 0 3]
  220.     set time $time1.$newtime2
  221.     set newline [lreplace $line 1 1 $time]
  222.     puts $tracefd2 $newline
  223. }
  224. close $tracefd
  225. close $tracefd2
  226. exec mv $opt(tr).w $opt(tr)
  227. puts "finishing.."
  228. exit 0
  229. }
  230. TestSuite instproc finish {} {
  231. $self instvar ns_
  232. global quiet
  233. $ns_ flush-trace
  234.         #if { !$quiet } {
  235.         #        puts "running nam..."
  236.         #        exec nam temp.rands.nam &
  237.         #}
  238. puts "finishing.."
  239. exit 0
  240. }
  241. proc runtest {arg} {
  242. global quiet
  243. set quiet 0
  244. set b [llength $arg]
  245. if {$b == 1} {
  246. set test $arg
  247. } elseif {$b == 2} {
  248. set test [lindex $arg 0]
  249. if {[lindex $arg 1] == "QUIET"} {
  250. set quiet 1
  251. }
  252. } else {
  253. usage
  254. }
  255. set t [new Test/$test]
  256. $t run
  257. }
  258. global argv arg0
  259. default_options
  260. runtest $argv