File: sim2.tcl

package info (click to toggle)
ns2 2.35%2Bdfsg-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 79,396 kB
  • sloc: cpp: 172,923; tcl: 107,167; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 829; awk: 525; csh: 355
file content (163 lines) | stat: -rw-r--r-- 3,418 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# Pragmatic General Multicast (PGM), Reliable Multicast
#
# Example to demonstrate constrained RDATA forwarding and NAK anticipation.
#
# Ryan S. Barnett, 2001
# rbarnett@catarina.usc.edu

set 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 orange

set colors { red black white blue yellow LightBlue green magenta orange }

set group [Node allocaddr]
puts "Group addr: $group"

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
        }
}

proc disable-pgm { pairs } {
    global n

    foreach p $pairs {
	set agent [$n($p) get-pgm]
	$agent set pgm_enabled_ 0
    }
}

proc create-receiver {rcv i group} {
   upvar $rcv r

   global ns n

   set r [new Agent/PGM/Receiver]
   $r set nak_bo_ivl_ 100ms
   $ns attach-agent $n($i) $r
   $ns at 0.01 "$n($i) join-group $r $group"

   $n($i) color "blue"
}

# Create nodes.
for {set k 0} { $k < 12 } { incr k } {
    set n($k) [$ns node]
    $n($k) shape "circle"
    $n($k) color "green"
}

# Create topology.
#lappend lanlist1 $n(2)
#lappend lanlist1 $n(5)
#lappend lanlist1 $n(6)
#lappend lanlist1 $n(7)

#set lan1 [$ns newLan $lanlist1 10Mb 2ms]

#lappend lanlist2 $n(3)
#lappend lanlist2 $n(9)
#lappend lanlist2 $n(10)
#lappend lanlist2 $n(11)

#set lan2 [$ns newLan $lanlist2 10Mb 2ms]

makelinks 1.5Mb 10ms {
    { 0 1 }
    { 1 2 }
    { 1 3 }
    { 2 4 }
    { 2 5 }
    { 3 6 }
    { 3 7 }
    { 5 8 }
    { 5 9 }
    { 7 10 }
    { 7 11 }
}

$ns duplex-link-op $n(2) $n(5) color "red"
$ns duplex-link-op $n(1) $n(3) color "red"

# Set routing protocol.
set mproto DM
set mrthandle [$ns mrtproto $mproto {}]

# Create sender.
set src0 [new Agent/PGM/Sender]
$ns attach-agent $n(0) $src0
$src0 set dst_addr_ $group
$src0 set dst_port_ 0
$src0 set set rdata_delay_ 40ms

set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $src0
$cbr0 set rate_ 448Kb
$cbr0 set packetSize_ 210
$cbr0 set random_ 0

$n(0) color "magenta"

# Create receivers.
create-receiver rcv4 4 $group
create-receiver rcv6 6 $group
create-receiver rcv8 8 $group
create-receiver rcv9 9 $group
create-receiver rcv10 10 $group
create-receiver rcv11 11 $group

$rcv6 set nak_bo_ivl_ 10ms
$rcv8 set nak_bo_ivl_ 30ms
$rcv9 set nak_bo_ivl_ 30ms

# Disable Agent/PGM on receivers.
disable-pgm { 4 6 8 9 10 11 }

# Disable Agent/PGM on sender.
disable-pgm { 0 }

# Disable Agent/PGM on Node 3.
disable-pgm { 3 }
$n(3) color "black"

# Create a lossy link between 2 and 5.
set loss_module1 [new PGMErrorModel]
# Drop the third ODATA packet going through this link.
$loss_module1 drop-packet ODATA 50 3
$loss_module1 drop-target [$ns set nullAgent_]
$ns lossmodel $loss_module1 $n(2) $n(5)

# Create a lossy link between 1 and 3.
set loss_module2 [new PGMErrorModel]
# Drop the fifth ODATA packet going through this link.
$loss_module2 drop-packet ODATA 50 5
$loss_module2 drop-target [$ns set nullAgent_]
$ns lossmodel $loss_module2 $n(1) $n(3)

$ns at 0.2 "$src0 start-SPM"
$ns at 0.25 "$cbr0 start"
$ns at 0.5 "$cbr0 stop"
$ns at 0.55 "$src0 stop-SPM"
$ns at 0.7 "finish"

proc finish {} {

    exit 0
}

$ns run