File: aomdv.tcl

package info (click to toggle)
ns2 2.35%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 78,120 kB
  • sloc: cpp: 172,923; tcl: 107,127; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 812; awk: 525; csh: 355
file content (343 lines) | stat: -rw-r--r-- 13,960 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
340
341
342
343
#------------------------------------------------------------------------------
# Marco Fiore's Patch
# ------------------------------------------------------------------------------
#remove-all-packet-headers                                                     ;# removes all except common
#add-packet-header IP LL Mac AODV AOMDV ATR DSDV DSR OLSR UDP TCP CBR FTP      ;# needed headers
Mac/802_11 set CWMin_                 31
Mac/802_11 set CWMax_                 1023
Mac/802_11 set SlotTime_              0.000020                     ;# 20us
Mac/802_11 set SIFS_                  0.000010                     ;# 10us
Mac/802_11 set PreambleLength_        144                         ;# 144 bit
Mac/802_11 set ShortPreambleLength_   72                           ;# 72 bit
Mac/802_11 set PreambleDataRate_      1.0e6                        ;# 1Mbps
Mac/802_11 set PLCPHeaderLength_      48                           ;# 48 bits
Mac/802_11 set PLCPDataRate_          1.0e6                        ;# 1Mbps
Mac/802_11 set ShortPLCPDataRate_     2.0e6                        ;# 2Mbps
Mac/802_11 set RTSThreshold_          3000                         ;# bytes
Mac/802_11 set ShortRetryLimit_       7                            ;# retransmissions
Mac/802_11 set LongRetryLimit_        4                            ;# retransmissions
Mac/802_11 set newchipset_            false                        ;# use new chipset, allowing a more recent  packet to be correctly received in place of the first sensed packet
Mac/802_11 set dataRate_ 11Mb                                      ;# 802.11 data transmission rate
Mac/802_11 set basicRate_ 1Mb                                      ;# 802.11 basic transmission rate 
Mac/802_11 set aarf_ false                                         ;# 802.11 Auto Rate Fallback



#------------------------------------------------------------------------------
# Defining options
# ------------------------------------------------------------------------------
set val(chan) Channel/WirelessChannel                              ;# channel type
set val(ant) Antenna/OmniAntenna                                   ;# antenna type
set val(propagation) Shado ;# propagation model
set val(netif) Phy/WirelessPhy                                     ;# network interface type
set val(ll) LL                                                     ;# link layer type
set val(ifq) Queue/DropTail/PriQueue                               ;# interface queue type
set val(ifqlen) 50                                                 ;# max packet in ifq
set val(mac) Mac/802_11                                            ;# MAC type
set val(rp) AOMDV ;# routing protocol
set val(n) 16.0 ;# node number
set val(density) 4096 ;# node density [node/km^2]
set val(end) 2060.0                                                ;# simulation time [s]
set val(mobility) Static ;# mobility model
set val(minSpeed) 0.5                                              ;# movement minimum speed [m/s]
set val(maxSpeed) 1.5                                              ;# movement maximum speed [m/s]
set val(minPause) 0.0                                              ;# movement minimum pause time [s]
set val(maxPause) 0.0                                              ;# movement maximum pause time [s]
set val(movementStart) 950.0                                       ;# movement start time [s]
set val(traffic) Node-UDP ;# data pattern
set val(dataStart) 1000.0                                          ;# data start time [s]
set val(dataStop) [expr $val(end) - 60.0]                          ;# data stop time [s]
set val(seed) 1 ;# general pseudo-random sequence generator
set val(macFailed) true                                            ;# ATR protocol: ns2 MAC failed callback
set val(etxMetric) true                                            ;# ATR protocol: ETX route metric
set val(throughput) 5.4 ;# CBR rate (<= 5.4Mb/s)
set val(flow) 100                                                  ;# number of concurrent data flow for FLOW-**P data pattern
set val(nodes) $val(n)                                             ;# number of concurrent transmitting nodes for NODE-**P data pattern



# ------------------------------------------------------------------------------
# Fixing DSR bug
# ------------------------------------------------------------------------------
if {$val(rp) == "DSR"} {
	set val(ifq) CMUPriQueue
}



# ------------------------------------------------------------------------------
# Channel model
# ------------------------------------------------------------------------------
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 1.5
Antenna/OmniAntenna set Gt_ 1                                      ;# transmitter antenna gain
Antenna/OmniAntenna set Gr_ 1                                      ;# receiver antenna gain
Phy/WirelessPhy set L_ 1.0                                         ;# system loss factor (mostly 1.0)
if {$val(propagation) == "TwoRay"} {                               ;# range tx = 250m 
	set val(prop) Propagation/TwoRayGround
	set prop [new $val(prop)]
	Phy/WirelessPhy set CPThresh_ 10.0                         ;# capture threshold in Watt
	Phy/WirelessPhy set CSThresh_ 1.559e-11                    ;# Carrier Sensing threshold
	Phy/WirelessPhy set RXThresh_ 3.652e-10                    ;# receiver signal threshold
	Phy/WirelessPhy set freq_ 2.4e9                            ;# channel frequency (Hz)
	Phy/WirelessPhy set Pt_ 0.28                               ;# transmitter signal power (Watt)
}
if {$val(propagation) == "Shado"} {
	set val(prop) Propagation/Shadowing
	set prop [new $val(prop)]
	$prop set pathlossExp_ 3.8                                 ;# path loss exponent
	$prop set std_db_ 2.0                                      ;# shadowing deviation (dB)
	$prop set seed_ 1                                          ;# seed for RNG
	$prop set dist0_ 1.0                                       ;# reference distance (m)
	$prop set CPThresh_ 10.0                                   ;# capture threshold in Watt
	$prop set RXThresh_ 2.37e-13                               ;# receiver signal threshold
	$prop set CSThresh_ [expr 2.37e-13 * 0.0427]               ;# Carrier Sensing threshold
	$prop set freq_ 2.4e9                                      ;# channel frequency (Hz)
	Phy/WirelessPhy set Pt_ 0.28
}



# ------------------------------------------------------------------------------
# Topology definition
# ------------------------------------------------------------------------------
#Creazione dello scenario in funzione della densita' di nodo scelta
set val(dim) [expr $val(n) / $val(density)] 
set val(x) [expr [expr sqrt($val(dim))] * 1000]
set val(y) [expr [expr sqrt($val(dim))] * 1000]



# ------------------------------------------------------------------------------
# Pseudo-random sequence generator
# ------------------------------------------------------------------------------

# General pseudo-random sequence generator
set genSeed [new RNG]
$genSeed seed $val(seed)
set randomSeed [new RandomVariable/Uniform]
$randomSeed use-rng $genSeed
$randomSeed set min_ 1.0
$randomSeed set max_ 100.0

# Mobility model: x node position [m]
set genNodeX [new RNG]
$genNodeX seed [expr [$randomSeed value]]
set randomNodeX [new RandomVariable/Uniform]
$randomNodeX use-rng $genNodeX
$randomNodeX set min_ 1.0
$randomNodeX set max_ [expr $val(x) - 1.0]

# Mobility model: y node position [m]
set posNodeY [new RNG]
$posNodeY seed [expr [$randomSeed value]]
set randomNodeY [new RandomVariable/Uniform]
$randomNodeY use-rng $posNodeY
$randomNodeY set min_ 1.0
$randomNodeY set max_ [expr $val(y) - 1.0]

# Mobility model: node speed [m/s]
set genNodeSpeed [new RNG]
$genNodeSpeed seed [expr [$randomSeed value]]
set randomNodeSpeed [new RandomVariable/Uniform]
$randomNodeSpeed use-rng $genNodeSpeed
$randomNodeSpeed set min_ $val(minSpeed)
$randomNodeSpeed set max_ $val(maxSpeed)

# Mobility model: node movement pause [s] 
set genNodePause [new RNG]
$genNodePause seed [expr [$randomSeed value]]
set randomNodePause [new RandomVariable/Uniform]
$randomNodePause use-rng $genNodePause
$randomNodePause set min_ $val(minPause)
$randomNodePause set max_ $val(maxPause)

# Data pattern: node
set genNode [new RNG]
$genNode seed [expr [$randomSeed value]]
set randomNode [new RandomVariable/Uniform]
$randomNode use-rng $genNode
$randomNode set min_ 0
$randomNode set max_ [expr $val(n) - 1]

# Data pattern "Random": flow start time [s]
set genStartData [new RNG]
$genStartData seed [expr [$randomSeed value]]
set randomStartData [new RandomVariable/Uniform]
$randomStartData use-rng $genStartData
$randomStartData set min_ $val(dataStart)
$randomStartData set max_ $val(dataStop)

# Data pattern "Full: flow start time [s]
set genStartDataFull [new RNG]
$genStartDataFull seed [expr [$randomSeed value]]
set randomStartDataFull [new RandomVariable/Uniform]
$randomStartDataFull use-rng $genStartDataFull
$randomStartDataFull set min_ 0
$randomStartDataFull set max_ [expr ($val(n) * ($val(n) - 1)) - 1]

# Data pattern: flow end time [s]
set genEndData [new RNG]
$genEndData seed [expr [$randomSeed value]]
set randomEndData [new RandomVariable/Uniform]
$randomEndData use-rng $genEndData
$randomEndData set min_ 0.0
$randomEndData set max_ [expr $val(end) - $val(dataStart) - 20]



