📄 sim4.tcl
字号:
# Pragmatic General Multicast (PGM), Reliable Multicast## Example to demonstrate multiple senders, and that an Agent/PGM can also# act as an Agent/PGM/Receiver.## This is a random topology with two senders and several receivers in# two multicast groups. The topology can be found in the file r10-0.tcl.## Ryan S. Barnett, 2001# rbarnett@catarina.usc.eduset ns [new Simulator -multicast on]$ns node-config -PGM ON$ns namtrace-all [open out.nam w]$ns color 0 red$ns color 1 black$ns color 2 white$ns color 3 blue$ns color 4 yellow$ns color 5 LightBlue$ns color 6 green$ns color 7 magenta$ns color 8 orangeset colors { red black white blue yellow LightBlue green magenta orange }# Used to provide backward compatability with older version of ns.Simulator instproc duplex-link-of-interfaces {args} { # Extract arguments. set n1 [lindex $args 0] set n2 [lindex $args 1] set BW [lindex $args 2] set delay [lindex $args 3] set queue [lindex $args 4] # Execute correct link instruction. $self duplex-link $n1 $n2 $BW $delay $queue}source r10-0.tclset verbose 0# Create the network topology.create-nodes ns ncreate-links ns n 1.5Mbfor {set k 0} { $k < 10 } { incr k } { $n($k) color "green"}# Create two multicast groups.set group1 [Node allocaddr]puts "Group1 addr: $group1"set group2 [Node allocaddr]puts "Group2 addr: $group2"##Set routing protocol#set mproto DMset mrthandle [$ns mrtproto $mproto {}]set loss_module1 [new PGMErrorModel]$loss_module1 drop-packet ODATA 10 2$loss_module1 drop-target [$ns set nullAgent_]$ns lossmodel $loss_module1 $n(0) $n(9)$ns duplex-link-op $n(0) $n(9) color "red"set loss_module2 [new PGMErrorModel]# Drop the second ODATA packet that crosses this link every 10th cycle.$loss_module2 drop-packet ODATA 10 2$loss_module2 drop-target [$ns set nullAgent_]$ns lossmodel $loss_module2 $n(2) $n(6)$ns duplex-link-op $n(2) $n(6) color "red"## Create Sender#set src1 [new Agent/PGM/Sender]$ns attach-agent $n(2) $src1$src1 set dst_addr_ $group1$src1 set dst_port_ 0$src1 set rdata_delay_ 40ms$src1 set spm_interval_ 75ms$n(2) color "magenta"# Attach data source to sender.set cbr1 [new Application/Traffic/CBR]$cbr1 attach-agent $src1$cbr1 set rate_ 448Kb$cbr1 set packetSize_ 210$cbr1 set random_ 0set src2 [new Agent/PGM/Sender]$ns attach-agent $n(8) $src2$src2 set dst_addr_ $group2$src2 set dst_port_ 0$src2 set rdata_delay_ 40ms$src2 set spm_interval_ 75ms$n(8) color "magenta"# Attach data source to sender.set cbr2 [new Application/Traffic/CBR]$cbr2 attach-agent $src2$cbr2 set rate_ 448Kb$cbr2 set packetSize_ 210$cbr2 set random_ 0proc create-receiver {rcv i group} { upvar $rcv r global ns n set r [new Agent/PGM/Receiver] $ns attach-agent $n($i) $r $ns at 0.01 "$n($i) join-group $r $group" $n($i) color "blue"}## Create PGM receivers#create-receiver rcv1 1 $group1create-receiver rcv5 5 $group1create-receiver rcv7 7 $group1create-receiver rcv3 3 $group2create-receiver rcv4 4 $group2create-receiver rcv6 6 $group2$n(3) shape "square"$n(4) shape "square"$n(6) shape "square"$ns at 0.3 "$src1 start-SPM"$ns at 0.4 "$src2 start-SPM"$ns at 0.5 "$cbr1 start"$ns at 0.6 "$cbr2 start"$ns at 0.9 "$cbr1 stop"$ns at 1.0 "$cbr2 stop"$ns at 1.1 "$src1 stop-SPM"$ns at 1.2 "$src2 stop-SPM"$ns at 1.5 "finish"proc finish {} { global ns src1 src2 rcv1 rcv5 rcv7 rcv3 rcv4 rcv6 n puts "Simulation Finished" puts "src1:" $src1 print-stats puts "agent9:" set pgm_agent [$n(9) get-pgm] $pgm_agent print-stats puts "rcv1:" $rcv1 print-stats puts "rcv5:" $rcv5 print-stats puts "rcv7:" $rcv7 print-stats puts "src2:" $src2 print-stats puts "rcv3:" $rcv3 print-stats puts "rcv4:" $rcv4 print-stats puts "rcv6:" $rcv6 print-stats# puts "Starting Nam.."# exec nam out.nam & exit 0}$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -