📄 testnvns.tcl
字号:
# Test the "ghost" ns with a grid topology# Usage:# testnsg myid numsys grid-width# myid = my node it (0 .. (numsys-1))# numsys = number of participating simulators# grid-width = number of nodes on the grid in x-direction# (y direction assumed same, square grid).proc cbr-pair { source peer } { global ns n set cbr [new Agent/CBR/UDP] set exp [new Traffic/Expoo] set sink [$ns set nullAgent_] $ns attach-agent $n($source) $cbr $ns attach-agent $n($peer) $sink $exp set packet-size 500 $exp set rate 100Kb $exp set idle-time 0.1 $exp set burst-time 0.1 $cbr attach-traffic $exp $ns connect $cbr $sink $ns at 0.0 "$cbr start"}if {[llength $argv] < 1} { puts "Usage: testnsg grid-width" exit 0}set gridx [lindex $argv 0]set ns [new Simulator]$ns set-nix-routingset nodecnt [expr $gridx * $gridx]set nf [open testnvns.nam w]$ns namtrace-all $nfset tf [open testnvns.tr w]$ns trace-all $tfset linkdelay 0.020set diagonaldelay [expr $linkdelay * (sqrt(2.0))]# Create the nodesfor { set i 0 } { $i < $nodecnt } { incr i } { set n($i) [$ns node]}# Create the linksfor { set i 0 } { $i < $nodecnt } { incr i } { # Set false for neighbor exists (used for diagonals) set nbr 0 set nbl 0 set nbb 0 set nbt 0 if [expr ($i % $gridx) != 0] { # Create left neighbor # Actually, don't create, we just use right and top #set nb [expr $i - 1] #$ns duplex-link $n($i) $n($nb) 1.5Mb $linkdelay DropTail #$ns duplex-link-op $n($i) $n($nb) orient left set nbl 1 } if [expr ($i % $gridx) != ($gridx - 1)] { # Create right neighbor set nb [expr $i + 1] $ns duplex-link $n($i) $n($nb) 1.5Mb $linkdelay DropTail $ns duplex-link-op $n($i) $n($nb) orient right set nbr 1 } if [expr $i >= $gridx] { # Create bottom neighbor #set nb [expr $i - $gridx] #$ns duplex-link $n($i) $n($nb) 1.5Mb $linkdelay DropTail #$ns duplex-link-op $n($i) $n($nb) orient down set nbb 1 } if [expr $i < ($nodecnt - $gridx)] { # Create top neighbor set nb [expr $i + $gridx] $ns duplex-link $n($i) $n($nb) 1.5Mb $linkdelay DropTail $ns duplex-link-op $n($i) $n($nb) orient up set nbt 1 } if [expr $nbr && $nbt] { # Create right-up diagonal set nb [expr $i + 1 + $gridx]; $ns duplex-link $n($i) $n($nb) 1.5Mb $diagonaldelay DropTail $ns duplex-link-op $n($i) $n($nb) orient right-up } if [expr $nbl && $nbt] { # Create left-up diagnoal set nb [expr $i - 1 + $gridx]; $ns duplex-link $n($i) $n($nb) 1.5Mb $diagonaldelay DropTail $ns duplex-link-op $n($i) $n($nb) orient left-up }}# Now define the flows# node 0 sends to all "edge" nodes on right col and top row# first do right columnfor { set i 0 } { $i < $gridx } { incr i } { set nb [expr ($i+1) * $gridx - 1] cbr-pair 0 $nb}# Then top rowfor { set i 0 } { $i < $gridx } { incr i } { set nb [expr $gridx*$gridx - $i - 1] cbr-pair 0 $nb}$ns at 2.0 "$ns halt"$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -