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
|