-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQ2_part_2.tcl
168 lines (119 loc) · 3.35 KB
/
Q2_part_2.tcl
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
#FA20-BSE-064
#Lab Terminal
#Q2,Part 2
set ns [new Simulator]
set nf [open o.nam w]
$ns namtrace-all $nf
set tcpReno1 [open out0.tr w]
set tcpReno2 [open out1.tr w]
$ns rtproto DV
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]
set n6 [$ns node]
set n7 [$ns node]
set n8 [$ns node]
#a) Mesh Topology (where all nodes are interconnected with each other)
#b)
$ns duplex-link $n1 $n2 30Mb 10ms DropTail
$ns duplex-link $n1 $n5 30Mb 10ms DropTail
$ns duplex-link $n1 $n4 30Mb 10ms DropTail
$ns duplex-link $n1 $n3 30Mb 10ms DropTail
$ns duplex-link $n1 $n8 30Mb 10ms DropTail
$ns duplex-link $n1 $n2 30Mb 10ms DropTail
$ns duplex-link $n2 $n4 30Mb 10ms DropTail
$ns duplex-link $n2 $n5 30Mb 10ms DropTail
$ns duplex-link $n5 $n1 30Mb 10ms DropTail
$ns duplex-link $n5 $n4 30Mb 10ms DropTail
$ns duplex-link $n5 $n6 30Mb 10ms DropTail
$ns duplex-link $n5 $n7 30Mb 10ms FQ
$ns duplex-link $n7 $n4 30Mb 10ms FQ
$ns duplex-link $n7 $n6 30Mb 10ms FQ
$ns duplex-link $n6 $n4 30Mb 10ms FQ
$ns duplex-link $n6 $n3 30Mb 10ms FQ
$ns duplex-link $n3 $n8 30Mb 10ms FQ
$ns duplex-link $n3 $n4 30Mb 10ms FQ
$ns duplex-link $n3 $n7 30Mb 10ms FQ
$ns duplex-link $n4 $n8 30Mb 10ms FQ
#c) TCP/Reno on n1, n3, n5, n7
set tcp1 [new Agent/TCP/Reno]
$ns attach-agent $n1 $tcp1
set tcp3 [new Agent/TCP/Reno]
$ns attach-agent $n3 $tcp3
set tcp5 [new Agent/UDP/Reno]
$ns attach-agent $n5 $tcp5
set tcp7 [new Agent/UDP/Reno]
$ns attach-agent $n7 $tcp7
#FTP for n1, n3
set ftp1 [new Application/FTP]
$ftp1 attach-agent $tcp1
$ftp1 set packet_size_ 1000
set ftp3 [new Application/FTP]
$ftp3 attach-agent $tcp3
$ftp3 set packet_size_ 1000
#CBR for n5, n7
set cbr5 [new Application/Traffic/CBR]
$cbr5 attach-agent $tcp5
$cbr5 set packet_size_ 1000
set cbr7 [new Application/Traffic/CBR]
$cbr7 attach-agent $tcp7
$cbr7 set packet_size_ 1000
#c) TCPSink on n2, n4
set tcpsync1 [new Agent/TCPSink]
$ns attach-agent $n2 $tcpsync1
set tcpsync2 [new Agent/TCPSink]
$ns attach-agent $n4 $tcpsync2
$ns connect $tcp1 $tcpsync1
$ns connect $tcp3 $tcpsync1
$ns connect $tcp5 $tcpsync1
$ns connect $tcp7 $tcpsync1
$ns connect $tcp1 $tcpsync2
$ns connect $tcp3 $tcpsync2
$ns connect $tcp5 $tcpsync2
$ns connect $tcp7 $tcpsync2
# comparing throughput
proc traffic {} {
global tcpsync1 tcpsync2 tcpTahoe UDPFile
set ns [Simulator instance]
set time 0.5
set bwtcp [$tcpsync1 set bytes_]
set bwudp [$tcpsync2 set bytes_]
set now [$ns now]
puts $tcpTahoe "$now [expr $bwtcp/$time*8/1000000]"
puts $UDPFile "$now [expr $bwudp/$time*8/1000000]"
$tcpsync1 set bytes_ 0
$tcpsync2 set bytes_ 0
$ns at [expr $now+$time] "traffic"
}
proc finish {} {
global ns nf tcpTahoe UDPFile
$ns flush-trace
close $nf
close $tcpTahoe
close $UDPFile
exec nam o.nam &
exec xgraph out0.tr out1.tr &
exit 0
}
#d) handle Fail iink
$ns rtmodel-at 10.0 down $n1 $n4
$ns rtmodel-at 10.5 up $n1 $n4
$ns rtmodel-at 10.6 down $n2 $n4
$ns rtmodel-at 11.0 up $n2 $n4
$ns rtmodel-at 11.2 down $n3 $n4
$ns rtmodel-at 11.5 up $n3 $n4
$ns rtmodel-at 11.7 down $n5 $n6
$ns rtmodel-at 12.3 up $n5 $n6
$ns at 0.0 "traffic"
$ns at 1.0 "$ftp1 start"
$ns at 18.0 "$ftp1 stop"
$ns at 0.3 "$ftp3 start"
$ns at 18.5 "$ftp3 stop"
$ns at 1.0 "$udp5 start"
$ns at 18.0 "$udp5 stop"
$ns at 5.0 "$udp7 start"
$ns at 19.0 "$udp7 stop"
$ns at 20.0 "finish"
$ns run