# ------------------------------------------------------------------------------
# General definition
# ------------------------------------------------------------------------------
;#Instantiate the simulator
set ns [new Simulator]
;#Define topology
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
;#Create channel
set chan [new $val(chan)]
$prop topography $topo
;#Create God
create-god $val(n)
;#Global node setting
$ns node-config -adhocRouting $val(rp) \
	-llType $val(ll) \
	-macType $val(mac) \
	-ifqType $val(ifq) \
	-ifqLen $val(ifqlen) \
	-antType $val(ant) \
	-propInstance $prop \
	-phyType $val(netif) \
	-channel $chan \
	-topoInstance $topo \
	-agentTrace ON \
	-routerTrace ON \
	-macTrace OFF \
	-movementTrace OFF



# ------------------------------------------------------------------------------
# Trace file definition
# ------------------------------------------------------------------------------

#New format for wireless traces
$ns use-newtrace

#Create trace object for ns, nam, monitor and Inspect
set nsTrc [open ns.trc w]
$ns trace-all $nsTrc
#set namTrc [open nam.trc w] 
#$ns namtrace-all-wireless $namTrc $val(x) $val(y)
set scenarioTrc [open scenario.trc w]

proc fileTrace {} {
#	global ns nsTrc namTrc
	global ns nsTrc scenarioTrc
	$ns flush-trace 
	close $nsTrc
	close $scenarioTrc
#	close $namTrc
#	exec nam nam.trc &
}



# ------------------------------------------------------------------------------
# Nodes definition
# ------------------------------------------------------------------------------
;#  Create the specified number of nodes [$val(n)] and "attach" them to the channel.
for {set i 0} {$i < $val(n) } {incr i} {
	set node($i) [$ns node] 
	$node($i) random-motion 0        ;# disable random motion
}	



# ------------------------------------------------------------------------------
# Nodes mobility
# ------------------------------------------------------------------------------
#parameters for trace Inspect
puts $scenarioTrc "# nodes: $val(n), max time: $val(end)"
puts $scenarioTrc "# nominal range: 250"

if {$val(mobility) == "Static"} {
	for {set i 0} {$i < $val(n)} {incr i} { 
		set X [expr [$randomNodeX value] ]
		$node($i) set X_ $X
		set Y [expr [$randomNodeY value] ]
		$node($i) set Y_ $Y
		$node($i) set Z_ 0.0
		$ns initial_node_pos $node($i) 20
		puts $scenarioTrc "\$node_($i) set X_ $X"
		puts $scenarioTrc "\$node_($i) set Y_ $Y"
		puts $scenarioTrc "\$node_($i) set Z_ 0.0"
	}
}



# ------------------------------------------------------------------------------
# Data load
# ------------------------------------------------------------------------------
if {$val(traffic) == "Node-UDP"} {
	for {set i 0} {$i < $val(nodes)} {incr i} {
		set udp($i) [new Agent/UDP]
		$ns attach-agent $node($i) $udp($i)
		set dest [expr round([$randomNode value])]
		while {$dest == $i} {
			set dest [expr round([$randomNode value])]
		}
		set monitor($dest) [new Agent/LossMonitor]
		$ns attach-agent $node($dest) $monitor($dest)
		$ns connect $udp($i) $monitor($dest)
		set cbr($i) [new Application/Traffic/CBR]
		$cbr($i) attach-agent $udp($i)
		$cbr($i) set packetSize_ 1000
		$cbr($i) set random_ false
		$cbr($i) set rate_ [expr $val(throughput) / [expr $val(n) * sqrt($val(n))]]Mb
#		$cbr($i) set rate_ [expr $val(throughput)]Mb
		$ns at [expr $val(dataStart) + [$randomSeed value]] "$cbr($i) start"
		$ns at $val(dataStop) "$cbr($i) stop"
#		$ns at [expr [$randomStartData value]] "$cbr($i) start"
#		set endData [expr [$randomStartData value] + [$randomEndData value]]
#		if {$endData > $val(dataStop)} {
#			set endData $val(dataStop)
#		}
#		$ns at $endData "$cbr($i) stop"
	}
}



# ------------------------------------------------------------------------------
# Tracing
# ------------------------------------------------------------------------------

# printing simulation time
proc timeTrace { tracePause} {
	global ns
   	set now [$ns now]
   	$ns at [expr $now + $tracePause] "timeTrace $tracePause"
   	puts "$now simulation seconds"
}

$ns at 10.0 "timeTrace 10.0"

#$ns at 500 "[$node(0) agent 255] storeInfo id1 tex#t1"
#$ns at 500 "[$node(0) agent 255] storeInfo id2 text2"

#$ns at 520 "[$node(0) agent 255] requestInfo id1"

# ------------------------------------------------------------------------------
# Starting & ending
# ------------------------------------------------------------------------------
for {set i 0} {$i < $val(n) } {incr i} {
    	$ns at $val(end) "$node($i) reset";
}

$ns at $val(end) "fileTrace"
$ns at $val(end) "$ns halt"

$ns run