使用组播协议DVMRP,一共有十三个节点,节点7,8,9,12陆续加入组播,后节点12退出组播,拓扑如下:
set ns [new Simulator]
$ns multicast
set f [open dvmrp.tr w]
$ns trace-all $f
$ns namtrace-all [open dvmrp.nam w]
$ns color 1 red
#分配组播地址;
set group [Node allocaddr]
# 节点数
set nod 13
# 创建节点;
for {set i 0} {$i < $nod} {incr i} {
set n($i) [$ns node]
}
#创建链路
$ns duplex-link $n(0) $n(1) 1.5Mb 10ms DropTail
$ns duplex-link $n(0) $n(2) 1.5Mb 10ms DropTail
$ns duplex-link $n(1) $n(3) 1.5Mb 10ms DropTail
$ns duplex-link $n(1) $n(4) 1.5Mb 10ms DropTail
$ns duplex-link $n(2) $n(5) 1.5Mb 10ms DropTail
$ns duplex-link $n(2) $n(6) 1.5Mb 10ms DropTail
$ns duplex-link $n(3) $n(7) 1.5Mb 10ms DropTail
$ns duplex-link $n(3) $n(8) 1.5Mb 10ms DropTail
$ns duplex-link $n(5) $n(9) 1.5Mb 10ms DropTail
$ns duplex-link $n(6) $n(10) 1.5Mb 10ms DropTail
$ns duplex-link $n(6) $n(11) 1.5Mb 10ms DropTail
$ns duplex-link $n(10) $n(12) 1.5Mb 10ms DropTail
$ns duplex-link $n(10) $n(11) 1.5Mb 10ms DropTail
$ns duplex-link $n(4) $n(9) 1.5Mb 10ms DropTail
# 配置组播协议;
DM set CacheMissMode dvmrp
set mproto DM
# all nodes will contain multicast protocol agents;
set mrthandle [$ns mrtproto $mproto]
set udp [new Agent/UDP]
$ns attach-agent $n(0) $udp
$udp set class_ 1
set src1 [new Application/Traffic/CBR]
$src1 attach-agent $udp
$src1 set packet_size_ 500
$src1 set interval_ 0.005
$udp set dst_addr_ $group
$udp set dst_port_ 0
$src1 set random_ false
# create receiver agents
set rcvr [new Agent/LossMonitor]
# joining and leaving the group;
#$ns at 0.6 "$n(7) join-group $rcvr $group"
$ns at 0.6 "$n(8) join-group $rcvr $group"
$ns at 0.7 "$n(7) join-group $rcvr $group"
set rcvr1 [new Agent/LossMonitor]
$ns at 0.8 "$n(9) join-group $rcvr1 $group"
$ns at 0.9 "$n(12) join-group $rcvr1 $group"
$ns at 3.9 "$n(12) leave-group $rcvr1 $group"
$ns at 0.2 "$src1 start"
$ns at 6.2 "finish"
proc finish {} {
global ns rcvr rcvr1
$ns flush-trace
exec nam dvmrp.nam &
exit 0
}
$ns run