http://www.pixnet.net/NS2lab
哎呀~好久一直沒來更新了
這次要介紹的是階層式節點的腳本撰寫
首先我取NS目錄下的範例做解說囉

有線階層式腳本模擬
腳本來自:
C:\cygwin\home\Administrator\ns-allinone-2.30\ns-2.30\tcl\ex\hier-rtg-10.tcl

這是我在meeting時自己繪製的網路情形


# hier-rtg-10.tcl
# A simple example for hierarchical routing, by generating
# topology by hand (of 10 nodes)

set ns [new Simulator]
$ns set-address-format hierarchical

$ns namtrace-all [open hier-out-a.nam w]
$ns trace-all [open hier-out-a.tr w]

AddrParams set domain_num_ 2
lappend cluster_num 2 2
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel 2 3 2 3
AddrParams set nodes_num_ $eilastlevel

set naddr {0.0.0 0.0.1 0.1.0 0.1.1 0.1.2 1.0.0 1.0.1 1.1.0 1.1.1 1.1.2}

for {set i 0} {$i < 10} {incr i} {
     set n($i) [$ns node [lindex $naddr $i]]
}

$ns duplex-link $n(0) $n(1) 5Mb 2ms DropTail
$ns duplex-link $n(1) $n(2) 5Mb 2ms DropTail
$ns duplex-link $n(2) $n(3) 5Mb 2ms DropTail
$ns duplex-link $n(2) $n(4) 5Mb 2ms DropTail
$ns duplex-link $n(1) $n(5) 5Mb 2ms DropTail
$ns duplex-link $n(5) $n(6) 5Mb 2ms DropTail
$ns duplex-link $n(6) $n(7) 5Mb 2ms DropTail
$ns duplex-link $n(7) $n(8) 5Mb 2ms DropTail
$ns duplex-link $n(8) $n(9) 5Mb 2ms DropTail

set udp0 [new Agent/UDP]
$ns attach-agent $n(0) $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0

set udp1 [new Agent/UDP]
$udp1 set class_ 1
$ns attach-agent $n(2) $udp1
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp1

set null0 [new Agent/Null]
$ns attach-agent $n(8) $null0

set null1 [new Agent/Null]
$ns attach-agent $n(6) $null1

$ns connect $udp0 $null0
$ns connect $udp1 $null1

$ns at 1.0 "$cbr0 start"
$ns at 1.5 "$cbr1 start"

puts [$cbr0 set packetSize_]
puts [$cbr0 set interval_]

$ns at 1.0 {$n(2) label [$n(2) set rtsize_]}
$ns at 1.0 {$n(4) label [$n(4) set rtsize_]}
$ns at 1.0 {$n(6) label [$n(6) set rtsize_]}
$ns at 1.0 {$n(8) label [$n(8) set rtsize_]}

$ns at 3.5 "finish"

proc finish {} {
    global ns
    $ns flush-trace
    puts "running nam..."
    exec nam hier-out-a.nam &
    exit 0
}

$ns run

解說:

AddrParams set domain_num_ 2
lappend cluster_num 2 2
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel 2 3 2 3
AddrParams set nodes_num_ $eilastlevel


首先我們在
AddrParams類別下,由網路拓樸可知有兩個domain,因此
將domain_num設為2;而第二行的lappend語法的意思是在
cluster_num
裡附加2 2,舉個簡單的例子:如果說今天我們set list a b c d
然後lappend $list d e f,則之後 puts 出來看會發現他list變成了a b c d e f
okay~繼續,因為我們剛設定兩個domain,所以我們要開始定義每個
domain裡有幾個clusters,在這邊我們設定為 2 2,第一個2代表的意思是
第一個domain裡有2個clusters;
第二個2代表的意思是,第二個domain
裡有2個clusters,所以下面的 2 3 2 3代表的是
cluster下的node個數,以此類推


set naddr {0.0.0 0.0.1 0.1.0 0.1.1 0.1.2 1.0.0 1.0.1 1.1.0 1.1.1 1.1.2}

for {set i 0} {$i < 10} {incr i} {
     set n($i) [$ns node [lindex $naddr $i]]
}

這裡我們把naddr作為一個list,裡面是這10個node的階層位址
在使用for loop去set它,接下來就是一些基礎的設定囉!

比較進階無線的可以到柯志亨老師的網站去看看
http://140.116.72.80/~smallko/ns2/mobileip.htm
這是有關mobileIP的,但我在執行腳本的時候有問題
如果有可以跑的~記得跟我說一下0.0
創作者介紹

『網路節點模擬』 研究日誌

NS2lab 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • 賈斯丁
  • hello
    我這一年也在摸NS2
    正巧今天看到你的部落格
    上來看看之後發現有許多可以學習的東西
    不過啊
    我發現這一篇你有點小小的錯誤在講解lappend的時候
    範例應該這樣寫才對:
    set list { a b c d }
    lappend list d e f
    puts $list

    因為剛剛試了一下
    跟你分享一下囉
  • 嗯沒錯~
    有人那麼認真看我們寫的東西真的很高興
    我會把那個部分改過來的~
    如果有什麼好資料也可以一起分享囉~

    對了, 我在右邊有創一個google論壇
    Shared file裡面有
    OTcl_Overview_1.ppt
    AWK_Overview.ppt
    是我在網路上找的資料
    助益滿大的

    NS2lab 於 2008/04/06 16:25 回覆

  • 看不懂
  • 請問關於下面這個
    $ns at 1.0 {$n(2) label [$n(2) set rtsize_]}

    是什麼意思?

    label及rtsize分別代表什麼意思