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

通讯编程

开发平台:

Visual C++

  1. # Copyright (C) 2007
  2. # Mercedes-Benz Research & Development North America, Inc. and
  3. # University of Karlsruhe (TH)
  4. # All rights reserved.
  5. #
  6. # Qi Chen                 : qi.chen@daimler.com
  7. # Felix Schmidt-Eisenlohr : felix.schmidt-eisenlohr@kit.edu
  8. # Daniel Jiang            : daniel.jiang@daimler.com
  9. # For further information see:
  10. # http://dsn.tm.uni-karlsruhe.de/english/Overhaul_NS-2.php
  11. # This test suite is for validating the overhauled implementation of IEEE 802.11 
  12. # To run all tests: test-all-wireless-lan
  13. # to run individual test:
  14. # ns test-suite-wireless-lan-newnode-80211Ext.tcl unicast
  15. # ns test-suite-wireless-lan-newnode-80211Ext.tcl broadcast
  16. #
  17. # To view a list of available test to run with this script:
  18. # ns test-suite-wireless-lan-newnode-80211Ext.tcl
  19. Class TestSuite
  20. # 802.11Ext with unicast
  21. Class Test/unicast -superclass TestSuite
  22. # 802.11Ext with broadcast
  23. Class Test/broadcast -superclass TestSuite
  24. proc usage {} {
  25. global argv0
  26. puts stderr "usage: ns $argv0 <tests> "
  27. puts "Valid Tests: unicast broadcast"
  28. exit 1
  29. }
  30. proc default_options {} {
  31.     global opt
  32.     set opt(seed) 1
  33.     set opt(chan)       Channel/WirelessChannel
  34.     set opt(prop)       Propagation/Nakagami
  35.     set opt(netif)      Phy/WirelessPhyExt
  36.     set opt(mac)        Mac/802_11Ext
  37.     set opt(ifq)        Queue/DropTail/PriQueue
  38.     set opt(ll)         LL
  39.     set opt(ant)        Antenna/OmniAntenna
  40.     set opt(x)          50    ;# X dimension of the topography
  41.     set opt(y)          50    ;# Y dimension of the topography
  42.     set opt(ifqlen)     20           ;# max packet in ifq
  43.     set opt(rtg)        DumbAgent
  44.     set opt(stop)       5         ;# simulation time
  45.     set opt(tr)         temp.rands    ;# trace file
  46. }
  47. # =====================================================================
  48. # Other default settings
  49. Mac/802_11 set CWMin_               15
  50. Mac/802_11 set CWMax_               1023
  51. Mac/802_11 set SlotTime_            0.000009
  52. Mac/802_11 set SIFS_                0.000016
  53. Mac/802_11 set ShortRetryLimit_     7
  54. Mac/802_11 set LongRetryLimit_      4
  55. Mac/802_11 set PreambleLength_      60
  56. Mac/802_11 set PLCPHeaderLength_    60
  57. Mac/802_11 set PLCPDataRate_        6.0e6
  58. Mac/802_11 set RTSThreshold_        2000
  59. Mac/802_11 set basicRate_           6.0e6
  60. Mac/802_11 set dataRate_            6.0e6
  61. Mac/802_11Ext set CWMin_            15
  62. Mac/802_11Ext set CWMax_            1023
  63. Mac/802_11Ext set SlotTime_         0.000009
  64. Mac/802_11Ext set SIFS_             0.000016
  65. Mac/802_11Ext set ShortRetryLimit_  7
  66. Mac/802_11Ext set LongRetryLimit_   4
  67. Mac/802_11Ext set HeaderDuration_   0.000020 
  68. Mac/802_11Ext set SymbolDuration_   0.000004
  69. Mac/802_11Ext set BasicModulationScheme_ 0
  70. Mac/802_11Ext set use_802_11a_flag_ true
  71. Mac/802_11Ext set RTSThreshold_     2000
  72. Mac/802_11Ext set MAC_DBG           0
  73. Phy/WirelessPhy set CSThresh_       6.30957e-12
  74. Phy/WirelessPhy set Pt_             0.01
  75. Phy/WirelessPhy set freq_           5.18e9
  76. Phy/WirelessPhy set L_              1.0
  77. Phy/WirelessPhy set RXThresh_       3.652e-10
  78. Phy/WirelessPhy set bandwidth_      20e6
  79. Phy/WirelessPhy set CPThresh_       10.0
  80. Phy/WirelessPhyExt set CSThresh_           6.30957e-12
  81. Phy/WirelessPhyExt set Pt_                 0.001
  82. Phy/WirelessPhyExt set freq_               5.18e9
  83. Phy/WirelessPhyExt set noise_floor_        2.51189e-13
  84. Phy/WirelessPhyExt set L_                  1.0
  85. Phy/WirelessPhyExt set PowerMonitorThresh_ 2.10319e-12
  86. Phy/WirelessPhyExt set HeaderDuration_     0.000020
  87. Phy/WirelessPhyExt set BasicModulationScheme_ 0
  88. Phy/WirelessPhyExt set PreambleCaptureSwitch_ 1
  89. Phy/WirelessPhyExt set DataCaptureSwitch_  0
  90. Phy/WirelessPhyExt set SINR_PreambleCapture_ 2.5118
  91. Phy/WirelessPhyExt set SINR_DataCapture_   100.0
  92. Phy/WirelessPhyExt set trace_dist_         1e6
  93. Phy/WirelessPhyExt set PHY_DBG_            0
  94. Phy/WirelessPhyExt set CPThresh_           0 ;# not used at the moment
  95. Phy/WirelessPhyExt set RXThresh_           0 ;# not used at the moment
  96. #=====================================================================
  97. #configure RF model parameters
  98. Antenna/OmniAntenna set Gt_ 1.0
  99. Antenna/OmniAntenna set Gr_ 1.0
  100. Propagation/Nakagami set use_nakagami_dist_ true 
  101. Propagation/Nakagami set gamma0_ 2.0
  102. Propagation/Nakagami set gamma1_ 2.0
  103. Propagation/Nakagami set gamma2_ 2.0
  104. Propagation/Nakagami set d0_gamma_ 200
  105. Propagation/Nakagami set d1_gamma_ 500
  106. Propagation/Nakagami set m0_  1.0
  107. Propagation/Nakagami set m1_  1.0
  108. Propagation/Nakagami set m2_  1.0
  109. Propagation/Nakagami set d0_m_ 80
  110. Propagation/Nakagami set d1_m_ 200
  111. # =====================================================================
  112. TestSuite instproc init {} {
  113. }
  114. Test/unicast instproc init {} {
  115.     global defaultRNG opt chan topo god_ node_
  116.     $self instvar ns_ testName_
  117.     set testName_ unicast
  118.     set ns_ [new Simulator]
  119.     
  120.     set opt(nn)         3
  121.     $defaultRNG seed $opt(seed)
  122.     set topo [new Topography]
  123.     set tracefd [open $opt(tr) w]
  124.     $ns_ trace-all $tracefd
  125.     $topo load_flatgrid $opt(x) $opt(y)
  126.     set god_ [create-god $opt(nn)]
  127.     $god_ off
  128.     set chan [new $opt(chan)]
  129.     $ns_ node-config -adhocRouting $opt(rtg) 
  130.                      -llType $opt(ll) 
  131.                      -macType $opt(mac) 
  132.                      -ifqType $opt(ifq) 
  133.                      -ifqLen $opt(ifqlen) 
  134.                      -antType $opt(ant) 
  135.                      -propType $opt(prop) 
  136.                      -phyType $opt(netif) 
  137.                      -channel $chan 
  138.               -topoInstance $topo 
  139.               -agentTrace ON 
  140.                      -routerTrace OFF 
  141.                      -macTrace ON 
  142.                      -phyTrace ON
  143.     for {set i 0} {$i < $opt(nn) } {incr i} {
  144.         set ID_($i) $i
  145.         set node_($i) [$ns_ node]
  146.         $node_($i) set id_  $ID_($i)
  147.         $node_($i) set address_ $ID_($i)
  148.         $node_($i) nodeid $ID_($i)
  149.         set agent_($i) [new Agent/PBC]
  150.         $ns_ attach-agent $node_($i)  $agent_($i)
  151.         $agent_($i) set Pt_ 2.0e-4
  152.         $agent_($i) set payloadSize 1000
  153.         $agent_($i) set modulationScheme 0
  154.         $agent_($i) PeriodicBroadcast OFF
  155.         $ns_ at $opt(stop).0 "$node_($i) reset";
  156.     }   
  157.     $node_(0) set X_ 10.00
  158.     $node_(0) set Y_ 10.00
  159.     $node_(0) set Z_ 10.00
  160.     $node_(1) set X_ 20.00.
  161.     $node_(1) set Y_ 10.00
  162.     $node_(1) set Z_ 10.00
  163.     $node_(2) set X_ 30.00.
  164.     $node_(2) set Y_ 10.00
  165.     $node_(2) set Z_ 10.00
  166.     $ns_ at 0.01 "$agent_(1) singleBroadcast"
  167.     $ns_ at 1.01 "$agent_(1) unicast 2"
  168.     $ns_ at 2.01 "$agent_(1) unicast 3"
  169.     $ns_ at 3.01 "$agent_(1) set payloadSize 2500"
  170.     $ns_ at 3.02 "$agent_(1) unicast 2"
  171.     for {set i 0} {$i < $opt(nn) } {incr i} {
  172.         $ns_ at $opt(stop).0 "$node_($i) reset";
  173.     }
  174.     $ns_ at $opt(stop).1 "$self finish"
  175. }
  176. Test/unicast instproc run {} {
  177.     $self instvar ns_
  178.     puts "Starting Simulation..."
  179.     $ns_ run
  180. }
  181. Test/broadcast instproc init {} {
  182.     global defaultRNG opt chan topo god_ node_
  183.     $self instvar ns_ testName_
  184.     set testName_ unicast
  185.     set ns_ [new Simulator]
  186.     set opt(nn) 20
  187.     $defaultRNG seed $opt(seed)
  188.     set topo [new Topography]
  189.     set tracefd [open $opt(tr) w]
  190.     $ns_ trace-all $tracefd
  191.     $topo load_flatgrid $opt(x) $opt(y)
  192.     set god_ [create-god $opt(nn)]
  193.     $god_ off
  194.     set chan [new $opt(chan)]
  195.     $ns_ node-config -adhocRouting $opt(rtg) 
  196.                      -llType $opt(ll) 
  197.                      -macType $opt(mac) 
  198.                      -ifqType $opt(ifq) 
  199.                      -ifqLen $opt(ifqlen) 
  200.                      -antType $opt(ant) 
  201.                      -propType $opt(prop) 
  202.                      -phyType $opt(netif) 
  203.                      -channel $chan 
  204.              -topoInstance $topo 
  205.              -agentTrace ON 
  206.                      -routerTrace OFF 
  207.                      -macTrace OFF 
  208.                      -phyTrace OFF
  209.     for {set i 0} {$i < $opt(nn) } {incr i} {
  210.         set ID_($i) $i
  211.         set node_($i) [$ns_ node]
  212.         $node_($i) set id_  $ID_($i)
  213.         $node_($i) set address_ $ID_($i)
  214.         $node_($i) set X_ [expr $i * 5]
  215.         $node_($i) set Y_ 10
  216.         $node_($i) set Z_ 0
  217.         $node_($i) nodeid $ID_($i)
  218.         set agent_($i) [new Agent/PBC]
  219.         $ns_ attach-agent $node_($i)  $agent_($i)
  220.         $agent_($i) set Pt_ 1e-4
  221.         $agent_($i) set payloadSize 1000
  222.         $agent_($i) set peroidcaBroadcastInterval 0.2
  223.         $agent_($i) set peroidcaBroadcastVariance 0.05
  224.         $agent_($i) set modulationScheme 1
  225.         $agent_($i) PeriodicBroadcast ON
  226.         $ns_ at $opt(stop).0 "$node_($i) reset";
  227.     }
  228.     for {set i 0} {$i < $opt(nn) } {incr i} {
  229.         $ns_ at $opt(stop).0 "$node_($i) reset";
  230.     }
  231.     $ns_ at $opt(stop).1 "$self finish"
  232. }
  233. Test/broadcast instproc run {} {
  234.     $self instvar ns_
  235.     puts "Starting Simulation..."
  236.     $ns_ run
  237. }
  238. TestSuite instproc finish {} {
  239.     $self instvar ns_
  240.     $ns_ flush-trace
  241.     puts "finishing.."
  242.     exit 0
  243. }
  244. proc runtest {arg} {
  245. global quiet
  246. set quiet 0
  247. set b [llength $arg]
  248. if {$b == 1} {
  249. set test $arg
  250. } elseif {$b == 2} {
  251. set test [lindex $arg 0]
  252. if {[lindex $arg 1] == "QUIET"} {
  253. set quiet 1
  254. }
  255. } else {
  256. usage
  257. }
  258. set t [new Test/$test]
  259. $t run
  260. }
  261. global argv arg0
  262. default_options
  263. runtest $argv