File: asym.tcl

package info (click to toggle)
ns2 2.35%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 78,796 kB
  • sloc: cpp: 172,923; tcl: 107,130; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 816; awk: 525; csh: 355
file content (339 lines) | stat: -rwxr-xr-x 6,795 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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
# Scripts for bandwidth-asymmetry simulations.  Uses util.tcl (must be in
# this directory).

source util.tcl

# set up simulation

set ns [new Simulator]

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

set f [open out.tr w]
$ns trace-all $f

#$ns use-scheduler List

set tcptrace [open tcp.tr w] 
set sinktrace [open sink.tr w]
set redtrace [open red.tr w]
set qtrace [open q.tr w]
set graph 0
set connGraphFlag("") 0
set maxdelack 25
set maxburst 0
set upwin 0
set downwin 100
set tcpTick 0.1
set ackSize 6
set rbw 28.8Kb
set rqsize 10
set qsize 10
set rgw "DropTail"
set nonfifo 1
set acksfirst false
set filteracks false
set reconsacks false
set replace_head false
set q_wt 0.1
set rand_drop false
set prio_drop false
set randomize 1

set startTime 0
set midtime 0
set stop 50

Agent/AckReconsClass set deltaAckThresh_ 2
Agent/AckReconsClass set ackInterArr_ 0.010
Agent/AckReconsClass set ackSpacing_ 0.010
Agent/AckReconsClass set delack_ 2
Agent/AckReconsClass set adaptive_ 1
Agent/AckReconsClass set alpha_ 0.25
Agent/AckReconsClass set lastTime_ 0
Agent/AckReconsClass set lastAck_ 0
Agent/AckReconsClass set lastRealTime_ 0
Agent/AckReconsClass set lastRealAck_ 0

Queue set limit_ $qsize 

proc printUsage {} {
	puts "Usage: "
	exit
}

proc finish {ns traceall tcptrace graph connGraphFlag midtime} {
 #	upvar $connGraphFlag graphFlag 
	 
	$ns flush-trace
	close $traceall
	flush $tcptrace
	close $tcptrace
#	exec perl ~/src/ns-2/bin/trsplit -f -pt tcp out.tr
#	exec perl ~/src/ns-2/bin/trsplit -f -pt ack out.tr
	exit 0
}

# read user options and act accordingly
set count 0
while {$count < $argc} {
	set arg [lindex $argv $count]
	incr count 2
	switch -exact '$arg' {
		'-graph' {
			set graph 1
			incr count -1
			continue
		}
		'-r' {
			set randomize 1
			incr count -1
			continue
		}
		'-mda' {
			set maxdelack [lindex $argv [expr $count-1]]
			continue
		}
		'-acksz' {
			set ackSize [lindex $argv [expr $count-1]]
			continue
		}
		'-mb' {
			set maxburst [lindex $argv [expr $count-1]]
			continue
		}
		'-win' {
			set downwin [lindex $argv [expr $count-1]]
			continue
		}
		'-upwin' {
			set upwin [lindex $argv [expr $count-1]]
			continue
		}
		'-tk' {
			set tcpTick [lindex $argv [expr $count-1]]
			continue
		}
		'-rbw' {
			 set rbw [lindex $argv [expr $count-1]]
			continue
		}
		'-rq' {
			set rqsize [lindex $argv [expr $count-1]]
			continue
		}
		'-q' {
			set qsize [lindex $argv [expr $count-1]]
			Queue set limit_ $qsize 
			continue
		}
		'-nonfifo' {
			set nonfifo 1
			incr count -1
			continue
		}
		'-noecn' {
			Agent/TCP set disable_ecn_ 1
			incr count -1
			continue
		}
		'-red' {
			set rgw "RED"
			incr count -1
			continue
		}
		'-rd' {
			set rand_drop true
			incr count -1
			continue
		}
		'-pd' {
			set prio_drop true
			incr count -1
			continue
		}
		'-g' {
			set g [lindex $argv [expr $count-1]]
			Agent/TCP/Asym set g_ g
			continue
		}
		'-qwt' {
			set q_wt [lindex $argv [expr $count-1]]
			continue
		}
		'-acksfirst' {
			set acksfirst true
			incr count -1
			continue
		}
		'-afil' {
			set filteracks true
			incr count -1
			continue
		}
		'-recons' {
			set reconsacks true
			incr count -1
			continue
		}
		'-noadap' {
			Agent/AckReconsClass set adaptive_ 0
			incr count -1
			continue
		}
		'-replace_head' {
			set replace_head true
			incr count -1
			continue
		}
		'-mid' {
			set midtime [lindex $argv [expr $count-1]]
			continue
		}
		'-stop' {
			set stop [lindex $argv [expr $count-1]]
			continue
		}
		default {
			incr count -2
		} 
	}
	switch -exact '$arg' {
		'-dn' {
			set direction "down"
		}
		'-up' {
			set direction "up"
		}
		'-2way' {
			set direction "2way"
		}
		default {
			puts "arg $arg"
			printUsage
			exit
		}
	}
	incr count 1
	set arg [lindex $argv $count]
	switch -exact '$arg' {
		'-asym' {
			set type "asym"
		}
		'-asymsrc' {
			set type "asymsrc"
		}
		'-reno' {
			set type "reno"
		}
		'-reno2' {
			set type "reno2"
		}
		default {
			printUsage
			puts "arg $arg"
			exit
		}
	}
	incr count 1
	set arg [lindex $argv $count]
	set startTime $arg
	incr count 1
	
	set connGraph 0 
	set arg [lindex $argv $count]
	if { $arg == "-graph" } {
		set connGraph 1
		incr count 1
	}

	if { $direction == "down" } {
		set src $n0
		set dst $n3
	} elseif { $direction == "up" } {
		set src $n3
		set dst $n0
	} elseif { $direction == "2way" } {
		puts "2-way"
		set src $n0
		set dst $n3
		set src2 $n3
		set dst2 $n0
	}
	
	if { $randomize } { 
		ns-random 0
	}

	for { set i 0 } { $i < 2 } { incr i } {
		if { $type == "asym" } {
			set tcp($i) [createTcpSource "TCP/Reno/Asym" $maxburst $tcpTick $downwin]
			set rgw "RED"
			$tcp($i) set damp_ 0
			$tcp($i) set g_ 0.125
			set sink($i) [createTcpSink "TCPSink/Asym" $sinktrace $ackSize $maxdelack]
		} elseif { $type == "asymsrc" } {
			 set tcp($i) [createTcpSource "TCP/Reno/Asym" $maxburst $tcpTick $downwin]
			 $tcp($i) set damp_ 0
			 $tcp($i) set g_ 0.125
			 set sink($i) [createTcpSink "TCPSink" $sinktrace $ackSize]
		 } elseif { $type == "reno" } {
			 set tcp($i) [createTcpSource "TCP/Reno" $maxburst $tcpTick $downwin]
			 set sink($i) [createTcpSink "TCPSink" $sinktrace $ackSize]
		 } elseif { $type == "reno2" } {
			 set tcp($i) [createTcpSource "TCP/Reno" 0 $tcpTick $downwin]
			 set sink($i) [createTcpSink "TCPSink/DelAck" $sinktrace $ackSize]
		 }
	 }

	 Agent/AckReconsClass set size_ [$tcp(0) set packetSize_]

	 if { $direction == "up" && $upwin != 0 } {
		 $tcp(0) set window_ $upwin
	 }
	 if { $direction == "2way" } {
		 set ftp(1) [createFtp $ns $src2 $tcp(1) $dst2 $sink(1)]
	 }
	 set ftp(0) [createFtp $ns $src $tcp(0) $dst $sink(0)]

	 setupTcpTracing $tcp(0) $tcptrace
 #	setupGraphing $tcp $connGraph connGraphFlag
 #	puts "ftp $ftp ftp2 $ftp2"
	 $ns at $startTime "$ftp(0) start" 
	 set offset [uniform 5 10]
	 puts "rev conn at $offset"
	 set s2 [expr $startTime + $offset]
	 if { $direction == "2way"} {
		 $ns at $s2 "$ftp(1) start" 
	 }
 #	puts "starting ftp2 at $s2"
 }

if { $nonfifo && $rgw == "RED" } {
	set rgw "RED/Semantic"
}


# topology
#
#      10Mb, 1ms       10Mb, 5ms       10Mb, 1ms
#  n0 ------------ n1 ------------ n2 ------------ n3
#                     28.8Kb, 50ms 
#
$ns duplex-link $n0 $n1 10Mb 1ms DropTail
$ns simplex-link $n1 $n2 10Mb 5ms DropTail
$ns simplex-link $n2 $n1 $rbw 50ms $rgw
$ns duplex-link $n2 $n3 10Mb 1ms DropTail

# configure reverse bottleneck queue
puts "nonfifo $nonfifo rqsize $rqsize fqsize $qsize"
configQueue $ns $n2 $n1 $rgw $qtrace $redtrace $rqsize $nonfifo $acksfirst $filteracks $replace_head $prio_drop $rand_drop
configQueue $ns $n1 $n0 DropTail 0 0 20 $nonfifo false false false false false $reconsacks

# end simulation
$ns at $stop "finish $ns $f $tcptrace $graph connGraphFlag $midtime"

$ns run