Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This script is created by NSG2 beta1
- # <http://wushoupong.googlepages.com/nsg>
- #===================================
- # Simulation parameters setup
- #===================================
- set val(chan) Channel/WirelessChannel ;# channel type
- set val(type) GSM ;# type of network (added)
- 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) DSDV ;# routing protocol
- set val(x) 838 ;# X dimension of topography
- set val(y) 502 ;# Y dimension of topography
- set val(stop) 50.0 ;# time of simulation end(changed from 10 to 50)
- ####################################
- # Creating file for graph (added 3 lnes)
- ####################################
- set f0 [open throughput.tr w]
- set f1 [open lost.tr w]
- set f2 [open delay.tr w]
- #===================================
- # Initialization
- #===================================
- #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 5.tr w]
- $ns trace-all $tracefile
- #Open the NAM trace file
- set namfile [open 5.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 ON \
- -movementTrace ON
- #===================================
- # Nodes Definition
- #===================================
- #Create 10 nodes
- set n0 [$ns node]
- $n0 set X_ 198
- $n0 set Y_ 402
- $n0 set Z_ 0.0
- set X1(0) 210
- set Y1(0) 420
- $ns initial_node_pos $n0 20
- set n1 [$ns node]
- $n1 set X_ 343
- $n1 set Y_ 398
- $n1 set Z_ 0.0
- set X1(1) 330
- set Y1(1) 410
- $ns initial_node_pos $n1 20
- set n2 [$ns node]
- $n2 set X_ 470
- $n2 set Y_ 402
- $n2 set Z_ 0.0
- set X1(2) 480
- set Y1(2) 412
- $ns initial_node_pos $n2 20
- set n3 [$ns node]
- $n3 set X_ 611
- $n3 set Y_ 400
- $n3 set Z_ 0.0
- set X1(3) 621
- set Y1(3) 390
- $ns initial_node_pos $n3 20
- set n4 [$ns node]
- $n4 set X_ 732
- $n4 set Y_ 398
- $n4 set Z_ 0.0
- set X1(4) 744
- set Y1(4) 408
- $ns initial_node_pos $n4 20
- set n5 [$ns node]
- $n5 set X_ 738
- $n5 set Y_ 218
- $n5 set Z_ 0.0
- set X1(5) 750
- set Y1(5) 238
- $ns initial_node_pos $n5 20
- set n6 [$ns node]
- $n6 set X_ 604
- $n6 set Y_ 206
- $n6 set Z_ 0.0
- set X1(6) 624
- set Y1(6) 196
- $ns initial_node_pos $n6 20
- set n7 [$ns node]
- $n7 set X_ 472
- $n7 set Y_ 191
- $n7 set Z_ 0.0
- set X1(7) 484
- set Y1(7) 202
- $ns initial_node_pos $n7 20
- set n8 [$ns node]
- $n8 set X_ 347
- $n8 set Y_ 182
- $n8 set Z_ 0.0
- set X1(8) 358
- set Y1(8) 193
- $ns initial_node_pos $n8 20
- set n9 [$ns node]
- $n9 set X_ 204
- $n9 set Y_ 181
- $n9 set Z_ 0.0
- set X1(9) 194
- set Y1(9) 195
- $ns initial_node_pos $n9 20
- ####################################
- # Calculating distance
- ####################################
- set m 0
- for { set i 0} {$i<$val(nn)} {incr i} {
- set k 0
- for {set j 0} {$j < $val(nn)} {incr j} {
- set a [expr $X1($j)- $X1($i)]
- set b [expr $a*$a]
- set c [expr $Y1($j)-$Y1($i)]
- set d [expr $c*$c]
- set e [expr $b+$d]
- set f 0.5
- set g [expr pow($e,$f)]
- if { $g <=200 && $i !=$j} {
- puts "| node($i) | node($j) |"
- set nei($m) $j
- set k [expr $k+1]
- set m [expr $m+1]
- }
- }
- }
- #===================================
- # Agents Definition
- #===================================
- #Setup a UDP connection
- set udp0 [new Agent/UDP]
- $ns attach-agent $n0 $udp0
- set sink [new Agent/LossMonitor]
- $ns attach-agent $n7 $sink
- $ns connect $udp0 $sink
- $udp0 set packetSize_ 1500
- #===================================
- # 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_ 1.0Mb
- $cbr0 set random_ null
- ####################################
- # Declare 3 Variable
- ####################################
- set holdtime 0
- set holdseq 0
- set holdrate1 0
- #===================================
- # Recording
- #===================================
- #Define a 'record' procedure
- proc record {} {
- global sink f0 f1 f2 holdtime holdseq holdrate1
- set nsi [Simulator instance]
- set time 0.9
- set bw0 [$sink set bytes_]
- puts "$bw0"
- set bw1 [$sink set nlost_]
- set bw2 [$sink set lastPktTime_]
- set bw3 [$sink set npkts_]
- set now [$nsi now]
- puts $f0 "$now [expr (($bw0+ $holdrate1)*8)/(2*$time*1000000)]"
- puts $f1 "$now [expr $bw1/$time]"
- 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
- $nsi at [expr $now+$time] "record"
- }
- $ns at 0.0 "record"
- $ns at 1.0 "$cbr0 start"
- $ns at 50.0 "$cbr0 stop"
- $ns at 2.0 "$n0 setdest 400 300 20"
- $ns at 2.0 "$n1 setdest 420 360 30"
- $ns at 2.0 "$n2 setdest 300 290 20"
- $ns at 2.0 "$n3 setdest 535 400 50"
- $ns at 2.0 "$n4 setdest 600 423 30"
- $ns at 2.0 "$n5 setdest 756 355 20"
- $ns at 2.0 "$n6 setdest 503 260 30"
- $ns at 2.0 "$n7 setdest 660 180 50"
- $ns at 2.0 "$n8 setdest 700 364 20"
- $ns at 2.0 "$n9 setdest 800 368 20"
- #===================================
- # Termination
- #===================================
- #Define a 'finish' procedure
- proc finish {} {
- global ns tracefile namfile f0 f1 f2
- $ns flush-trace
- close $tracefile
- close $namfile
- close $f0
- close $f1
- close $f2
- exec nam 5.nam &
- exec xgraph throughput.tr &
- exec xgraph lost.tr &
- exec xgraph delay.tr &
- 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
Add Comment
Please, Sign In to add comment