⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 model.tcl

📁 NS仿真
💻 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 + -