File: test-suite-srr.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 (176 lines) | stat: -rw-r--r-- 4,274 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

#
# Copyright (c) 1995 The Regents of the University of California.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#	This product includes software developed by the Computer Systems
#	Engineering Group at Lawrence Berkeley Laboratory.
# 4. Neither the name of the University nor of the Laboratory may be used
#    to endorse or promote products derived from this software without
#    specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#

remove-all-packet-headers       ; # removes all except common
add-packet-header Flags IP RTP TCP  ; # hdrs reqd for validation test
 
# FOR UPDATING GLOBAL DEFAULTS:

Simulator instproc get-link { node1 node2 } {
    $self instvar link_
    set id1 [$node1 id]
    set id2 [$node2 id]
    return $link_($id1:$id2)
}

#Simple SRR Test-suite 
proc set_queue {} {
	global q 
	$q maxqueuenumber 256
	$q mtu 250
	$q granularity  10000
#	$q qlimit	30
#	$q maxqueuelen  20

	$q setqueue 1 0 
	$q setqueue 2 1 
	$q setqueue 3 2 
	$q setqueue 4 3 

	$q setrate 0 80000
	$q setrate 1 40000
	$q setrate 2 20000
	$q setrate 3 10000
}

# create 4 cbr sources 
proc create_traffic {} {

	global ns lm0 n0 n1
	for {set i 0} {$i < 4} { incr i} {
		global udp$i cbr$i
	}

	
	for {set i 0} {$i < 4} { incr i} {
		set agt [new Agent/UDP]
		set app [new Application/Traffic/CBR]
	
		$agt set fid_ [expr $i + 1 ] 
		$ns attach-agent $n0 $agt
		$app attach-agent $agt

		$app set packetSize_ 250
		$app set rate_ 100kb
		$app set random_ 0 

		set udp$i $agt
		set cbr$i $app
	}


	# receiver 0 :
	set lm0 [new Agent/Null]
	$ns attach-agent $n1 $lm0

	for {set i 0} {$i < 4} { incr i} {
		global udp$i
		set agent [set udp$i]
		$ns connect $agent $lm0
	}
}


proc start_sim {} {
	global ns cbr0 cbr1 cbr2 cbr3
	
	$ns at 0.0 "$cbr0 start"
	$ns at 0.0 "$cbr1 start"
	$ns at 0.0 "$cbr2 start"
	$ns at 0.0 "$cbr3 start"

}

proc stop_sim {} {
	global ns f cbr0 cbr1 cbr2 cbr3
	$ns at 5.0 "$cbr0 stop"
	$ns at 5.0 "$cbr1 stop"
	$ns at 5.0 "$cbr2 stop"
	$ns at 5.0 "$cbr3 stop"

	$ns at 5.0 "close $f;finish"
}


proc finish {} {
    puts "processing output ..."
    exec awk  { 
	{
	    n[$8]=$8; \
	    if ($1=="-") r[$8]++; \
	    if ($1=="+") s[$8]++; \
	    if ($1=="d") d[$8]++ \
	    }
	END \
	    { 
		printf ("Flow#\t#sent\t#recvd\t#drop\t%%recvd\n"); \
		    for (i in r) \
		    printf ("%d\t%d\t%d\t%d\t%f\n",n[i],s[i],r[i],d[i],r[i]*1.0/s[i])\
		}
    } temp.rands > srr_out.txt
#    exec cat srr_out.txt &
    exit 0
}
proc test_srr {} {
	global  ns n0 n1 f l q argv

	set ns [new Simulator]
	set xx0 [$ns node]
	set xy0 [$ns node]
	set n0 [$ns node]
	set n1 [$ns node]
	set f [open temp.rands w]


	$ns duplex-link $n0 $n1 150kb 1ms SRR

	# trace the bottleneck queue 
	$ns trace-queue $n0 $n1 $f


	#Alternate way for setting parameters for the SRR queue
	set l [$ns get-link $n0 $n1]
	set q [$l queue]

	create_traffic
	set_queue
	start_sim 
	stop_sim
	$ns run
}

global argv arg0

test_srr