今天做了柯志亨老师的实验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/WirelessChannelset opt(prop) Propagation/TwoRayGroundset opt(netif) Phy/WirelessPhy#下面设置比较特别,若是使用DSR,所使用的ifq就要用CMUPriQueue
set opt(mac) Mac/802_11if {$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/OmniAntennaset opt(x) 500
set opt(y) 500set opt(ifqlen) 2000set opt(seed) 0.0set opt(tr) trace2.tr ;#trace fileset opt(adhocRouting) $opt(0)set opt(nn) 100set 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_ 1023Mac/802_11 set SlotTime_ 0.000010 ;#10usMac/802_11 set SIFS_ 0.000010 ;#10usMac/802_11 set PreambleLength_ 144 ;#144bitMac/802_11 set PreambleDataRate_ 1.0e6 ;#1MbpsMac/802_11 set PLCPHeaderLength_ 48 ;#48bitMac/802_11 set PLCPDataRate_ 1.0e6 ;#1MpbsMac/802_11 set RTSThreshold_ 3000 ;#bytes Disable RTS/CTSMac/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 $tracefdset 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 OFFfor {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