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

通讯编程

开发平台:

Visual C++

  1. # -*- Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-
  2. Agent/TCP set tcpTick_ 0.1
  3. # The default for tcpTick_ is being changed to reflect a changing reality.
  4. Agent/TCP set rfc2988_ false
  5. # The default for rfc2988_ is being changed to true.
  6. # FOR UPDATING GLOBAL DEFAULTS:
  7. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  8. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  9. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  10. Agent/TCP set minrto_ 1
  11. # default changed on 10/14/2004.
  12. Agent/TCP set windowInit_ 1
  13. # The default is being changed to 2.
  14. Agent/TCP set singledup_ 0
  15. # The default is being changed to 1
  16. Mac/802_11 set bugFix_timer_ false;     # default changed 2006/1/30
  17. #
  18. # Copyright (c) 1998 University of Southern California.
  19. # All rights reserved.                                            
  20. #                                                                
  21. # Redistribution and use in source and binary forms are permitted
  22. # provided that the above copyright notice and this paragraph are
  23. # duplicated in all such forms and that any documentation, advertising
  24. # materials, and other materials related to such distribution and use
  25. # acknowledge that the software was developed by the University of
  26. # Southern California, Information Sciences Institute.  The name of the
  27. # University may not be used to endorse or promote products derived from
  28. # this software without specific prior written permission.
  29. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  30. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  31. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  32. # $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-wireless-lan-aodv.tcl,v 1.14 2006/01/30 21:27:52 mweigle Exp $
  33. # This test suite is for validating wireless lans 
  34. # To run all tests: test-all-wireless-lan-tora
  35. # to run individual test:
  36. #
  37. # To view a list of available test to run with this script:
  38. # ns test-suite-wireless-lan.tcl
  39. #
  40. Class TestSuite
  41. Class Test/aodv -superclass TestSuite
  42. #wireless model using AODV
  43. proc usage {} {
  44. global argv0
  45. puts stderr "usage: ns $argv0 <tests> "
  46. puts "Valid Tests: aodv"
  47. exit 1
  48. }
  49. proc default_options {} {
  50.     global opt
  51.     set opt(chan) Channel/WirelessChannel
  52.     set opt(prop) Propagation/TwoRayGround
  53.     set opt(netif) Phy/WirelessPhy
  54.     set opt(mac) Mac/802_11
  55.     set opt(ifq) Queue/DropTail/PriQueue
  56.     set opt(ll) LL
  57.     set opt(ant)        Antenna/OmniAntenna
  58.     set opt(x) 670 ;# X dimension of the topography
  59.     set opt(y) 670;# Y dimension of the topography
  60.     set opt(ifqlen) 50       ;# max packet in ifq
  61.     set opt(seed) 0.0
  62.     set opt(tr) temp.rands    ;# trace file
  63.     set opt(lm)         "off"          ;# log movement
  64. }
  65. # =====================================================================
  66. # Other default settings
  67. LL set mindelay_ 50us
  68. LL set delay_ 25us
  69. LL set bandwidth_ 0 ;# not used
  70. Agent/Null set sport_ 0
  71. Agent/Null set dport_ 0
  72. Agent/CBR set sport_ 0
  73. Agent/CBR set dport_ 0
  74. Agent/TCPSink set sport_ 0
  75. Agent/TCPSink set dport_ 0
  76. Agent/TCP set sport_ 0
  77. Agent/TCP set dport_ 0
  78. Agent/TCP set packetSize_ 1460
  79. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  80. # unity gain, omni-directional antennas
  81. # set up the antennas to be centered in the node and 1.5 meters above it
  82. Antenna/OmniAntenna set X_ 0
  83. Antenna/OmniAntenna set Y_ 0
  84. Antenna/OmniAntenna set Z_ 1.5
  85. Antenna/OmniAntenna set Gt_ 1.0
  86. Antenna/OmniAntenna set Gr_ 1.0
  87. # Initialize the SharedMedia interface with parameters to make
  88. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  89. Phy/WirelessPhy set CPThresh_ 10.0
  90. Phy/WirelessPhy set CSThresh_ 1.559e-11
  91. Phy/WirelessPhy set RXThresh_ 3.652e-10
  92. Phy/WirelessPhy set Rb_ 2*1e6
  93. Phy/WirelessPhy set Pt_ 0.28183815
  94. Phy/WirelessPhy set freq_ 914e+6 
  95. Phy/WirelessPhy set L_ 1.0
  96. # =====================================================================
  97. TestSuite instproc init {} {
  98. global opt tracefd topo chan prop 
  99. global node_ god_ 
  100. $self instvar ns_ testName_
  101. set ns_         [new Simulator]
  102. if {[string compare $testName_ "aodv"] && 
  103. [string compare $testName_ "tora"]} {
  104. $ns_ set-address-format hierarchical
  105. AddrParams set domain_num_ 3
  106. lappend cluster_num 2 1 1
  107. AddrParams set cluster_num_ $cluster_num
  108. lappend eilastlevel 1 1 4 1
  109. AddrParams set nodes_num_ $eilastlevel
  110.         } 
  111. set topo [new Topography]
  112. set tracefd [open $opt(tr) w]
  113. $ns_ trace-all $tracefd
  114. #set opt(rp) $testName_
  115. $topo load_flatgrid $opt(x) $opt(y)
  116. puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  117. puts $tracefd "M 0.0 sc:$opt(sc) cp:$opt(cp) seed:$opt(seed)"
  118. puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  119. }
  120. Test/aodv instproc init {} {
  121. global opt node_ god_ chan topo
  122. $self instvar ns_ testName_
  123. set testName_       aodv
  124. set opt(rp)         aodv
  125. set opt(cp) "../mobility/scene/cbr-50-20-4-512" 
  126. set opt(sc) "../mobility/scene/scen-670x670-50-600-20-0" 
  127. set opt(nn) 50      
  128. set opt(stop)       1000.0
  129. $self next
  130. #
  131. # Create God
  132. #
  133. set god_ [create-god $opt(nn)]
  134. $ns_ node-config -adhocRouting AODV 
  135. -llType $opt(ll) 
  136. -macType $opt(mac) 
  137. -ifqType $opt(ifq) 
  138. -ifqLen $opt(ifqlen) 
  139. -antType $opt(ant) 
  140. -propType $opt(prop) 
  141. -phyType $opt(netif) 
  142. -channel [new $opt(chan)] 
  143. -topoInstance $topo 
  144. -agentTrace ON 
  145. -routerTrace ON 
  146. -macTrace OFF 
  147. -toraDebug OFF 
  148. -movementTrace OFF
  149.     
  150. for {set i 0} {$i < $opt(nn) } {incr i} {
  151.                 set node_($i) [$ns_ node]
  152.                 $node_($i) random-motion 0              ;# disable random motion
  153. }
  154. puts "Loading connection pattern..."
  155. source $opt(cp)
  156. puts "Loading scenario file..."
  157. source $opt(sc)
  158. puts "Load complete..."
  159. $ns_ at $opt(stop) "puts "NS EXITING...";"
  160. $ns_ at $opt(stop).1 "$self finish-aodv"
  161. }
  162. Test/aodv instproc run {} {
  163. $self instvar ns_
  164. puts "Starting Simulation..."
  165. $ns_ run
  166. }
  167. TestSuite instproc finish-aodv {} {
  168. $self instvar ns_
  169. global quiet opt tracefd
  170. $ns_ flush-trace
  171.         
  172.         #set tracefd [open $opt(tr) r]
  173.         #set tracefd2    [open $opt(tr).w w]
  174.         #while { [eof $tracefd] == 0 } {
  175.  #   set line [gets $tracefd]
  176.  #   set items [split $line " "]
  177.   #set time [lindex $items 1]
  178.     
  179.    # set times [split $time "."]
  180.    # set time1 [lindex $times 0]
  181.    # set time2 [lindex $times 1]
  182.    # set newtime2 [string range $time2 0 2]
  183.    # set time $time1.$newtime2
  184.    # puts $line
  185.    # puts $items
  186.    # set newline [lreplace $line 1 1 $time] 
  187.    # puts $tracefd2 $newline
  188. #}
  189. close $tracefd
  190. #close $tracefd2
  191. #exec mv $opt(tr).w $opt(tr)
  192. puts "finish.."
  193. exit 0
  194. }
  195. TestSuite instproc finish {} {
  196. $self instvar ns_
  197. global quiet
  198. $ns_ flush-trace
  199.         #if { !$quiet } {
  200.         #        puts "running nam..."
  201.         #        exec nam temp.rands.nam &
  202.         #}
  203. puts "finishing.."
  204. exit 0
  205. }
  206. TestSuite instproc log-movement {} {
  207. global ns
  208. $self instvar logtimer_ ns_
  209. set ns $ns_
  210. source ../mobility/timer.tcl
  211. Class LogTimer -superclass Timer
  212. LogTimer instproc timeout {} {
  213. global opt node_;
  214. for {set i 0} {$i < $opt(nn)} {incr i} {
  215. $node_($i) log-movement
  216. }
  217. $self sched 0.1
  218. }
  219. set logtimer_ [new LogTimer]
  220. $logtimer_ sched 0.1
  221. }
  222. TestSuite instproc create-tcp-traffic {id src dst start} {
  223.     $self instvar ns_
  224.     set tcp_($id) [new Agent/TCP]
  225.     $tcp_($id) set class_ 2
  226.     set sink_($id) [new Agent/TCPSink]
  227.     $ns_ attach-agent $src $tcp_($id)
  228.     $ns_ attach-agent $dst $sink_($id)
  229.     $ns_ connect $tcp_($id) $sink_($id)
  230.     set ftp_($id) [new Application/FTP]
  231.     $ftp_($id) attach-agent $tcp_($id)
  232.     $ns_ at $start "$ftp_($id) start"
  233.     
  234. }
  235. TestSuite instproc create-udp-traffic {id src dst start} {
  236.     $self instvar ns_
  237.     set udp_($id) [new Agent/UDP]
  238.     $ns_ attach-agent $src $udp_($id)
  239.     set null_($id) [new Agent/Null]
  240.     $ns_ attach-agent $dst $null_($id)
  241.     set cbr_($id) [new Application/Traffic/CBR]
  242.     $cbr_($id) set packetSize_ 512
  243.     $cbr_($id) set interval_ 4.0
  244.     $cbr_($id) set random_ 1
  245.     $cbr_($id) set maxpkts_ 10000
  246.     $cbr_($id) attach-agent $udp_($id)
  247.     $ns_ connect $udp_($id) $null_($id)
  248.     $ns_ at $start "$cbr_($id) start"
  249. }
  250. proc runtest {arg} {
  251. global quiet
  252. set quiet 0
  253. set b [llength $arg]
  254. if {$b == 1} {
  255. set test $arg
  256. } elseif {$b == 2} {
  257. set test [lindex $arg 0]
  258. if {[lindex $arg 1] == "QUIET"} {
  259. set quiet 1
  260. }
  261. } else {
  262. usage
  263. }
  264. set t [new Test/$test]
  265. $t run
  266. }
  267. global argv arg0
  268. default_options
  269. runtest $argv