#=================================== # Simulation parameters setup #=================================== set val(chan) Channel/WirelessChannel ;# channel type set val(prop) Propagation/TwoRayGround ;# radio-propagation model set val(netif) Phy/WirelessPhy ;# network interface type set val(mac) Mac/802_11 ;# MAC type set val(ifq) Queue/DropTail/PriQueue ;# interface queue type set val(ll) LL ;# link layer type set val(ant) Antenna/OmniAntenna ;# antenna model set val(ifqlen) 50 ;# max packet in ifq set val(nn) 10 ;# number of mobilenodes set val(rp) AODV ;# routing protocol set val(x) 800 ;# X dimension of topography set val(y) 541 ;# Y dimension of topography set val(stop) 100.0 ;# time of simulation end #=================================== # Initialization #=================================== set f0 [open throughput.tr w] set f1 [open delay.tr w] set f2 [open pdr.tr w] #Create a ns simulator set ns [new Simulator] #Setup topography object set topo [new Topography] $topo load_flatgrid $val(x) $val(y) create-god $val(nn) #Open the NS trace file set tracefile [open out.tr w] $ns trace-all $tracefile #Open the NAM trace file set namfile [open out.nam w] $ns namtrace-all $namfile $ns namtrace-all-wireless $namfile $val(x) $val(y) set chan [new $val(chan)];#Create wireless channel #=================================== # Mobile node parameter setup #=================================== $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channel $chan \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace ON #=================================== # Nodes Definition #=================================== #Create 7 nodes set n0 [$ns node] $n0 set X_ 99 $n0 set Y_ 299 $n0 set Z_ 0.0 $ns initial_node_pos $n0 20 set n1 [$ns node] $n1 set X_ 299 $n1 set Y_ 297 $n1 set Z_ 0.0 $ns initial_node_pos $n1 20 set n2 [$ns node] $n2 set X_ 499 $n2 set Y_ 298 $n2 set Z_ 0.0 $ns initial_node_pos $n2 20 set n3 [$ns node] $n3 set X_ 700 $n3 set Y_ 299 $n3 set Z_ 0.0 $ns initial_node_pos $n3 20 set n4 [$ns node] $n4 set X_ 199 $n4 set Y_ 350 $n4 set Z_ 0.0 $ns initial_node_pos $n4 20 set n5 [$ns node] $n5 set X_ 599 $n5 set Y_ 350 $n5 set Z_ 0.0 $ns initial_node_pos $n5 20 set n6 [$ns node] $n6 set X_ 600 $n6 set Y_ 200 $n6 set Z_ 0.0 $ns initial_node_pos $n6 20 set n7 [$ns node] $n7 set X_ 204 $n7 set Y_ 195 $n7 set Z_ 0.0 $ns initial_node_pos $n7 20 set n8 [$ns node] $n8 set X_ 508 $n8 set Y_ 202 $n8 set Z_ 0.0 $ns initial_node_pos $n8 20 set n9 [$ns node] $n9 set X_ 372 $n9 set Y_ 188 $n9 set Z_ 0.0 $ns initial_node_pos $n9 20 # Node 4,6 is given RED Color and a label- indicating it is a out Wormhole $n4 color red $ns at 0.0 "$n4 color red" $ns at 0.0 "$n4 label Wormhole" $n6 color red $ns at 0.0 "$n6 color red" $ns at 0.0 "$n6 label Wormhole" # Node 0 is given GREEN Color and a label - acts as a Source Node $n0 color green $ns at 0.0 "$n0 color green" $ns at 0.0 "$n0 label Source" # Node 3 is given BLUE Color and a label- acts as a Destination Node $n3 color blue $ns at 0.0 "$n3 color blue" $ns at 0.0 "$n3 label Destination" #=================================== # Set node 4,6 as wormhole peer #=================================== [$n4 set ll_(0)] wormhole-peer [$n6 set ll_(0)] [$n6 set ll_(0)] wormhole-peer [$n4 set ll_(0)] $ns at 0.0 "[$n6 set ragent_] wormhole" #=================================== # Agents Definition #=================================== #Setup a UDP connection set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0 set sink [new Agent/LossMonitor] $ns attach-agent $n3 $sink $ns connect $udp0 $sink $udp0 set packetSize_ 1000 #=================================== # Applications Definition #=================================== #Setup a CBR Application over UDP connection set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0 $cbr0 set packetSize_ 1000 $cbr0 set rate_ 0.1Mb $cbr0 set random_ null $ns at 1.0 "$cbr0 start" $ns at 100.0 "$cbr0 stop" set holdtime 0 set holdseq 0 set holdrate1 0 proc record {} { global sink f0 f1 f2 holdtime holdseq holdrate1 set ns [Simulator instance] set time 0.9 ;#Set Sampling Time to 0.9 Sec set bw0 [$sink set bytes_] set bw1 [$sink set nlost_] set bw2 [$sink set lastPktTime_] set bw3 [$sink set npkts_] set now [$ns now] # Record Bit Rate in Trace Files puts $f0 "$now [expr (($bw0+$holdrate1)*8)/(2*$time*1000000)]" # Record Packet Loss Rate in File puts $f1 "$now [expr ($bw1/$time)+0.5869]" if { $bw3 > $holdseq } { puts $f2 "$now [expr ($bw2 - $holdtime)/($bw3 - $holdseq)]" } else { puts $f2 "$now [expr ($bw3 - $holdseq)]" } $sink set bytes_ 0 $sink set nlost_ 0 set holdtime $bw2 set holdseq $bw3 set holdrate1 $bw0 $ns at [expr $now+$time] "record" ;# Schedule Record after $time interval sec } # Start Recording at Time 0 $ns at 0.0 "record" #=================================== # Termination #=================================== #Define a 'finish' procedure proc finish {} { global ns tracefile namfile f0 f1 f2 $ns flush-trace close $tracefile close $namfile # Close Trace Files close $f0 close $f1 close $f2 exec xgraph throughput.tr -x TIME -y throughput -t Throughput -geometry 800x400 & exec xgraph pdr.tr -x TIME -y PDR -t PDR -geometry 800x400 & exec xgraph delay.tr -x TIME -y Delay -t Delay -geometry 800x400 & exec nam out.nam & exit 0 } for {set i 0} {$i < $val(nn) } { incr i } { $ns at $val(stop) "\$n$i reset" } $ns at $val(stop) "$ns nam-end-wireless $val(stop)" $ns at $val(stop) "finish" $ns at $val(stop) "puts \"done\" ; $ns halt" $ns run