Ad-hoc simulation with AOMDV WITH ns2



#aomdv
#------------------------------------------------------------------------------
# Marco Fiore's Patch
# ------------------------------------------------------------------------------
#remove-all-packet-headers                                                     ;# removes all except common
#add-packet-header IP LL Mac AODV AOMDV ATR DSDV DSR OLSR UDP TCP CBR FTP      ;# needed headers
Mac/802_11 set CWMin_                 31
Mac/802_11 set CWMax_                 1023
Mac/802_11 set SlotTime_              0.000020                     ;# 20us
Mac/802_11 set SIFS_                  0.000010                     ;# 10us
Mac/802_11 set PreambleLength_        144                         ;# 144 bit
Mac/802_11 set ShortPreambleLength_   72                           ;# 72 bit
Mac/802_11 set PreambleDataRate_      1.0e6                        ;# 1Mbps
Mac/802_11 set PLCPHeaderLength_      48                           ;# 48 bits
Mac/802_11 set PLCPDataRate_          1.0e6                        ;# 1Mbps
Mac/802_11 set ShortPLCPDataRate_     2.0e6                        ;# 2Mbps
Mac/802_11 set RTSThreshold_          3000                         ;# bytes
Mac/802_11 set ShortRetryLimit_       7                            ;# retransmissions
Mac/802_11 set LongRetryLimit_        4                            ;# retransmissions
Mac/802_11 set newchipset_            false                        ;# use new chipset, allowing a more recent  packet to be correctly received in place of the first sensed packet
Mac/802_11 set dataRate_ 11Mb                                      ;# 802.11 data transmission rate
Mac/802_11 set basicRate_ 1Mb                                      ;# 802.11 basic transmission rate
Mac/802_11 set aarf_ false                                         ;# 802.11 Auto Rate Fallback




#------------------------------------------------------------------------------
# Defining options
# ------------------------------------------------------------------------------
set val(chan) Channel/WirelessChannel                              ;# channel type
set val(ant) Antenna/OmniAntenna                                   ;# antenna type
set val(propagation) Shado ;# propagation model
set val(netif) Phy/WirelessPhy                                     ;# network interface type
set val(ll) LL                                                     ;# link layer type
set val(ifq) Queue/DropTail/PriQueue                               ;# interface queue type
set val(ifqlen) 50                                                 ;# max packet in ifq
set val(mac) Mac/802_11                                            ;# MAC type
set val(rp) DSR ;#AODV  ;#AOMDV ;# routing protocol
set val(n) 16.0 ;# node number
set val(density) 4096 ;# node density [node/km^2]
set val(end) 2060.0                                                ;# simulation time [s]
set val(mobility) Static ;# mobility model
set val(minSpeed) 0.5                                              ;# movement minimum speed [m/s]
set val(maxSpeed) 1.5                                              ;# movement maximum speed [m/s]
set val(minPause) 0.0                                              ;# movement minimum pause time [s]
set val(maxPause) 0.0                                              ;# movement maximum pause time [s]
set val(movementStart) 950.0                                       ;# movement start time [s]
set val(traffic) Node-UDP ;# data pattern
set val(dataStart) 1000.0                                          ;# data start time [s]
set val(dataStop) [expr $val(end) - 60.0]                          ;# data stop time [s]
set val(seed) 1 ;# general pseudo-random sequence generator
set val(macFailed) true                                            ;# ATR protocol: ns2 MAC failed callback
set val(etxMetric) true                                            ;# ATR protocol: ETX route metric
set val(throughput) 5.4 ;# CBR rate (<= 5.4Mb/s)
set val(flow) 100                                                  ;# number of concurrent data flow for FLOW-**P data pattern
set val(nodes) $val(n)                                             ;# number of concurrent transmitting nodes for NODE-**P data pattern



# ------------------------------------------------------------------------------
# Fixing DSR bug
# ------------------------------------------------------------------------------
if {$val(rp) == "DSR"} {
      set val(ifq) CMUPriQueue
}



