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

通讯编程

开发平台:

Visual C++

  1. # -*- Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-
  2. # The default for rfc2988_ is being changed to true.
  3. Mac/802_11 set bugFix_timer_ true;     # default changed 2006/1/30
  4. #
  5. # Copyright (c) 1998,2000 University of Southern California.
  6. # All rights reserved.                                            
  7. #                                                                
  8. # Redistribution and use in source and binary forms are permitted
  9. # provided that the above copyright notice and this paragraph are
  10. # duplicated in all such forms and that any documentation, advertising
  11. # materials, and other materials related to such distribution and use
  12. # acknowledge that the software was developed by the University of
  13. # Southern California, Information Sciences Institute.  The name of the
  14. # University may not be used to endorse or promote products derived from
  15. # this software without specific prior written permission.
  16. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  17. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  18. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19. Class TestSuite
  20. Class Test/wireless-infra -superclass TestSuite
  21.  
  22.   proc usage {} {
  23.   global argv0
  24.   puts stderr "usage: ns $argv0 <tests> "
  25.   puts "valid Tests: wireless-infra"
  26.   exit 1
  27.   }
  28.   proc default_options {} {
  29.       global opt
  30.       set opt(chan) Channel/WirelessChannel
  31.       set opt(prop) Propagation/TwoRayGround
  32.       set opt(netif) Phy/WirelessPhy
  33.       set opt(mac) Mac/802_11
  34.       set opt(ifq) Queue/DropTail/PriQueue
  35.       set opt(ll) LL
  36.       set opt(ant)        Antenna/OmniAntenna
  37.       set opt(x) 670 ;# X dimension of the topography
  38.       set opt(y) 670;# Y dimension of the topography
  39.       set opt(ifqlen) 50       ;# max packet in ifq
  40.       set opt(seed) 0.0
  41.       set opt(tr) temp.rands    ;# trace file
  42.       set opt(lm)         "OFF"          ;# log movement
  43.       set opt(eott) "ON"       ;# eot trace
  44.   }
  45.   # =====================================================================
  46.   # Other default settings
  47.   
  48.  
  49.   # unity gain, omni-directional antennas
  50.   # set up the antennas to be centered in the node and 1.5 meters above it
  51.   Antenna/OmniAntenna set X_ 0
  52.   Antenna/OmniAntenna set Y_ 0
  53.   Antenna/OmniAntenna set Z_ 1.5
  54.   Antenna/OmniAntenna set Gt_ 1.0
  55.   Antenna/OmniAntenna set Gr_ 1.0
  56.  
  57.   # Initialize the SharedMedia interface with parameters to make
  58.   # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  59.   Phy/WirelessPhy set CPThresh_ 10.0
  60.   Phy/WirelessPhy set CSThresh_ 1.559e-11
  61.   Phy/WirelessPhy set RXThresh_ 3.652e-10
  62.   Phy/WirelessPhy set Rb_ 2*1e6
  63.   Phy/WirelessPhy set Pt_ 0.28183815
  64.   Phy/WirelessPhy set freq_ 914e6
  65.   Phy/WirelessPhy set L_ 1.0
  66.  
  67.   # =====================================================================
  68.  
  69.   TestSuite instproc init {} {
  70.    global opt tracefd topo chan prop
  71.    global node_ god_
  72.    $self instvar ns_ testName_
  73.    set ns_         [new Simulator]
  74.    set topo [new Topography]
  75.    set tracefd [open $opt(tr) w]
  76.  
  77.    $ns_ trace-all $tracefd
  78.  
  79.    $topo load_flatgrid $opt(x) $opt(y)
  80.  
  81.    puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y)"
  82.    puts $tracefd "M 0.0 seed:$opt(seed)"
  83.    puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  84.    puts $tracefd "M 0.0 eott:$opt(eott)"
  85.  
  86.    set god_ [create-god $opt(nn)]
  87.   }
  88.  
  89.   Test/wireless-infra instproc init {} {
  90.       global opt node_ mac_ god_ chan topo
  91.       $self instvar ns_ testName_
  92.       set testName_       wireless-infra
  93.       set opt(nn) 10
  94.       set opt(stop)       10.0
  95.  
  96.       $self next
  97.  
  98.       $ns_ node-config -adhocRouting DumbAgent 
  99.                            -llType $opt(ll) 
  100.                            -macType $opt(mac) 
  101.                            -ifqType $opt(ifq) 
  102.                            -ifqLen $opt(ifqlen) 
  103.                            -antType $opt(ant) 
  104.                            -propType $opt(prop) 
  105.                            -phyType $opt(netif) 
  106.     -channel [new $opt(chan)] 
  107.     -topoInstance $topo 
  108.                           -agentTrace ON 
  109.                            -routerTrace OFF 
  110.                            -macTrace ON 
  111.                            -movementTrace OFF 
  112.     -eotTrace $opt(eott)
  113.  
  114.  
  115.       #
  116.       # We set some parameters as default values, and some
  117.       # we wait until after creating the node.  
  118.  
  119.       
  120.       Mac/802_11 set BeaconInterval_ 0.2
  121.       Mac/802_11 set dataRate_ 11Mb
  122.       for {set i 0} {$i < $opt(nn) } {incr i} {
  123.                   set node_($i) [$ns_ node]
  124.                   $node_($i) random-motion 0              ;# disable random motion
  125.    set mac_($i) [$node_($i) getMac 0]
  126.  
  127.        $mac_($i) set RTSThreshold_ 3000
  128.  
  129.    $node_($i) set X_ $i
  130.    $node_($i) set Y_ 0.0
  131.    $node_($i) set Z_ 0.0
  132.       }
  133.  
  134.       # Tell everyone who the AP is
  135.      set AP_ADDR1 [$mac_(0) id]
  136.      $mac_(0) ap $AP_ADDR1
  137.      set AP_ADDR2 [$mac_([expr $opt(nn) - 1]) id]
  138.      $mac_([expr $opt(nn) - 1]) ap $AP_ADDR2
  139.      $mac_(1) ScanType ACTIVE
  140.      for {set i 3} {$i < [expr $opt(nn) - 1]} {incr i} {
  141.    $mac_($i) ScanType PASSIVE ;#Passive
  142.      }
  143.       $ns_ at 1.0 "$mac_(2) ScanType ACTIVE"
  144.  
  145.       puts "Load complete..."
  146.  
  147.       $self  create-udp-traffic 0 $node_(5) $node_(1) 2.0
  148.       $self  create-udp-traffic 1 $node_(4) $node_(8) 3.0
  149.  
  150.       #
  151.       # Tell all the nodes when the simulation ends
  152.       #
  153.       for {set i 0} {$i < $opt(nn) } {incr i} {
  154.    $ns_ at $opt(stop).000000001 "$node_($i) reset";
  155.       }
  156.  
  157.       $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  158.       $ns_ at $opt(stop).1 "$self finish"
  159.   }
  160.  
  161.   Test/wireless-infra instproc run {} {
  162.       $self instvar ns_
  163.       puts "Starting Simulation..."
  164.       $ns_ run
  165.   }
  166.  
  167.  
  168.  
  169.   TestSuite instproc finish-basenode {} {
  170.    $self instvar ns_
  171.    global quiet opt tracefd
  172.  
  173.    flush $tracefd
  174.    close $tracefd
  175.  
  176.           set tracefd [open $opt(tr) r]
  177.           set tracefd2    [open $opt(tr).w w]
  178.  
  179.           while { [eof $tracefd] == 0 } {
  180.  
  181.        set line [gets $tracefd]
  182.        set items [split $line " "]
  183.        if { [lindex $items 0] == "M" } {
  184.    puts $tracefd2 $line
  185.        } else {
  186.    if { [llength $items] > 15} {
  187.        puts $tracefd2 $line
  188.    }
  189.        }
  190.    }
  191.  
  192.    close $tracefd
  193.    close $tracefd2
  194.  
  195.    exec mv $opt(tr).w $opt(tr)
  196.  
  197.    puts "finishing.."
  198.    exit 0
  199.   }
  200.  
  201.   TestSuite instproc finish {} {
  202.    $self instvar ns_
  203.    global quiet
  204.  
  205.    $ns_ flush-trace
  206.           #if { !$quiet } {
  207.           #        puts "running nam..."
  208.           #        exec nam temp.rands.nam &
  209.           #}
  210.    puts "finishing.."
  211.    exit 0
  212.   }
  213.  
  214.  
  215.   #TestSuite instproc log-movement {} {
  216.   # global ns
  217.   # $self instvar logtimer_ ns_
  218.   #
  219.   # set ns $ns_
  220.   # source ../mobility/timer.tcl
  221.   # Class LogTimer -superclass Timer
  222.   # LogTimer instproc timeout {} {
  223.   # global opt node_;
  224.   # for {set i 0} {$i < $opt(nn)} {incr i} {
  225.   # $node_($i) log-movement
  226.   # }
  227.   # $self sched 0.1
  228.   # }
  229.   #
  230.   # set logtimer_ [new LogTimer]
  231.   # $logtimer_ sched 0.1
  232.   #}
  233.  
  234.   TestSuite instproc create-tcp-traffic {id src dst start} {
  235.       $self instvar ns_
  236.       set tcp_($id) [new Agent/TCP]
  237.       $tcp_($id) set class_ 2
  238.       set sink_($id) [new Agent/TCPSink]
  239.       $ns_ attach-agent $src $tcp_($id)
  240.       $ns_ attach-agent $dst $sink_($id)
  241.       $ns_ connect $tcp_($id) $sink_($id)
  242.       set ftp_($id) [new Application/FTP]
  243.       $ftp_($id) attach-agent $tcp_($id)
  244.       $ns_ at $start "$ftp_($id) start"
  245.  
  246.   }
  247.  
  248.  
  249.   TestSuite instproc create-udp-traffic {id src dst start} {
  250.       $self instvar ns_
  251.       set udp_($id) [new Agent/UDP]
  252.       $ns_ attach-agent $src $udp_($id)
  253.       set null_($id) [new Agent/Null]
  254.       $ns_ attach-agent $dst $null_($id)
  255.       set cbr_($id) [new Application/Traffic/CBR]
  256.       $cbr_($id) set packetSize_ 512
  257.       $cbr_($id) set rate_ 64Kb
  258.       $cbr_($id) attach-agent $udp_($id)
  259.       $ns_ connect $udp_($id) $null_($id)
  260.       $ns_ at $start "$cbr_($id) start"
  261.  
  262.   }
  263.  
  264.  
  265.   proc runtest {arg} {
  266.    global quiet
  267.    set quiet 0
  268.  
  269.    set b [llength $arg]
  270.    if {$b == 1} {
  271.    set test $arg
  272.    } elseif {$b == 2} {
  273.    set test [lindex $arg 0]
  274.    if {[lindex $arg 1] == "QUIET"} {
  275.    set quiet 1
  276.    }
  277.    } else {
  278.    usage
  279.    }
  280.    set t [new Test/$test]
  281.  
  282.  
  283.    $t run
  284.   }
  285.  
  286.   global argv arg0
  287.   default_options
  288.   runtest $argv
  289.  
  290.  
  291.  
  292.  
  293.