test-suite-wireless-infra-mobility.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-mobility -superclass TestSuite
  21.  
  22.   proc usage {} {
  23.   global argv0
  24.   puts stderr "usage: ns $argv0 <tests> "
  25.   puts "valid Tests: wireless-infra-mobility"
  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.   LL set mindelay_ 50us
  48.   LL set delay_ 25us
  49.   LL set bandwidth_ 0 ;# not used
  50.   Agent/Null set sport_ 0
  51.   Agent/Null set dport_ 0
  52.   Agent/CBR set sport_ 0
  53.   Agent/CBR set dport_ 0
  54.   Agent/TCPSink set sport_ 0
  55.   Agent/TCPSink set dport_ 0
  56.   Agent/TCP set sport_ 0
  57.   Agent/TCP set dport_ 0
  58.   Agent/TCP set packetSize_ 1460
  59.  
  60.   Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  61.  
  62.   # unity gain, omni-directional antennas
  63.   # set up the antennas to be centered in the node and 1.5 meters above it
  64.   Antenna/OmniAntenna set X_ 0
  65.   Antenna/OmniAntenna set Y_ 0
  66.   Antenna/OmniAntenna set Z_ 1.5
  67.   Antenna/OmniAntenna set Gt_ 1.0
  68.   Antenna/OmniAntenna set Gr_ 1.0
  69.  
  70.   # Initialize the SharedMedia interface with parameters to make
  71.   # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  72.   Phy/WirelessPhy set CPThresh_ 10.0
  73.   Phy/WirelessPhy set CSThresh_ 1.559e-11
  74.   Phy/WirelessPhy set RXThresh_ 3.652e-10
  75.   Phy/WirelessPhy set Rb_ 2*1e6
  76.   Phy/WirelessPhy set Pt_ 0.28183815
  77.   Phy/WirelessPhy set freq_ 914e6
  78.   Phy/WirelessPhy set L_ 1.0
  79.  
  80.   # =====================================================================
  81.  
  82.   TestSuite instproc init {} {
  83.    global opt tracefd topo chan prop
  84.    global node_ god_
  85.    $self instvar ns_ testName_
  86.    set ns_         [new Simulator]
  87.    set topo [new Topography]
  88.    set tracefd [open $opt(tr) w]
  89.  
  90.    $ns_ trace-all $tracefd
  91.  
  92.    $topo load_flatgrid $opt(x) $opt(y)
  93.  
  94.    set god_ [create-god $opt(nn)]
  95.   }
  96.  
  97.   Test/wireless-infra-mobility instproc init {} {
  98.       global opt node_ mac_ god_ chan topo
  99.       $self instvar ns_ testName_
  100.       set testName_       wireless-infra-mobility
  101.       set opt(nn) 10
  102.       set opt(stop)       12.0
  103.  
  104.       $self next
  105.  
  106.       $ns_ node-config -adhocRouting DumbAgent 
  107.                            -llType $opt(ll) 
  108.                            -macType $opt(mac) 
  109.                            -ifqType $opt(ifq) 
  110.                            -ifqLen $opt(ifqlen) 
  111.                            -antType $opt(ant) 
  112.                            -propType $opt(prop) 
  113.                            -phyType $opt(netif) 
  114.     -channel [new $opt(chan)] 
  115.     -topoInstance $topo 
  116.                           -agentTrace ON 
  117.                            -routerTrace OFF 
  118.                            -macTrace ON 
  119.                            -movementTrace ON 
  120.     -eotTrace $opt(eott)
  121.  
  122.  
  123.       #
  124.       # We set some parameters as default values, and some
  125.       # we wait until after creating the node.
  126.       #
  127.  
  128.       Mac/802_11 set BeaconInterval_ 0.2
  129.       Mac/802_11 set dataRate_ 11Mb
  130.       for {set i 0} {$i < $opt(nn) } {incr i} {
  131.                   set node_($i) [$ns_ node]
  132.                   $node_($i) random-motion 0              ;# disable random motion
  133.    set mac_($i) [$node_($i) getMac 0]
  134.  
  135.        $mac_($i) set RTSThreshold_ 3000
  136.  
  137.    $node_($i) set X_ $i
  138.    $node_($i) set Y_ 0.0
  139.    $node_($i) set Z_ 0.0
  140.       }
  141.  
  142.       # Tell everyone who the AP is
  143.      set AP_ADDR1 [$mac_(0) id]
  144.      $mac_(0) ap $AP_ADDR1
  145.      set AP_ADDR2 [$mac_([expr $opt(nn) - 1]) id]
  146.      $mac_([expr $opt(nn) - 1]) ap $AP_ADDR2
  147.      $mac_(1) ScanType ACTIVE
  148.      for {set i 3} {$i < [expr $opt(nn) - 1]} {incr i} {
  149.    $mac_($i) ScanType PASSIVE ;#Passive
  150.      }
  151.       $ns_ at 1.0 "$mac_(2) ScanType ACTIVE"
  152.  
  153.       puts "Load complete..."
  154.  
  155.       $self  create-udp-traffic 0 $node_(4) $node_(1) 2.0
  156.       $self  create-udp-traffic 1 $node_(5) $node_(8) 2.5
  157.       $ns_ at 2.4 "$node_(4) setdest 300.0 1.0 30.0" 
  158.       #
  159.       # Tell all the nodes when the simulation ends
  160.       #
  161.       for {set i 0} {$i < $opt(nn) } {incr i} {
  162.    $ns_ at $opt(stop).000000001 "$node_($i) reset";
  163.       }
  164.  
  165.       $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  166.       $ns_ at $opt(stop).1 "$self finish"
  167.   }
  168.  
  169.   Test/wireless-infra-mobility instproc run {} {
  170.       $self instvar ns_
  171.       puts "Starting Simulation..."
  172.       $ns_ run
  173.   }
  174.  
  175.  
  176.  
  177.   TestSuite instproc finish-basenode {} {
  178.    $self instvar ns_
  179.    global quiet opt tracefd
  180.  
  181.    flush $tracefd
  182.    close $tracefd
  183.  
  184.           set tracefd [open $opt(tr) r]
  185.           set tracefd2    [open $opt(tr).w w]
  186.  
  187.           while { [eof $tracefd] == 0 } {
  188.  
  189.        set line [gets $tracefd]
  190.        set items [split $line " "]
  191.        if { [lindex $items 0] == "M" } {
  192.    puts $tracefd2 $line
  193.        } else {
  194.    if { [llength $items] > 15} {
  195.        puts $tracefd2 $line
  196.    }
  197.        }
  198.    }
  199.  
  200.    close $tracefd
  201.    close $tracefd2
  202.  
  203.    exec mv $opt(tr).w $opt(tr)
  204.  
  205.    puts "finishing.."
  206.    exit 0
  207.   }
  208.  
  209.   TestSuite instproc finish {} {
  210.    $self instvar ns_
  211.    global quiet
  212.  
  213.    $ns_ flush-trace
  214.           #if { !$quiet } {
  215.           #        puts "running nam..."
  216.           #        exec nam temp.rands.nam &
  217.           #}
  218.    puts "finishing.."
  219.    exit 0
  220.   }
  221.  
  222.  
  223.   #TestSuite instproc log-movement {} {
  224.   # global ns
  225.   # $self instvar logtimer_ ns_
  226.   #
  227.   # set ns $ns_
  228.   # source ../mobility/timer.tcl
  229.   # Class LogTimer -superclass Timer
  230.   # LogTimer instproc timeout {} {
  231.   # global opt node_;
  232.   # for {set i 0} {$i < $opt(nn)} {incr i} {
  233.   # $node_($i) log-movement
  234.   # }
  235.   # $self sched 0.1
  236.   # }
  237.   #
  238.   # set logtimer_ [new LogTimer]
  239.   # $logtimer_ sched 0.1
  240.   #}
  241.  
  242.   TestSuite instproc create-tcp-traffic {id src dst start} {
  243.       $self instvar ns_
  244.       set tcp_($id) [new Agent/TCP]
  245.       $tcp_($id) set class_ 2
  246.       set sink_($id) [new Agent/TCPSink]
  247.       $ns_ attach-agent $src $tcp_($id)
  248.       $ns_ attach-agent $dst $sink_($id)
  249.       $ns_ connect $tcp_($id) $sink_($id)
  250.       set ftp_($id) [new Application/FTP]
  251.       $ftp_($id) attach-agent $tcp_($id)
  252.       $ns_ at $start "$ftp_($id) start"
  253.  
  254.   }
  255.  
  256.  
  257.   TestSuite instproc create-udp-traffic {id src dst start} {
  258.       $self instvar ns_
  259.       set udp_($id) [new Agent/UDP]
  260.       $ns_ attach-agent $src $udp_($id)
  261.       set null_($id) [new Agent/Null]
  262.       $ns_ attach-agent $dst $null_($id)
  263.       set cbr_($id) [new Application/Traffic/CBR]
  264.       $cbr_($id) set packetSize_ 512
  265.       $cbr_($id) set rate_ 64Kb
  266.       $cbr_($id) attach-agent $udp_($id)
  267.       $ns_ connect $udp_($id) $null_($id)
  268.       $ns_ at $start "$cbr_($id) start"
  269.  
  270.   }
  271.  
  272.  
  273.   proc runtest {arg} {
  274.    global quiet
  275.    set quiet 0
  276.  
  277.    set b [llength $arg]
  278.    if {$b == 1} {
  279.    set test $arg
  280.    } elseif {$b == 2} {
  281.    set test [lindex $arg 0]
  282.    if {[lindex $arg 1] == "QUIET"} {
  283.    set quiet 1
  284.    }
  285.    } else {
  286.    usage
  287.    }
  288.    set t [new Test/$test]
  289.  
  290.  
  291.    $t run
  292.   }
  293.  
  294.   global argv arg0
  295.   default_options
  296.   runtest $argv
  297.  
  298.  
  299.  
  300.  
  301.