# ------------------------------------------------------------------------------
# Channel model
# ------------------------------------------------------------------------------
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 1.5
Antenna/OmniAntenna set Gt_ 1                                      ;# transmitter antenna gain
Antenna/OmniAntenna set Gr_ 1                                      ;# receiver antenna gain
Phy/WirelessPhy set L_ 1.0                                         ;# system loss factor (mostly 1.0)
if {$val(propagation) == "TwoRay"} {                               ;# range tx = 250m
      set val(prop) Propagation/TwoRayGround
      set prop [new $val(prop)]
      Phy/WirelessPhy set CPThresh_ 10.0                         ;# capture threshold in Watt
      Phy/WirelessPhy set CSThresh_ 1.559e-11                    ;# Carrier Sensing threshold
      Phy/WirelessPhy set RXThresh_ 3.652e-10                    ;# receiver signal threshold
      Phy/WirelessPhy set freq_ 2.4e9                            ;# channel frequency (Hz)
      Phy/WirelessPhy set Pt_ 0.28                               ;# transmitter signal power (Watt)
}
if {$val(propagation) == "Shado"} {
      set val(prop) Propagation/Shadowing
      set prop [new $val(prop)]
      $prop set pathlossExp_ 3.8                                 ;# path loss exponent
      $prop set std_db_ 2.0                                      ;# shadowing deviation (dB)
      $prop set seed_ 1                                          ;# seed for RNG
      $prop set dist0_ 1.0                                       ;# reference distance (m)
      $prop set CPThresh_ 10.0                                   ;# capture threshold in Watt
      $prop set RXThresh_ 2.37e-13                               ;# receiver signal threshold
      $prop set CSThresh_ [expr 2.37e-13 * 0.0427]               ;# Carrier Sensing threshold
      $prop set freq_ 2.4e9                                      ;# channel frequency (Hz)
      Phy/WirelessPhy set Pt_ 0.28
}



# ------------------------------------------------------------------------------
# Topology definition
# ------------------------------------------------------------------------------
#Creazione dello scenario in funzione della densita' di nodo scelta
set val(dim) [expr $val(n) / $val(density)]
set val(x) [expr [expr sqrt($val(dim))] * 1000]
set val(y) [expr [expr sqrt($val(dim))] * 1000]



# ------------------------------------------------------------------------------
# Pseudo-random sequence generator
# ------------------------------------------------------------------------------

# General pseudo-random sequence generator
set genSeed [new RNG]
$genSeed seed $val(seed)
set randomSeed [new RandomVariable/Uniform]
$randomSeed use-rng $genSeed
$randomSeed set min_ 1.0
$randomSeed set max_ 100.0

# Mobility model: x node position [m]
set genNodeX [new RNG]
$genNodeX seed [expr [$randomSeed value]]
set randomNodeX [new RandomVariable/Uniform]
$randomNodeX use-rng $genNodeX
$randomNodeX set min_ 1.0
$randomNodeX set max_ [expr $val(x) - 1.0]

# Mobility model: y node position [m]
set posNodeY [new RNG]
$posNodeY seed [expr [$randomSeed value]]
set randomNodeY [new RandomVariable/Uniform]
$randomNodeY use-rng $posNodeY
$randomNodeY set min_ 1.0
$randomNodeY set max_ [expr $val(y) - 1.0]

# Mobility model: node speed [m/s]
set genNodeSpeed [new RNG]
$genNodeSpeed seed [expr [$randomSeed value]]
set randomNodeSpeed [new RandomVariable/Uniform]
$randomNodeSpeed use-rng $genNodeSpeed
$randomNodeSpeed set min_ $val(minSpeed)
$randomNodeSpeed set max_ $val(maxSpeed)

# Mobility model: node movement pause [s]
set genNodePause [new RNG]
$genNodePause seed [expr [$randomSeed value]]
set randomNodePause [new RandomVariable/Uniform]
$randomNodePause use-rng $genNodePause
$randomNodePause set min_ $val(minPause)
$randomNodePause set max_ $val(maxPause)

# Data pattern: node
set genNode [new RNG]
$genNode seed [expr [$randomSeed value]]
set randomNode [new RandomVariable/Uniform]
$randomNode use-rng $genNode
$randomNode set min_ 0
$randomNode set max_ [expr $val(n) - 1]

# Data pattern "Random": flow start time [s]
set genStartData [new RNG]
$genStartData seed [expr [$randomSeed value]]
set randomStartData [new RandomVariable/Uniform]
$randomStartData use-rng $genStartData
$randomStartData set min_ $val(dataStart)
$randomStartData set max_ $val(dataStop)

# Data pattern "Full: flow start time [s]
set genStartDataFull [new RNG]
$genStartDataFull seed [expr [$randomSeed value]]
set randomStartDataFull [new RandomVariable/Uniform]
$randomStartDataFull use-rng $genStartDataFull
$randomStartDataFull set min_ 0
$randomStartDataFull set max_ [expr ($val(n) * ($val(n) - 1)) - 1]

# Data pattern: flow end time [s]
set genEndData [new RNG]
$genEndData seed [expr [$randomSeed value]]
set randomEndData [new RandomVariable/Uniform]
$randomEndData use-rng $genEndData
$randomEndData set min_ 0.0
$randomEndData set max_ [expr $val(end) - $val(dataStart) - 20]



# ------------------------------------------------------------------------------
# General definition
# ------------------------------------------------------------------------------
;#Instantiate the simulator
set ns [new Simulator]
;#Define topology
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
;#Create channel
set chan [new $val(chan)]
$prop topography $topo
;#Create God
create-god $val(n)
;#Global node setting
$ns node-config -adhocRouting $val(rp) \
      -llType $val(ll) \
      -macType $val(mac) \
      -ifqType $val(ifq) \
      -ifqLen $val(ifqlen) \
      -antType $val(ant) \
      -propInstance $prop \
      -phyType $val(netif) \
      -channel $chan \
      -topoInstance $topo \
      -agentTrace ON \
      -routerTrace ON \
      -macTrace OFF \
      -movementTrace OFF



# ------------------------------------------------------------------------------
# Trace file definition
# ------------------------------------------------------------------------------

#New format for wireless traces
$ns use-newtrace

#Create trace object for ns, nam, monitor and Inspect
set nsTrc [open ns.trc w]
$ns trace-all $nsTrc
#set namTrc [open nam.trc w]
#$ns namtrace-all-wireless $namTrc $val(x) $val(y)
set scenarioTrc [open scenario.trc w]

proc fileTrace {} {
#     global ns nsTrc namTrc
      global ns nsTrc scenarioTrc
      $ns flush-trace
      close $nsTrc
      close $scenarioTrc
#     close $namTrc
#     exec nam nam.trc &
}



# ------------------------------------------------------------------------------
# Nodes definition
# ------------------------------------------------------------------------------
;#  Create the specified number of nodes [$val(n)] and "attach" them to the channel.
for {set i 0} {$i < $val(n) } {incr i} {
      set node($i) [$ns node]
      $node($i) random-motion 0        ;# disable random motion
}    



# ------------------------------------------------------------------------------
# Nodes mobility
# ------------------------------------------------------------------------------
#parameters for trace Inspect
puts $scenarioTrc "# nodes: $val(n), max time: $val(end)"
puts $scenarioTrc "# nominal range: 250"

if {$val(mobility) == "Static"} {
      for {set i 0} {$i < $val(n)} {incr i} {
            set X [expr [$randomNodeX value] ]
            $node($i) set X_ $X
            set Y [expr [$randomNodeY value] ]
            $node($i) set Y_ $Y
            $node($i) set Z_ 0.0
            $ns initial_node_pos $node($i) 20
            puts $scenarioTrc "\$node_($i) set X_ $X"
            puts $scenarioTrc "\$node_($i) set Y_ $Y"
            puts $scenarioTrc "\$node_($i) set Z_ 0.0"
      }
}



# ------------------------------------------------------------------------------
# Data load
# ------------------------------------------------------------------------------
if {$val(traffic) == "Node-UDP"} {
      for {set i 0} {$i < $val(nodes)} {incr i} {
            set udp($i) [new Agent/UDP]
            $ns attach-agent $node($i) $udp($i)
            set dest [expr round([$randomNode value])]
            while {$dest == $i} {
                  set dest [expr round([$randomNode value])]
            }
            set monitor($dest) [new Agent/LossMonitor]
            $ns attach-agent $node($dest) $monitor($dest)
            $ns connect $udp($i) $monitor($dest)
            set cbr($i) [new Application/Traffic/CBR]
            $cbr($i) attach-agent $udp($i)
            $cbr($i) set packetSize_ 1000
            $cbr($i) set random_ false
            $cbr($i) set rate_ [expr $val(throughput) / [expr $val(n) * sqrt($val(n))]]Mb
#           $cbr($i) set rate_ [expr $val(throughput)]Mb
            $ns at [expr $val(dataStart) + [$randomSeed value]] "$cbr($i) start"
            $ns at $val(dataStop) "$cbr($i) stop"
#           $ns at [expr [$randomStartData value]] "$cbr($i) start"
#           set endData [expr [$randomStartData value] + [$randomEndData value]]
#           if {$endData > $val(dataStop)} {
#                 set endData $val(dataStop)
#           }
#           $ns at $endData "$cbr($i) stop"
      }
}



# ------------------------------------------------------------------------------
# Tracing
# ------------------------------------------------------------------------------

# printing simulation time
proc timeTrace { tracePause} {
      global ns
      set now [$ns now]
      $ns at [expr $now + $tracePause] "timeTrace $tracePause"
      puts "$now simulation seconds"
}

$ns at 10.0 "timeTrace 10.0"

#$ns at 500 "[$node(0) agent 255] storeInfo id1 tex#t1"
#$ns at 500 "[$node(0) agent 255] storeInfo id2 text2"

#$ns at 520 "[$node(0) agent 255] requestInfo id1"

# ------------------------------------------------------------------------------
# Starting & ending
# ------------------------------------------------------------------------------
for {set i 0} {$i < $val(n) } {incr i} {
      $ns at $val(end) "$node($i) reset";
}

$ns at $val(end) "fileTrace"
$ns at $val(end) "$ns halt"

$ns run

OUTPUT:

0 comments:

Post a Comment