📄 binary.tcl
字号:
# Pragmatic General Multicast (PGM), Reliable Multicast## Example script to demonstrate the capabilities of the PGM implementation.## This is a binary tree with one sender and several receivers at the leaf# nodes.## 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 height 3set nodeNum [expr 1 << $height]set linkNum [expr $nodeNum - 1]set rcvrNum [expr 1 << [expr $height - 1]]puts "Height $height nodes $nodeNum rcvrs $rcvrNum"set colors { red black white blue yellow LightBlue green magenta orange }## Create multicast group#set group [Node allocaddr]puts "Group addr: $group"# Create source node.set n(0) [$ns node]$n(0) shape "circle"$n(0) color "red"## Create nodes#for {set k 1} {$k < $rcvrNum} {incr k} { set n($k) [$ns node] $n($k) shape "circle"}for {set k $rcvrNum} {$k < $nodeNum} {incr k} { set n($k) [$ns node] $n($k) shape "circle" $n($k) color "blue"}#set n(16) [$ns node]#$n(16) shape "circle"#$n(16) color "blue"#set n(17) [$ns node]#$n(17) shape "circle"#$n(17) color "blue"proc makelinks { bw delay pairs } { global ns n foreach p $pairs { set src $n([lindex $p 0]) set dst $n([lindex $p 1]) $ns duplex-link $src $dst $bw $delay DropTail }}makelinks 1.5Mb 10ms {{ 0 1 }{ 1 2 }{ 1 3 }{ 2 4 }{ 2 5 }{ 3 6 }{ 3 7 }}##Set routing protocol#set mproto DMset mrthandle [$ns mrtproto $mproto {}]## Create loss modules - Cycle is 10,# loss module i drops (i*5)th packet in the cycle#for {set i 0} {$i <= $linkNum} {incr i} { set loss_module($i) [new PGMErrorModel] # Drop second ODATA packet every 10 packets. $loss_module($i) drop-packet ODATA 10 2 $loss_module($i) drop-target [$ns set nullAgent_]}proc insert-loss pairs { global ns n loss_module set i 0 foreach p $pairs { set src $n([lindex $p 0]) set dst $n([lindex $p 1]) $ns lossmodel $loss_module($i) $src $dst incr i }}## Insert a loss module#insert-loss { { 2 4 } { 2 5 }}## Create Sender#set src [new Agent/PGM/Sender]$ns attach-agent $n(0) $src$src set dst_addr_ $group$src set dst_port_ 0# Attach data source to sender.set cbr [new Application/Traffic/CBR]$cbr attach-agent $src$cbr set rate_ 448Kb$cbr set packetSize_ 210$cbr set random_ 0## Create PGM receivers#set i $rcvrNumfor {set k 0} {$k < $rcvrNum} {incr k} { set rcv($k) [new Agent/PGM/Receiver] $ns attach-agent $n($i) $rcv($k) $ns at 0.01 "$n($i) join-group $rcv($k) $group" incr i}#set rcv(8) [new Agent/PGM/Receiver]#$ns attach-agent $n(16) $rcv(8)#$ns at 0.01 "$n(16) join-group $rcv(8) $group"#set rcv(9) [new Agent/PGM/Receiver]#$ns attach-agent $n(17) $rcv(9)#$ns at 0.01 "$n(17) join-group $rcv(9) $group"# Set Node-2 PGM Agent to be disabled, only multicast.#set agent2 [$n(2) get-pgm]#$agent2 set pgm_enabled_ 0#set agent4 [$n(4) get-pgm]#$agent4 set pgm_enabled_ 0$ns at 0.3 "$src start-SPM"$ns at 0.5 "$cbr start"$ns at 1.5 "$cbr stop"$ns at 2.0 "$src stop-SPM"$ns at 2.0 "finish"proc finish {} { global ns src rcv rcvrNum nodeNum n $src print-stats# Print statistics for each PGM Agent. for {set k 0} {$k < $nodeNum} {incr k} { set pgm_agent [$n($k) get-pgm] $pgm_agent print-stats }# Print statistics for each receiver. for {set k 0} {$k < $rcvrNum} {incr k} { $rcv($k) print-stats }#$rcv(1) print-all-stats puts "Simulation Finished"# puts "Starting Nam.."# exec nam out.nam & exit 0}$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -