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

通讯编程

开发平台:

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.   #
  7.   # Copyright (c) 1998,2000 University of Southern California.
  8.   # All rights reserved.
  9.   #
  10.   # Redistribution and use in source and binary forms are permitted
  11.   # provided that the above copyright notice and this paragraph are
  12.   # duplicated in all such forms and that any documentation, advertising
  13.   # materials, and other materials related to such distribution and use
  14.   # acknowledge that the software was developed by the University of
  15.   # Southern California, Information Sciences Institute.  The name of the
  16.   # University may not be used to endorse or promote products derived from
  17.   # this software without specific prior written permission.
  18.   #
  19.   # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  20.   # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  21.   # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  22.   #
  23.   # $Header: /cvsroot/nsnam/ns-2/tcl/test/test-suite-wireless-lan-ap.tcl,v 1.3 2006/01/24 23:00:08 sallyfloyd Exp $
  24.  
  25.   # FOR UPDATING GLOBAL DEFAULTS:
  26. Agent/TCP set precisionReduce_ false ;   # default changed on 2006/1/24.
  27. Agent/TCP set rtxcur_init_ 6.0 ;      # Default changed on 2006/01/21
  28. Agent/TCP set updated_rttvar_ false ;  # Variable added on 2006/1/21
  29.   Agent/TCP set useHeaders_ false
  30.   # The default is being changed to useHeaders_ true.
  31.   Agent/TCP set windowInit_ 1
  32.   # The default is being changed to 2.
  33.   Agent/TCP set singledup_ 0
  34.   # The default is being changed to 1
  35.  
  36.   # This test suite is for validating wireless lans with an AP
  37.   # To run all tests: test-all-wireless-lan-ap
  38.   # to run individual test:
  39.   # ns test-suite-wireless-lan-newnode.tcl basic
  40.   # ....
  41.   #
  42.   # To view a list of available test to run with this script:
  43.   # ns test-suite-wireless-lan.tcl
  44.  
  45.   Agent/TCP set minrto_ 0
  46.   # The default is being changed to minrto_ 1
  47.   Agent/TCP set syn_ false
  48.   Agent/TCP set delay_growth_ false
  49.   # In preparation for changing the default values for syn_ and delay_growth_.
  50.  
  51.   Class TestSuite
  52.  
  53.   # Basic test.
  54.   Class Test/basic -superclass TestSuite
  55.  
  56.   proc usage {} {
  57.         global argv0
  58.   puts stderr "usage: ns $argv0 <tests> "
  59.   puts "Valid Tests: basic"
  60.   exit 1
  61.   }
  62.   proc default_options {} {
  63.       global opt
  64.       set opt(chan) Channel/WirelessChannel
  65.       set opt(prop) Propagation/TwoRayGround
  66.       set opt(netif) Phy/WirelessPhy
  67.       set opt(mac) Mac/802_11
  68.       set opt(ifq) Queue/DropTail/PriQueue
  69.       set opt(ll) LL
  70.       set opt(ant)        Antenna/OmniAntenna
  71.       set opt(x) 670 ;# X dimension of the topography
  72.       set opt(y) 670;# Y dimension of the topography
  73.       set opt(ifqlen) 50       ;# max packet in ifq
  74.       set opt(seed) 0.0
  75.       set opt(tr) temp.rands    ;# trace file
  76.       set opt(lm)         "OFF"          ;# log movement
  77.       set opt(eott) "ON"       ;# eot trace
  78.   }
  79.   # =====================================================================
  80.   # Other default settings
  81.   LL set mindelay_ 50us
  82.   LL set delay_ 25us
  83.   LL set bandwidth_ 0 ;# not used
  84.   Agent/Null set sport_ 0
  85.   Agent/Null set dport_ 0
  86.   Agent/CBR set sport_ 0
  87.   Agent/CBR set dport_ 0
  88.   Agent/TCPSink set sport_ 0
  89.   Agent/TCPSink set dport_ 0
  90.   Agent/TCP set sport_ 0
  91.   Agent/TCP set dport_ 0
  92.   Agent/TCP set packetSize_ 1460
  93.  
  94.   Queue/DropTail/PriQueue set Prefer_Routing_Protocols    1
  95.  
  96.   # unity gain, omni-directional antennas
  97.   # set up the antennas to be centered in the node and 1.5 meters above it
  98.   Antenna/OmniAntenna set X_ 0
  99.   Antenna/OmniAntenna set Y_ 0
  100.   Antenna/OmniAntenna set Z_ 1.5
  101.   Antenna/OmniAntenna set Gt_ 1.0
  102.   Antenna/OmniAntenna set Gr_ 1.0
  103.  
  104.   # Initialize the SharedMedia interface with parameters to make
  105.   # it work like the 914MHz Lucent WaveLAN DSSS radio interface
  106.   Phy/WirelessPhy set CPThresh_ 10.0
  107.   Phy/WirelessPhy set CSThresh_ 1.559e-11
  108.   Phy/WirelessPhy set RXThresh_ 3.652e-10
  109.   Phy/WirelessPhy set Rb_ 2*1e6
  110.   Phy/WirelessPhy set Pt_ 0.28183815
  111.   Phy/WirelessPhy set freq_ 914e6
  112.   Phy/WirelessPhy set L_ 1.0
  113.  
  114.   # =====================================================================
  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.    set topo [new Topography]
  122.    set tracefd [open $opt(tr) w]
  123.  
  124.    $ns_ trace-all $tracefd
  125.  
  126.    $topo load_flatgrid $opt(x) $opt(y)
  127.  
  128.    puts $tracefd "M 0.0 nn:$opt(nn) x:$opt(x) y:$opt(y)"
  129.    puts $tracefd "M 0.0 seed:$opt(seed)"
  130.    puts $tracefd "M 0.0 prop:$opt(prop) ant:$opt(ant)"
  131.    puts $tracefd "M 0.0 eott:$opt(eott)"
  132.  
  133.    set god_ [create-god $opt(nn)]
  134.   }
  135.  
  136.   Test/basic instproc init {} {
  137.       global opt node_ mac_ god_ chan topo
  138.       $self instvar ns_ testName_
  139.       set testName_       basic
  140.       set opt(nn) 3
  141.       set opt(stop)       1.0
  142.  
  143.       $self next
  144.  
  145.       $ns_ node-config -adhocRouting DSDV 
  146.                            -llType $opt(ll) 
  147.                            -macType $opt(mac) 
  148.                            -ifqType $opt(ifq) 
  149.                            -ifqLen $opt(ifqlen) 
  150.                            -antType $opt(ant) 
  151.                            -propType $opt(prop) 
  152.                            -phyType $opt(netif) 
  153.     -channel [new $opt(chan)] 
  154.     -topoInstance $topo 
  155.                           -agentTrace ON 
  156.                            -routerTrace OFF 
  157.                            -macTrace ON 
  158.                            -movementTrace OFF 
  159.     -eotTrace $opt(eott)
  160.  
  161.  
  162.       #
  163.       # We set some parameters as default values, and some
  164.       # we wait until after creating the node.  No great reason
  165.       # for the distinction - just want to test both options.
  166.       # The values are based (roughly) on 11a
  167.       #
  168.  
  169.       Mac/802_11 set CWMin_ 15
  170.       Mac/802_11 set CWMax_ 1023
  171.       Mac/802_11 set SlotTime_ 0.000009 ;# 9us
  172.       Mac/802_11 set SIFS_ 0.000016 ;# 16us
  173.       Mac/802_11 set PreambleLength_ 40 ;# wrong
  174.       Mac/802_11 set PLCPHeaderLength_ 40 ;# wrong
  175.       Mac/802_11 set PLCPDataRate_ 1.0e6 ;# 1Mbps
  176.       Mac/802_11 set ShortRetryLimit_ 7 ;# retransmittions
  177.       Mac/802_11 set LongRetryLimit_ 4 ;# retransmissions
  178.  
  179.       for {set i 0} {$i < $opt(nn) } {incr i} {
  180.                   set node_($i) [$ns_ node]
  181.                   $node_($i) random-motion 0              ;# disable random motion
  182.    set mac_($i) [$node_($i) getMac 0]
  183.  
  184.        $mac_($i) set dataRate_ 54Mb
  185.        $mac_($i) set basicRate_ 24Mb
  186.        $mac_($i) set RTSThreshold_ 3000
  187.  
  188.    $node_($i) set X_ 0.0
  189.    $node_($i) set Y_ 0.0
  190.    $node_($i) set Z_ 0.0
  191.       }
  192.  
  193.       # Tell everyone who the AP is
  194.       set AP_ADDR [$mac_(0) id]
  195.       for {set i 0} {$i < $opt(nn) } {incr i} {
  196.        $mac_($i) bss_id $AP_ADDR
  197.       }
  198.  
  199.       puts "Load complete..."
  200.  
  201.       $self  create-tcp-traffic 0 $node_(1) $node_(2) 0.0001
  202.  
  203.       #
  204.       # Tell all the nodes when the simulation ends
  205.       #
  206.       for {set i 0} {$i < $opt(nn) } {incr i} {
  207.    $ns_ at $opt(stop).000000001 "$node_($i) reset";
  208.       }
  209.  
  210.       $ns_ at $opt(stop).000000001 "puts "NS EXITING..." ;"
  211.       $ns_ at $opt(stop).1 "$self finish"
  212.   }
  213.  
  214.   Test/basic instproc run {} {
  215.       $self instvar ns_
  216.       puts "Starting Simulation..."
  217.       $ns_ run
  218.   }
  219.  
  220.  
  221.  
  222.   TestSuite instproc finish-basenode {} {
  223.    $self instvar ns_
  224.    global quiet opt tracefd
  225.  
  226.    flush $tracefd
  227.    close $tracefd
  228.  
  229.           set tracefd [open $opt(tr) r]
  230.           set tracefd2    [open $opt(tr).w w]
  231.  
  232.           while { [eof $tracefd] == 0 } {
  233.  
  234.        set line [gets $tracefd]
  235.        set items [split $line " "]
  236.        if { [lindex $items 0] == "M" } {
  237.    puts $tracefd2 $line
  238.        } else {
  239.    if { [llength $items] > 15} {
  240.        puts $tracefd2 $line
  241.    }
  242.        }
  243.    }
  244.  
  245.    close $tracefd
  246.    close $tracefd2
  247.  
  248.    exec mv $opt(tr).w $opt(tr)
  249.  
  250.    puts "finishing.."
  251.    exit 0
  252.   }
  253.  
  254.   TestSuite instproc finish {} {
  255.    $self instvar ns_
  256.    global quiet
  257.  
  258.    $ns_ flush-trace
  259.           #if { !$quiet } {
  260.           #        puts "running nam..."
  261.           #        exec nam temp.rands.nam &
  262.           #}
  263.    puts "finishing.."
  264.    exit 0
  265.   }
  266.  
  267.  
  268.   #TestSuite instproc log-movement {} {
  269.   # global ns
  270.   # $self instvar logtimer_ ns_
  271.   #
  272.   # set ns $ns_
  273.   # source ../mobility/timer.tcl
  274.   # Class LogTimer -superclass Timer
  275.   # LogTimer instproc timeout {} {
  276.   # global opt node_;
  277.   # for {set i 0} {$i < $opt(nn)} {incr i} {
  278.   # $node_($i) log-movement
  279.   # }
  280.   # $self sched 0.1
  281.   # }
  282.   #
  283.   # set logtimer_ [new LogTimer]
  284.   # $logtimer_ sched 0.1
  285.   #}
  286.  
  287.   TestSuite instproc create-tcp-traffic {id src dst start} {
  288.       $self instvar ns_
  289.       set tcp_($id) [new Agent/TCP]
  290.       $tcp_($id) set class_ 2
  291.       set sink_($id) [new Agent/TCPSink]
  292.       $ns_ attach-agent $src $tcp_($id)
  293.       $ns_ attach-agent $dst $sink_($id)
  294.       $ns_ connect $tcp_($id) $sink_($id)
  295.       set ftp_($id) [new Application/FTP]
  296.       $ftp_($id) attach-agent $tcp_($id)
  297.       $ns_ at $start "$ftp_($id) start"
  298.  
  299.   }
  300.  
  301.  
  302.   TestSuite instproc create-udp-traffic {id src dst start} {
  303.       $self instvar ns_
  304.       set udp_($id) [new Agent/UDP]
  305.       $ns_ attach-agent $src $udp_($id)
  306.       set null_($id) [new Agent/Null]
  307.       $ns_ attach-agent $dst $null_($id)
  308.       set cbr_($id) [new Application/Traffic/CBR]
  309.       $cbr_($id) set packetSize_ 512
  310.       $cbr_($id) set interval_ 4.0
  311.       $cbr_($id) set random_ 1
  312.       $cbr_($id) set maxpkts_ 10000
  313.       $cbr_($id) attach-agent $udp_($id)
  314.       $ns_ connect $udp_($id) $null_($id)
  315.       $ns_ at $start "$cbr_($id) start"
  316.  
  317.   }
  318.  
  319.  
  320.   proc runtest {arg} {
  321.    global quiet
  322.    set quiet 0
  323.  
  324.    set b [llength $arg]
  325.    if {$b == 1} {
  326.    set test $arg
  327.    } elseif {$b == 2} {
  328.    set test [lindex $arg 0]
  329.    if {[lindex $arg 1] == "QUIET"} {
  330.    set quiet 1
  331.    }
  332.    } else {
  333.    usage
  334.    }
  335.    set t [new Test/$test]
  336.  
  337.  
  338.    $t run
  339.   }
  340.  
  341.   global argv arg0
  342.   default_options
  343.   runtest $argv
  344.  
  345.  
  346.  
  347.  
  348.