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
|
# db-fulltcp.tcl
#
# Demonstrates a simple Full-TCP file transfer with DelayBox
# setup ns
remove-all-packet-headers; # removes all packet headers
add-packet-header IP TCP; # adds TCP/IP headers
set ns [new Simulator]; # instantiate the simulator
global defaultRNG
$defaultRNG seed 999
# create nodes
set n_src [$ns node]
set db(0) [$ns DelayBox]
set db(1) [$ns DelayBox]
set n_sink [$ns node]
# setup links
$ns duplex-link $db(0) $db(1) 100Mb 1ms DropTail
$ns duplex-link $n_src $db(0) 100Mb 1ms DropTail
$ns duplex-link $n_sink $db(1) 100Mb 1ms DropTail
# trace queues
Trace set show_tcphdr_ 1
set qmonf [open "db-fulltcp.trq" w]
$ns trace-queue $db(0) $db(1) $qmonf
$ns trace-queue $db(1) $db(0) $qmonf
set src [new Agent/TCP/FullTcp]
set sink [new Agent/TCP/FullTcp]
$src set fid_ 1
$sink set fid_ 1
# attach agents to nodes
$ns attach-agent $n_src $src
$ns attach-agent $n_sink $sink
# make the connection
$ns connect $src $sink
$sink listen
# create random variables
set recvr_delay [new RandomVariable/Uniform]; # delay 1-20 ms
$recvr_delay set min_ 1
$recvr_delay set max_ 20
set sender_delay [new RandomVariable/Uniform]; # delay 20-100 ms
$sender_delay set min_ 20
$sender_delay set max_ 100
set recvr_bw [new RandomVariable/Constant]; # bw 100 Mbps
$recvr_bw set val_ 100
set sender_bw [new RandomVariable/Uniform]; # bw 1-20 Mbps
$sender_bw set min_ 1
$sender_bw set max_ 20
set loss_rate [new RandomVariable/Uniform]; # loss 0-1% loss
$loss_rate set min_ 0
$loss_rate set max_ 0.01
# setup rules for DelayBoxes
$db(0) add-rule [$n_src id] [$n_sink id] $recvr_delay $loss_rate $recvr_bw
$db(1) add-rule [$n_src id] [$n_sink id] $sender_delay $loss_rate $sender_bw
# output delays to files
$db(0) set-delay-file "db-fulltcp-db0.out"
$db(1) set-delay-file "db-fulltcp-db1.out"
# schedule traffic
$ns at 0.5 "$src advance 10000"
$ns at 1000.0 "$db(0) close-delay-file; $db(1) close-delay-file; exit 0"
# start the simulation
$ns run
|