2007/12/11

NS2 快速入門: DV-distance 模擬 (2)

第一個可正常使用 DSR, DSDV, AODV Routing 的 Wireless Simulation

參考 ns-2/tcl/test/test-suite-WLtutorial.tcl
參考網址 http://www.net.c.dendai.ac.jp/~yuuki/

如果要使用 DSDV

記得 Application 啟動的時間要比較晚

因為 DSDV 要建立好 routing table

花的時間比較久

routing-test.tcl
[code]
#===================================
# Simulation parameters setup
#===================================
set opt(chan) Channel/WirelessChannel ;# channel type
set opt(prop) Propagation/TwoRayGround ;# radio-propagation model
set opt(netif) Phy/WirelessPhy ;# network interface type
set opt(mac) Mac/802_11 ;# MAC type
set opt(ifq) Queue/DropTail/PriQueue ;# interface queue type
set opt(ll) LL ;# link layer type
set opt(ant) Antenna/OmniAntenna ;# antenna model
set opt(ifqlen) 50 ;# max packet in ifq
set opt(nn) 20 ;# number of mobilenodes
set opt(rp) DSDV ;# routing protocol
set opt(x) 700 ;# X dimension of topography
set opt(y) 550 ;# Y dimension of topography
set opt(stop) 150.0 ;# time of simulation end
set opt(cp) "cbr-test.tcl"
set opt(sc) "scen-test.tcl"

#===================================
# Initialization
#===================================

# Create a ns simulator
set ns [new Simulator]

# Setup topography object
set topo [new Topography]
$topo load_flatgrid $opt(x) $opt(y)
set god [create-god $opt(nn)]

# Open the NS trace file
$ns use-newtrace
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 $opt(x) $opt(y)

#===================================
# Mobile node parameter setup
#===================================
if {$opt(rp) == "DSR"} {
set opt(ifq) CMUPriQueue
} else {
set opt(ifq) Queue/DropTail/PriQueue
}

$ns node-config -adhocRouting $opt(rp) \
-llType $opt(ll) \
-macType $opt(mac) \
-ifqType $opt(ifq) \
-ifqLen $opt(ifqlen) \
-antType $opt(ant) \
-propType $opt(prop) \
-phyType $opt(netif) \
-channel [new $opt(chan)] \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-movementTrace ON

#===================================
# Nodes Definition
#===================================

# Create 20 nodes
for {set i 0} {$i < $opt(nn)} {incr i} {
set node($i) [$ns node]
$node($i) random-motion 0
}

puts "Loading scenario file..."
source $opt(sc)

for {set i 0} {$i < $opt(nn)} {incr i} {
$ns initial_node_pos $node($i) 20
}

#===================================
# Agents & Applications Definition
#===================================

puts "Loading connection pattern..."
source $opt(cp)

#===================================
# Termination
#===================================

# Define a 'finish' procedure
proc finish {} {
global ns tracefile namfile
$ns flush-trace
close $tracefile
close $namfile

puts "running nam..."
exec nam out.nam &
exit 0
}
for {set i 0} {$i < $opt(nn)} {incr i} {
$ns at $opt(stop) "$node($i) reset"
}
$ns at $opt(stop) "$ns nam-end-wireless $opt(stop)"
$ns at $opt(stop) "finish"
$ns at $opt(stop) "puts \"done\" ; $ns halt"

puts "Starting Simulation..."
$ns run
[/code]

cbr-test.tcl
[code]
#===================================
# Agents Definition
#===================================

# Setup a TCP connection
set tcp [new Agent/TCP]
$ns attach-agent $node(15) $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $node(4) $sink
$ns connect $tcp $sink

#===================================
# Applications Definition
#===================================

set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns at 120.0 "$ftp start"
[/code]

scen-test.tcl
[code]
#===================================
# Nodes Definition
#===================================
set god [God instance]
#$god set-dist 15 16 1 ;# node 15 <--> node 16 : 2 hop
#$god set-dist 16 17 1 ;# node 15 <--> node 17 : 2 hop
#$god set-dist 17 18 1 ;# node 15 <--> node 16 : 2 hop


$node(0) set X_ 0
$node(0) set Y_ 600
$node(0) set Z_ 0.0

$node(1) set X_ 200
$node(1) set Y_ 600
$node(1) set Z_ 0.0

$node(2) set X_ 400
$node(2) set Y_ 600
$node(2) set Z_ 0.0

$node(3) set X_ 600
$node(3) set Y_ 600
$node(3) set Z_ 0.0

$node(4) set X_ 800
$node(4) set Y_ 600
$node(4) set Z_ 0.0

$node(5) set X_ 0
$node(5) set Y_ 400
$node(5) set Z_ 0.0

$node(6) set X_ 200
$node(6) set Y_ 400
$node(6) set Z_ 0.0

$node(7) set X_ 400
$node(7) set Y_ 400
$node(7) set Z_ 0.0

$node(8) set X_ 600
$node(8) set Y_ 400
$node(8) set Z_ 0.0

$node(9) set X_ 800
$node(9) set Y_ 400
$node(9) set Z_ 0.0

$node(10) set X_ 0
$node(10) set Y_ 200
$node(10) set Z_ 0.0

$node(11) set X_ 200
$node(11) set Y_ 200
$node(11) set Z_ 0.0

$node(12) set X_ 400
$node(12) set Y_ 200
$node(12) set Z_ 0.0

$node(13) set X_ 600
$node(13) set Y_ 200
$node(13) set Z_ 0.0

$node(14) set X_ 800
$node(14) set Y_ 200
$node(14) set Z_ 0.0

$node(15) set X_ 0
$node(15) set Y_ 0
$node(15) set Z_ 0.0

$node(16) set X_ 200
$node(16) set Y_ 0
$node(16) set Z_ 0.0

$node(17) set X_ 400
$node(17) set Y_ 0
$node(17) set Z_ 0.0

$node(18) set X_ 600
$node(18) set Y_ 0
$node(18) set Z_ 0.0

$node(19) set X_ 800
$node(19) set Y_ 0
$node(19) set Z_ 0.0
[/code]

No comments:

Post a Comment