File: pm-delaybox.tcl

package info (click to toggle)
ns2 2.35%2Bdfsg-2.1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 78,780 kB
  • ctags: 27,490
  • sloc: cpp: 172,923; tcl: 107,130; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 816; awk: 525; csh: 355
file content (130 lines) | stat: -rw-r--r-- 3,909 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
# pm-delaybox.tcl
#
# Demonstrates the use of PackMime with DelayBox

# useful constants
set CLIENT 0
set SERVER 1

set rate 32
set run 2
set stoptime 25

# setup simulator
remove-all-packet-headers;            # removes all packet headers
add-packet-header IP TCP;             # adds TCP/IP headers
set ns_ [new Simulator];              # instantiate the simulator
$ns_ use-scheduler Heap;              # use the Heap scheduler

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Setup network links and nodes
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

# build end nodes
set client [$ns_ node]
set server [$ns_ node]

# build delayboxes and links
set db_(0) [$ns_ DelayBox]
set db_(1) [$ns_ DelayBox]
$ns_ duplex-link $db_(0) $db_(1) 10Mb 1ms DropTail
$ns_ duplex-link $client $db_(0) 10Mb 1ms DropTail
$ns_ duplex-link $server $db_(1) 10Mb 1ms DropTail

# trace queues
Trace set show_tcphdr_ 1
set db_qmonf [open "pm-delaybox-db.trq" w]
$ns_ trace-queue $db_(0) $db_(1) $db_qmonf
$ns_ trace-queue $db_(1) $db_(0) $db_qmonf

set cli_qmonf [open "pm-delaybox-cli.trq" w]
$ns_ trace-queue $client $db_(0) $cli_qmonf
$ns_ trace-queue $db_(0) $client $cli_qmonf

set srv_qmonf [open "pm-delaybox-srv.trq" w]
$ns_ trace-queue $server $db_(1) $srv_qmonf
$ns_ trace-queue $db_(1) $server $srv_qmonf

# print drops
$db_(0) set-debug 1
$db_(1) set-debug 1

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#  Setup PackMime Traffic
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

# set rate per PackMime
set rate_ $rate

# create PackMime and assign clients and server clouds
set pm_ [new PackMimeHTTP]
$pm_ set-client $client
$pm_ set-server $server
$pm_ set-TCP Newreno

# create RNGs (appropriate RNG seeds will be assigned automatically)
for {set i 0} {$i < 5} {incr i} {
    set rng_($i) [new RNG]
    # advance the seeds for different experiment runs
    for {set j 1} {$j < $run} {incr j} {
	$rng_($i) next-substream
    }
}

# create random variables
set req_size [new RandomVariable/PackMimeHTTPFileSize $rate_ $CLIENT]
set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate_ $SERVER]
set client_delay [new RandomVariable/PackMimeHTTPXmit $rate_ $CLIENT]
set server_delay [new RandomVariable/PackMimeHTTPXmit $rate_ $SERVER]
set client_bw [new RandomVariable/Constant];      # bw 100 Mbps
$client_bw set val_ 100
set server_bw [new RandomVariable/Uniform];      # bw 1-20 Mbps
$server_bw set min_ 1
$server_bw set max_ 20
set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate_]
set loss_rate [new RandomVariable/Uniform];    # loss at each DB
$loss_rate set min_ 0
$loss_rate set max_ 0.001
set zero_loss_rate [new RandomVariable/Constant];
$zero_loss_rate set val_ 0

# assign RNGs to RandomVariables
$req_size use-rng $rng_(0)
$rsp_size use-rng $rng_(1)
$client_delay use-rng $rng_(2)
$server_delay use-rng $rng_(2)
$client_bw use-rng $rng_(3)
$server_bw use-rng $rng_(3)
$flow_arrive use-rng $rng_(4)

# setup rules for DelayBoxes
$db_(0) add-rule [$client id] [$server id] $client_delay $loss_rate \
    $client_bw
$db_(0) add-rule [$server id] [$client id] $client_delay $zero_loss_rate \
    $client_bw
$db_(1) add-rule [$client id] [$server id] $server_delay $loss_rate \
    $server_bw
$db_(1) add-rule [$server id] [$client id] $server_delay $zero_loss_rate \
    $server_bw

# output delays to files
$db_(0) set-delay-file "pm-delaybox-db0.out"
$db_(1) set-delay-file "pm-delaybox-db1.out"

# set PackMime variables
$pm_ set-rate $rate_
$pm_ set-req_size $req_size
$pm_ set-rsp_size $rsp_size
$pm_ set-flow_arrive $flow_arrive
# record HTTP statistics
$pm_ set-outfile "pm-delaybox.dat"

#::::::::::::::::::
# Schedule Traffic 
#::::::::::::::::::

$ns_ at 0.0 "$pm_ start"
$ns_ at $stoptime "$pm_ stop; $db_(0) close-delay-file; $db_(1) close-delay-file; exit 0"

# start the simulation
$ns_ run