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

通讯编程

开发平台:

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