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

通讯编程

开发平台:

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-ap1.tcl,v 1.4 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/ap -superclass TestSuite
  41. #wireless model using 802.11 AP
  42. proc usage {} {
  43. global argv0
  44. puts stderr "usage: ns $argv0 <tests> "
  45. puts "Valid Tests: ap"
  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.     set opt(x) 670 ;# X dimension of the topography
  58.     set opt(y) 670;# Y dimension of the topography
  59.     set opt(ifqlen) 50       ;# max packet in ifq
  60.     set opt(seed) 0.0
  61.     set opt(tr) temp.rands    ;# trace file
  62.     set opt(lm)         "off"          ;# log movement
  63. }
  64. # =====================================================================
  65. # Other default settings
  66. LL set mindelay_ 50us
  67. LL set delay_ 25us
  68. LL set bandwidth_ 0 ;# not used
  69. Agent/Null set sport_ 0
  70. Agent/Null set dport_ 0
  71. Agent/CBR set sport_ 0
  72. Agent/CBR set dport_ 0
  73. Agent/TCPSink set sport_ 0
  74. Agent/TCPSink set dport_ 0
  75. Agent/TCP set sport_ 0
  76. Agent/TCP set dport_ 0
  77. Agent/TCP set packetSize_ 1460
  78. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  79. # unity gain, omni-directional antennas
  80. # set up the antennas to be centered in the node and 1.5 meters above it
  81. Antenna/OmniAntenna set X_ 0
  82. Antenna/OmniAntenna set Y_ 0
  83. Antenna/OmniAntenna set Z_ 1.5
  84. Antenna/OmniAntenna set Gt_ 1.0
  85. Antenna/OmniAntenna set Gr_ 1.0
  86. # Initialize the SharedMedia interface with parameters to make
  87. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  88. Phy/WirelessPhy set CPThresh_ 10.0
  89. Phy/WirelessPhy set CSThresh_ 1.559e-11
  90. Phy/WirelessPhy set RXThresh_ 3.652e-10
  91. Phy/WirelessPhy set Rb_ 2*1e6
  92. Phy/WirelessPhy set Pt_ 0.28183815
  93. Phy/WirelessPhy set freq_ 914e+6 
  94. Phy/WirelessPhy set L_ 1.0
  95. # =====================================================================
  96. TestSuite instproc init {} {
  97. global opt tracefd topo chan prop 
  98. global node_ god_ 
  99. $self instvar ns_ testName_
  100. set ns_         [new Simulator]
  101. set topo [new Topography]
  102. set tracefd [open $opt(tr) w]
  103. $ns_ trace-all $tracefd
  104. set opt(rp) $testName_
  105. $topo load_flatgrid $opt(x) $opt(y)
  106. #puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  107. #puts $tracefd "M 0.0 sc:$opt(sc) cp:$opt(cp) seed:$opt(seed)"
  108. #puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  109. #set god_ [create-god $opt(nn)]
  110. }
  111. Test/ap instproc init {} {
  112. global opt node_ god_ chan topo
  113. $self instvar ns_ testName_
  114. set testName_       ap
  115. set opt(nn) 3      
  116. set opt(stop)       1.0
  117. $self next
  118. #
  119. # Create God
  120. #
  121. set god_ [create-god $opt(nn)]
  122. $ns_ node-config -adhocRouting AODV 
  123. -llType $opt(ll) 
  124. -macType $opt(mac) 
  125. -ifqType $opt(ifq) 
  126. -ifqLen $opt(ifqlen) 
  127. -antType $opt(ant) 
  128. -propType $opt(prop) 
  129. -phyType $opt(netif) 
  130. -channel [new $opt(chan)] 
  131. -topoInstance $topo 
  132. -agentTrace ON 
  133. -routerTrace ON 
  134. -macTrace OFF 
  135. -toraDebug OFF 
  136. -movementTrace OFF
  137.     
  138.       for {set i 0} {$i < $opt(nn) } {incr i} {
  139.                   set node_($i) [$ns_ node]
  140.                   $node_($i) random-motion 0              ;# disable random motion
  141.                 set mac_($i) [$node_($i) getMac 0]
  142.                 $mac_($i) set dataRate_ 54Mb
  143.                 $mac_($i) set basicRate_ 24Mb
  144.                 $mac_($i) set RTSThreshold_ 3000
  145.                 $node_($i) set X_ 0.0
  146.                 $node_($i) set Y_ 0.0
  147.                 $node_($i) set Z_ 0.0
  148.       }
  149.       # Tell everyone who the AP is
  150.       set AP_ADDR [$mac_(0) id]
  151.       for {set i 0} {$i < $opt(nn) } {incr i} {
  152.             $mac_($i) bss_id $AP_ADDR
  153.       }
  154.       puts "Load complete..."
  155.       $self  create-tcp-traffic 0 $node_(1) $node_(2) 0.0001
  156.       #
  157.       # Tell all the nodes when the simulation ends
  158.       #
  159.       for {set i 0} {$i < $opt(nn) } {incr i} {
  160.         $ns_ at $opt(stop).000000001 "$node_($i) reset";
  161.       }
  162.       $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  163.       $ns_ at $opt(stop).1 "$self finish-ap"
  164. }
  165. Test/ap instproc run {} {
  166. $self instvar ns_
  167. puts "Starting Simulation..."
  168. $ns_ run
  169. }
  170. TestSuite instproc finish-ap {} {
  171. $self instvar ns_
  172. global quiet opt tracefd
  173. $ns_ flush-trace
  174.         
  175.         #set tracefd [open $opt(tr) r]
  176.         #set tracefd2    [open $opt(tr).w w]
  177.         #while { [eof $tracefd] == 0 } {
  178.  #   set line [gets $tracefd]
  179.  #   set items [split $line " "]
  180.   #set time [lindex $items 1]
  181.     
  182.    # set times [split $time "."]
  183.    # set time1 [lindex $times 0]
  184.    # set time2 [lindex $times 1]
  185.    # set newtime2 [string range $time2 0 2]
  186.    # set time $time1.$newtime2
  187.    # puts $line
  188.    # puts $items
  189.    # set newline [lreplace $line 1 1 $time] 
  190.    # puts $tracefd2 $newline
  191. #}
  192. close $tracefd
  193. #close $tracefd2
  194. #exec mv $opt(tr).w $opt(tr)
  195. puts "finish.."
  196. exit 0
  197. }
  198. TestSuite instproc finish {} {
  199. $self instvar ns_
  200. global quiet
  201. $ns_ flush-trace
  202.         #if { !$quiet } {
  203.         #        puts "running nam..."
  204.         #        exec nam temp.rands.nam &
  205.         #}
  206. puts "finishing.."
  207. exit 0
  208. }
  209. TestSuite instproc log-movement {} {
  210. global ns
  211. $self instvar logtimer_ ns_
  212. set ns $ns_
  213. source ../mobility/timer.tcl
  214. Class LogTimer -superclass Timer
  215. LogTimer instproc timeout {} {
  216. global opt node_;
  217. for {set i 0} {$i < $opt(nn)} {incr i} {
  218. $node_($i) log-movement
  219. }
  220. $self sched 0.1
  221. }
  222. set logtimer_ [new LogTimer]
  223. $logtimer_ sched 0.1
  224. }
  225. TestSuite instproc create-tcp-traffic {id src dst start} {
  226.     $self instvar ns_
  227.     set tcp_($id) [new Agent/TCP]
  228.     $tcp_($id) set class_ 2
  229.     set sink_($id) [new Agent/TCPSink]
  230.     $ns_ attach-agent $src $tcp_($id)
  231.     $ns_ attach-agent $dst $sink_($id)
  232.     $ns_ connect $tcp_($id) $sink_($id)
  233.     set ftp_($id) [new Application/FTP]
  234.     $ftp_($id) attach-agent $tcp_($id)
  235.     $ns_ at $start "$ftp_($id) start"
  236.     
  237. }
  238. TestSuite instproc create-udp-traffic {id src dst start} {
  239.     $self instvar ns_
  240.     set udp_($id) [new Agent/UDP]
  241.     $ns_ attach-agent $src $udp_($id)
  242.     set null_($id) [new Agent/Null]
  243.     $ns_ attach-agent $dst $null_($id)
  244.     set cbr_($id) [new Application/Traffic/CBR]
  245.     $cbr_($id) set packetSize_ 512
  246.     $cbr_($id) set interval_ 4.0
  247.     $cbr_($id) set random_ 1
  248.     $cbr_($id) set maxpkts_ 10000
  249.     $cbr_($id) attach-agent $udp_($id)
  250.     $ns_ connect $udp_($id) $null_($id)
  251.     $ns_ at $start "$cbr_($id) start"
  252. }
  253. proc runtest {arg} {
  254. global quiet
  255. set quiet 0
  256. set b [llength $arg]
  257. if {$b == 1} {
  258. set test $arg
  259. } elseif {$b == 2} {
  260. set test [lindex $arg 0]
  261. if {[lindex $arg 1] == "QUIET"} {
  262. set quiet 1
  263. }
  264. } else {
  265. usage
  266. }
  267. set t [new Test/$test]
  268. $t run
  269. }
  270. global argv arg0
  271. default_options
  272. runtest $argv