?? model.tcl
字號:
#設定模擬結束時間
set opt(stop) 250
#設定base station的數目
set opt(num_FA) 1
#讀取使用者設定的參數
proc getopt {argc argv} {
global opt
lappend optlist nn
for {set i 0} {$i < $argc} {incr i} {
set opt($i) [lindex $argv $i]
}
}
getopt $argc $argv
set pGG $opt(0)
set pBB $opt(1)
set pG $opt(2)
set pB $opt(3)
set fname $opt(4)
set comm_type $opt(5)
set loss_model $opt(6)
#產生一個模擬的物件
set ns_ [new Simulator]
#使用hierarchial addressing的方式定址
$ns_ node-config -addressType hierarchical
puts [ns-random 0]
#設定有兩個domain,每個domain各有一個cluster
#第一個cluster(wired)有一個node,第二個cluster(wireles)有兩個node (base state + mobile node)
AddrParams set domain_num_ 2
lappend cluster_num 1 1
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel 1 2
AddrParams set nodes_num_ $eilastlevel
#設定記錄檔,把模擬過程都記錄下來
set tracefd [open test.tr w]
$ns_ trace-all $tracefd
set namtracefd [open test.nam w]
$ns_ namtrace-all-wireless $namtracefd 1000 1000
#設定mobile node的個數
set opt(nnn) 1
# 拓樸的範圍為 100m x 100m
set topo [new Topography]
$topo load_flatgrid 100 100
#create god
set god_ [create-god [expr $opt(nnn)+$opt(num_FA)]]
# wired nodes
set W(0) [$ns_ node 0.0.0]
# create channel
set chan_ [new Channel/WirelessChannel]
#設定節點參數
$ns_ node-config -mobileIP ON \
-adhocRouting NOAH \
-llType LL \
-macType Mac/802_11 \
-ifqType Queue/DropTail/PriQueue \
-ifqLen 2000 \
-antType Antenna/OmniAntenna \
-propType Propagation/TwoRayGround \
-phyType Phy/WirelessPhy \
-channel $chan_ \
-topoInstance $topo \
-wiredRouting ON\
-agentTrace ON \
-routerTrace ON \
-macTrace ON
#設定base station節點
set HA [$ns_ node 1.0.0]
set HAnetif_ [$HA set netif_(0)]
$HAnetif_ set-error-level $pGG $pBB $pG $pB $loss_model
#設定mobile node的參數
#不需要wired routing,所以把此功能off
$ns_ node-config -wiredRouting OFF
set MH(0) [$ns_ node 1.0.1]
set MHnetif_(0) [$MH(0) set netif_(0)]
$MHnetif_(0) set-error-level $pGG $pBB $pG $pB $loss_model
#把此mobile node跟前面的base station節點做連結
[$MH(0) set regagent_] set home_agent_ [AddrParams addr2id [$HA node-addr]]
#設定base station的位置在(100.0, 100.0)
$HA set X_ 100.0
$HA set Y_ 100.0
$HA set Z_ 0.0
#設定mobile node的位置在(80.0, 80.0)
$MH(0) set X_ 80.0
$MH(0) set Y_ 80.0
$MH(0) set Z_ 0.0
#在wired node和base station之間建立一條連線
$ns_ duplex-link $W(0) $HA 10Mb 10ms DropTail
$ns_ at $opt(stop).1 "$MH(0) reset";
$ns_ at $opt(stop).0001 "$W(0) reset"
#建立一個CBR的應用程式 (wired node ---> base station)
set udp0 [new Agent/UDP]
$ns_ attach-agent $W(0) $udp0
$udp0 set packetSize_ 1000
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set rate_ 50000
$cbr0 set packetSize_ 1000
set null0 [new Agent/Null]
$MH(0) attach $null0 3
#當base station收到cbr packet時,可以根據使用者設定以unicast或multicast轉送封包到mobile node)
set forwarder_ [$HA set forwarder_]
puts [$forwarder_ port]
$ns_ connect $udp0 $forwarder_
$forwarder_ dst-addr [AddrParams addr2id [$MH(0) node-addr]]
$forwarder_ comm-type $comm_type
#在2.4秒時,開始送出cbr封包
$ns_ at 2.4 "$cbr0 start"
#在200.0秒時,停止傳送
$ns_ at 200.0 "$cbr0 stop"
$ns_ at $opt(stop).0002 "stop "
$ns_ at $opt(stop).0003 "$ns_ halt"
#設定一個stop的程序
proc stop {} {
global ns_ tracefd
#關閉記錄檔
close $tracefd
}
#執行模擬
$ns_ run
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -