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

通讯编程

开发平台:

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,2000 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-newnode-err.tcl,v 1.7 2006/01/24 23:00:08 sallyfloyd Exp $
  32. # This test suite is for validating wireless lans with transmission errors 
  33. # To run all tests: test-all-wireless-lan
  34. # to run individual test:
  35. # ns test-suite-wireless-lan-newnode.tcl dsdv-uniform-err
  36. # ns test-suite-wireless-lan-newnode.tcl dsdv-multistate-err
  37. #
  38. # To view a list of available test to run with this script:
  39. # ns test-suite-wireless-lan.tcl
  40. Class TestSuite
  41. # wireless model using destination sequence distance vector
  42. Class Test/dsdv-uniform-err -superclass TestSuite
  43. Class Test/dsdv-multistate-err -superclass TestSuite
  44. proc usage {} {
  45. global argv0
  46. puts stderr "usage: ns $argv0 <tests> "
  47. puts "Valid Tests: dsdv-uniform-err dsdv-multistate-err"
  48. exit 1
  49. }
  50. proc default_options {} {
  51.     global opt
  52.     set opt(chan) Channel/WirelessChannel
  53.     set opt(prop) Propagation/TwoRayGround
  54.     set opt(netif) Phy/WirelessPhy
  55.     set opt(err)        UniformErrorProc
  56.     set opt(FECstrength) 1
  57.     set opt(unit)       pkt
  58.     set opt(mac) Mac/802_11
  59.     set opt(ifq) Queue/DropTail/PriQueue
  60.     set opt(ll) LL
  61.     set opt(ant)        Antenna/OmniAntenna
  62.     set opt(x) 670 ;# X dimension of the topography
  63.     set opt(y) 670;# Y dimension of the topography
  64.     set opt(ifqlen) 50       ;# max packet in ifq
  65.     set opt(seed) 0.0
  66.     set opt(tr) temp.rands    ;# trace file
  67.     set opt(lm)         "off"          ;# log movement
  68. }
  69. # =====================================================================
  70. # Other default settings
  71. LL set mindelay_ 50us
  72. LL set delay_ 25us
  73. LL set bandwidth_ 0 ;# not used
  74. Agent/Null set sport_ 0
  75. Agent/Null set dport_ 0
  76. Agent/CBR set sport_ 0
  77. Agent/CBR set dport_ 0
  78. Agent/TCPSink set sport_ 0
  79. Agent/TCPSink set dport_ 0
  80. Agent/TCP set sport_ 0
  81. Agent/TCP set dport_ 0
  82. Agent/TCP set packetSize_ 1000
  83. Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  84. # unity gain, omni-directional antennas
  85. # set up the antennas to be centered in the node and 1.5 meters above it
  86. Antenna/OmniAntenna set X_ 0
  87. Antenna/OmniAntenna set Y_ 0
  88. Antenna/OmniAntenna set Z_ 1.5
  89. Antenna/OmniAntenna set Gt_ 1.0
  90. Antenna/OmniAntenna set Gr_ 1.0
  91. # Initialize the SharedMedia interface with parameters to make
  92. # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  93. Phy/WirelessPhy set CPThresh_ 10.0
  94. Phy/WirelessPhy set CSThresh_ 1.559e-11
  95. Phy/WirelessPhy set RXThresh_ 3.652e-10
  96. Phy/WirelessPhy set Rb_ 2*1e6
  97. Phy/WirelessPhy set Pt_ 0.28183815
  98. Phy/WirelessPhy set freq_ 914e+6 
  99. Phy/WirelessPhy set L_ 1.0
  100. Phy/WirelessPhy set bandwidth_ 1e5
  101. # Initialize the Errormodel
  102. ErrorModule set debug_ false
  103. ErrorModel set enable_ 1
  104. ErrorModel set markecn_ false
  105. ErrorModel set bandwidth_ 2Mb
  106. ErrorModel set rate_ 0.00001
  107. ErrorModel/Trace set good_ 123456789
  108. ErrorModel/Trace set loss_ 0
  109. ErrorModel/Periodic set period_ 3.0
  110. ErrorModel/Periodic set offset_ 0.0
  111. ErrorModel/Periodic set burstlen_ 0.0
  112. ErrorModel/MultiState set curperiod_ 0.0
  113. ErrorModel/MultiState set sttype_ pkt
  114. ErrorModel/MultiState set texpired_ 0
  115. # =====================================================================
  116. TestSuite instproc init {} {
  117. global opt tracefd topo chan prop 
  118. global node_ god_ 
  119. $self instvar ns_ testName_
  120. set ns_         [new Simulator]
  121. if {[string compare $testName_ "dsdv-uniform-err"] && 
  122. [string compare $testName_ "dsdv-multistate-err"]} {
  123. $ns_ node-config -addressType hierarchical
  124. AddrParams set domain_num_ 3
  125. lappend cluster_num 2 1 1
  126. AddrParams set cluster_num_ $cluster_num
  127. lappend eilastlevel 1 1 4 1
  128. AddrParams set nodes_num_ $eilastlevel
  129. }
  130. set topo [new Topography]
  131. set tracefd [open $opt(tr) w]
  132. set namfd       [open "wireless.nam" w]
  133. $ns_ trace-all $tracefd
  134. $ns_ namtrace-all $namfd
  135.         # ns-random $opt(seed)
  136. $topo load_flatgrid $opt(x) $opt(y)
  137. puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y) rp:$opt(rp)"
  138. puts $tracefd "M 0.0 sc:$opt(sc) seed:$opt(seed)"
  139. puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  140. set god_ [create-god $opt(nn)]
  141. }
  142. Test/dsdv-uniform-err instproc init {} {
  143.     global opt node_ god_ chan topo 
  144.     $self instvar ns_ testName_
  145.     set testName_       dsdv-uniform-err
  146.     set opt(rp)         dsdv
  147.     set opt(sc) "../mobility/scene/scen-3-test" 
  148.     set opt(nn) 3       
  149.     set opt(stop)       100.0
  150.     
  151.     $self next
  152.     
  153.     $ns_ node-config -adhocRouting DSDV 
  154.                          -llType $opt(ll) 
  155.                          -macType $opt(mac) 
  156.                          -ifqType $opt(ifq) 
  157.                          -ifqLen $opt(ifqlen) 
  158.                          -antType $opt(ant) 
  159.                          -propType $opt(prop) 
  160.                          -phyType $opt(netif) 
  161.  -channel [new $opt(chan)] 
  162.  -topoInstance $topo 
  163.                         -agentTrace ON 
  164.                          -routerTrace OFF 
  165.                          -macTrace OFF 
  166.                          -movementTrace OFF 
  167.  -IncomingErrProc $opt(err) -OutgoingErrProc $opt(err) 
  168.     for {set i 0} {$i < $opt(nn) } {incr i} {
  169.                 set node_($i) [$ns_ node]
  170.                 $node_($i) random-motion 0              ;# disable random motion
  171.     }
  172.     $self create-tcp-traffic 1 $node_(0) $node_(1) 0
  173.     puts "Loading scenario file..."
  174.     source $opt(sc)
  175.     puts "Load complete..."
  176.     
  177.     #
  178.     # Tell all the nodes when the simulation ends
  179.     #
  180.     for {set i 0} {$i < $opt(nn) } {incr i} {
  181. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  182.     }
  183.     
  184.     $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;" 
  185.     $ns_ at $opt(stop).1 "$self finish"
  186. }
  187. Test/dsdv-uniform-err instproc run {} {
  188.     $self instvar ns_
  189.     puts "Starting Simulation..."
  190.     $ns_ run
  191. }
  192. Test/dsdv-multistate-err instproc init {} {
  193.     global opt node_ god_ chan topo 
  194.     $self instvar ns_ testName_
  195.     set testName_       dsdv-multistate-err
  196.     set opt(rp)         dsdv
  197.     set opt(sc) "../mobility/scene/scen-3-test" 
  198.     set opt(nn) 3       
  199.     set opt(stop)       100.0
  200.     
  201.     $self next
  202.     $ns_ node-config -adhocRouting DSDV 
  203.                          -llType $opt(ll) 
  204.                          -macType $opt(mac) 
  205.                          -ifqType $opt(ifq) 
  206.                          -ifqLen $opt(ifqlen) 
  207.                          -antType $opt(ant) 
  208.                          -propType $opt(prop) 
  209.                          -phyType $opt(netif) 
  210.  -channel [new $opt(chan)] 
  211.  -topoInstance $topo 
  212.                         -agentTrace ON 
  213.                          -routerTrace OFF 
  214.                          -macTrace OFF 
  215.                          -movementTrace OFF 
  216.  -IncomingErrProc MultistateErrorProc 
  217.  -OutgoingErrProc MultistateErrorProc
  218.     for {set i 0} {$i < $opt(nn) } {incr i} {
  219.                 set node_($i) [$ns_ node]
  220.                 $node_($i) random-motion 0              ;# disable random motion
  221.     }
  222.     $self create-tcp-traffic 1 $node_(0) $node_(1) 0
  223.     
  224.     puts "Loading scenario file..."
  225.     source $opt(sc)
  226.     puts "Load complete..."
  227.     
  228.     #
  229.     # Tell all the nodes when the simulation ends
  230.     #
  231.     for {set i 0} {$i < $opt(nn) } {incr i} {
  232. $ns_ at $opt(stop).000000001 "$node_($i) reset";
  233.     }
  234.     
  235.     $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;" 
  236.     $ns_ at $opt(stop).1 "$self finish"
  237. }
  238. Test/dsdv-multistate-err instproc run {} {
  239.     $self instvar ns_
  240.     puts "Starting Simulation..."
  241.     $ns_ run
  242. }
  243. TestSuite instproc finish-basenode {} {
  244. $self instvar ns_
  245. global quiet opt
  246. $ns_ flush-trace
  247.         
  248.         set tracefd [open $opt(tr) r]
  249.         set tracefd2    [open $opt(tr).w w]
  250.         while { [eof $tracefd] == 0 } {
  251.     set line [gets $tracefd]
  252.     set items [split $line " "]
  253.     if { [lindex $items 0] == "M" } {
  254. puts $tracefd2 $line
  255.     } else {
  256. if { [llength $items] > 15} {
  257.     puts $tracefd2 $line
  258. }
  259.     }
  260. }
  261. close $tracefd
  262. close $tracefd2
  263. exec mv $opt(tr).w $opt(tr)
  264. puts "finishing.."
  265. exit 0
  266. }
  267. TestSuite instproc finish {} {
  268. $self instvar ns_
  269. global quiet
  270. $ns_ flush-trace
  271.         #if { !$quiet } {
  272.         #        puts "running nam..."
  273.         #        exec nam temp.rands.nam &
  274.         #}
  275. puts "finishing.."
  276. exit 0
  277. }
  278. TestSuite instproc log-movement {} {
  279. global ns
  280. $self instvar logtimer_ ns_
  281. set ns $ns_
  282. source ../mobility/timer.tcl
  283. Class LogTimer -superclass Timer
  284. LogTimer instproc timeout {} {
  285. global opt node_;
  286. for {set i 0} {$i < $opt(nn)} {incr i} {
  287. $node_($i) log-movement
  288. }
  289. $self sched 0.1
  290. }
  291. set logtimer_ [new LogTimer]
  292. $logtimer_ sched 0.1
  293. }
  294. TestSuite instproc create-tcp-traffic {id src dst start} {
  295.     $self instvar ns_
  296.     set tcp_($id) [new Agent/TCP]
  297.     $tcp_($id) set class_ 2
  298.     set sink_($id) [new Agent/TCPSink]
  299.     $ns_ attach-agent $src $tcp_($id)
  300.     $ns_ attach-agent $dst $sink_($id)
  301.     $ns_ connect $tcp_($id) $sink_($id)
  302.     set ftp_($id) [new Application/FTP]
  303.     $ftp_($id) attach-agent $tcp_($id)
  304.     $ns_ at $start "$ftp_($id) start"
  305.     
  306. }
  307. TestSuite instproc create-udp-traffic {id src dst start} {
  308.     $self instvar ns_
  309.     set udp_($id) [new Agent/UDP]
  310.     $ns_ attach-agent $src $udp_($id)
  311.     set null_($id) [new Agent/Null]
  312.     $ns_ attach-agent $dst $null_($id)
  313.     set cbr_($id) [new Application/Traffic/CBR]
  314.     $cbr_($id) set packetSize_ 512
  315.     $cbr_($id) set interval_ 4.0
  316.     $cbr_($id) set random_ 1
  317.     $cbr_($id) set maxpkts_ 10000
  318.     $cbr_($id) attach-agent $udp_($id)
  319.     $ns_ connect $udp_($id) $null_($id)
  320.     $ns_ at $start "$cbr_($id) start"
  321. }
  322. proc UniformErrorProc {} {
  323.     global opt
  324.     set errObj [new ErrorModel]
  325.     $errObj unit bit
  326.     $errObj FECstrength $opt(FECstrength) 
  327.     $errObj datapktsize 1000
  328.     $errObj cntrlpktsize 80
  329.     return $errObj
  330. }
  331. proc MultistateErrorProc {} {
  332.     set tmp [new ErrorModel/Uniform 0 pkt]
  333.     set tmp1 [new ErrorModel/Uniform .9 pkt]
  334.     set tmp2 [new ErrorModel/Uniform .5 pkt]
  335.     set m_states [list $tmp $tmp1 $tmp2]
  336.     set m_periods [list 0 .0075 .00375]
  337.     set m_transmx {{0.95 0.05 0} {0 0 1} {1 0 0}}
  338.     set m_trunit pkt
  339.     set m_sttype time
  340.     set m_nstates 3
  341.     set m_nstart [lindex $m_states 0]
  342.     set errObj [new ErrorModel/MultiState $m_states $m_periods $m_transmx $m_trunit $m_sttype $m_nstates $m_nstart]
  343.     $errObj FECstrength 2
  344.     return $errObj
  345. }
  346. proc runtest {arg} {
  347. global quiet tracefd opt
  348. set quiet 0
  349. set b [llength $arg]
  350. if {$b == 1} {
  351. set test $arg
  352. } elseif {$b == 2} {
  353. set test [lindex $arg 0]
  354. if {[lindex $arg 1] == "QUIET"} {
  355. set quiet 1
  356. }
  357. } else {
  358. usage
  359. }
  360. set t [new Test/$test]
  361. $t run
  362. }
  363. global argv arg0
  364. default_options
  365. runtest $argv