返回

为方便读者,本教材中连续四行及以上程序源码(脚本),本网站将直接提供,直接输入使用。

(1)第31页第6行开始15行代码如下:
Queue/DTail set drop_front_ false
Queue/DTail set summarystats_ false
Queue/DTail set queue_in_bytes_ false
Queue/DTail set mean_pktsize_ 500
Queue/DTail/PriQ set Prefer_Routing_Protocols 1
Queue/DTail/PriQ set Max_Levels 4 
Queue/DTail/PriQ set Levels 4	
Mac/802_11e set SlotTime_ 0.000020;# 20us
Mac/802_11e set SIFS_ 0.000010;# 10us
Mac/802_11e set PreambleLength_ 144;#144 bit
Mac/802_11e set PLCPHeaderLength_ 48;# 48 bits
Mac/802_11e set PLCPDataRate_ 1.0e6;# 1Mbps	       
Mac/802_11e set RTSThreshold_ 3000 ;# bytes
Mac/802_11e set ShortRetryLimit_ 7;# retransmittions
Mac/802_11e set LongRetryLimit_ 4;# retransmissions
(2)第31页倒数第12行共17行(含次页前5行)代码如下:
if [TclObject is-class Mac/802_11e] {
Mac/802_11e set delay_ 64us
Mac/802_11e set ifs_ 16us
Mac/802_11e set slotTime_ 16us
Mac/802_11e set cwmin_ 16
Mac/802_11e set cwmax_ 1024
Mac/802_11e set rtxLimit_ 16
Mac/802_11e set bssId_ -1
Mac/802_11e set sifs_ 8us
Mac/802_11e set pifs_ 12us
Mac/802_11e set difs_ 16us
Mac/802_11e set rtxAckLimit_ 1
Mac/802_11e set rtxRtsLimit_ 3
Mac/802_11e set basicRate_ 1Mb  ;# set this to 0 if want to use bandwidth_ for
Mac/802_11e set dataRate_ 1Mb   ;# both control and data pkts
Mac/802_11e set cfb_ 0 ;# disables CFB
}
(3)第34页第7行到第35页倒数第4行实验完整代码如下:
set ns [new Simulator]
set nd [open lab2.tr w]
$ns trace-all $nd
set max_fragmented_size 1024
set packetSize 1052
set s1 [$ns node]
set r1 [$ns node]
set r2 [$ns node]
set d1 [$ns node]
$ns duplex-link $s1 $r1 10Mb 1ms DropTail
$ns simplex-link $r1 $r2 640kb 1ms DropTail
$ns simplex-link $r2 $r1 640Mb 1ms DropTail
$ns duplex-link $r2 $d1 10Mb 1ms DropTail
set qr1r2 [[$ns link $r1 $r2] queue]
$qr1r2 set limit_ 50
set udp1 [new Agent/my_UDP]
$ns attach-agent $s1 $udp1
$udp1 set packetSize_ $packetSize
$udp1 set_filename sd_a01
set null1 [new Agent/myEvalvid_Sink]
$ns attach-agent $d1 $null1
$ns connect $udp1 $null1
$null1 set_filename rd_a01
set original_file_name st_a01
set trace_file_name video1.dat
set original_file_id [open $original_file_name r]
set trace_file_id [open $trace_file_name w]
set pre_time 0
while {[eof $original_file_id] == 0} {
	gets $original_file_id current_line
	scan $current_line "%d%s%d%d%f" no_ frametype_ length_ tmp1_ tmp2_
	set time [expr int(($tmp2_ - $pre_time)*1000000.0)]
	if { $frametype_ == "I" } {
		set type_v 1
		set prio_p 0
	}
	if { $frametype_ == "P" } {
		set type_v 2
		set prio_p 0
	}
	if { $frametype_ == "B" } {
		set type_v 3
		set prio_p 0
	}
	if { $frametype_ == "H" } {
		set type_v 1
		set prio_p 0
	}
	puts $trace_file_id "$time $length_ $type_v $prio_p $max_fragmented_size"
	set pre_time $tmp2_
}
close $original_file_id
close $trace_file_id
set end_sim_time $tmp2_
puts "$end_sim_time"
set trace_file [new Tracefile]
$trace_file filename $trace_file_name
set video1 [new Application/Traffic/myEvalvid]
$video1 attach-agent $udp1
$video1 attach-tracefile $trace_file

proc finish {} {
	global ns nd
	$ns flush-trace
	close $nd
	exit 0
}
$ns at 0.0 "$video1 start"
$ns at $end_sim_time "$video1 stop"
$ns at [expr $end_sim_time + 1.0] "$null1 closefile"
$ns at [expr $end_sim_time + 1.0] "finish"
$ns run