今天做了柯志亨老师的实验23,比较不同的无线网络路由,DSDV/AODV/DSR。按照书上的要求写了脚本和AWK程序,测试一切顺利。但是到了实验二,做DSR实验的时候却出现了事件UID非法的提示。查看trace文件,发现确实停在了大概56s的位置。查了很多资料,解决方法没有找到。而且也不敢随便修改mac文件。不过看了一些解释,我怀疑可能是tcl脚本中的一项设置:Mac/802_11 set SlotTime_ 0.000020 ;#20us不合适。这里设置slot长度为20us。我尝试改了这个参数。把20us改成了10us。运行一遍,顺利通过!
虽然通过测试了,但是我还是不太能够理解其中原因,现将tcl脚本一并贴上来,希望大家能够给我指点指点。
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 opt(chan) Channel/WirelessChannel
set opt(prop) Propagation/TwoRayGround
set opt(netif) Phy/WirelessPhy
#下面设置比较特别,若是使用DSR,所使用的ifq就要用CMUPriQueue
set opt(mac) Mac/802_11
if {$opt(0) == "DSR"} {
set opt(ifq) CMUPriQueue
} else {
set opt(ifq) Queue/DropTail/PriQueue ;#interface queue type
}
set opt(ll) LL
set opt(ant) Antenna/OmniAntenna
set opt(x) 500
set opt(y) 500
set opt(ifqlen) 2000
set opt(seed) 0.0
set opt(tr) trace2.tr ;#trace file
set opt(adhocRouting) $opt(0)
set opt(nn) 100
set opt(cp) "cbr_n100_m10_r10"
set opt(sc) "scen_100n_0p_10M_100t_500_500"
set opt(stop) 100.0
Mac/802_11 set CWMin_ 31
Mac/802_11 set CWMax_ 1023
Mac/802_11 set SlotTime_ 0.000010 ;#10us
Mac/802_11 set SIFS_ 0.000010 ;#10us
Mac/802_11 set PreambleLength_ 144 ;#144bit
Mac/802_11 set PreambleDataRate_ 1.0e6 ;#1Mbps
Mac/802_11 set PLCPHeaderLength_ 48 ;#48bit
Mac/802_11 set PLCPDataRate_ 1.0e6 ;#1Mpbs
Mac/802_11 set RTSThreshold_ 3000 ;#bytes Disable RTS/CTS
Mac/802_11 set ShortRetryLimit_ 7 ;#retrans_mission_
Mac/802_11 set LongRetryLimit_ 4 ;#retrans_mission_
Mac/802_11 set dataRate_ 2Mb ;#802.11data trans_mission rate
Mac/802_11 set basicRate_ 1Mb ;#802.11 basic trans_mission rate
set ns_ [new Simulator]
set tracefd [open $opt(tr) w]
$ns_ trace-all $tracefd
set topo [new Topography]
$topo load_flatgrid $opt(x) $opt(y)
set god_ [create-god $opt(nn)]
set chan_1_ [new $opt(chan)]
$ns_ node-config -adhocRouting $opt(adhocRouting) \
-llType $opt(ll) \
-macType $opt(mac) \
-ifqType $opt(ifq) \
-antType $opt(ant) \
-ifqLen $opt(ifqlen) \
-propType $opt(prop) \
-phyType $opt(netif) \
-channel $chan_1_ \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF
for {set i 0} {$i < $opt(nn)} {incr i} {
set node_($i) [$ns_ node]
$node_($i) random-motion 0
}
#设置结点移动模式
puts "Loading connection pattern..."
#使用source去载入traffic pattern文件
source $opt(cp)
#设置联机传输模式
puts "Loading scenario file..."
#使用source去载入结点移动场景文件
source $opt(sc)
for {set i 0} {$i < $opt(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 20
}
for {set i 0} {$i < $opt(nn)} {incr i} {
$ns_ at $opt(stop).1 "$node_($i) reset"
}
$ns_ at $opt(stop).1 "puts \"ns EXITING...\";$ns_ halt"
puts "Starting Simulation..."
$ns_ run