# test-fulltcp-delaybox.tcl - NS file transfer with DelayBox # useful constants set PCKTS 10 set FLOWS 10 set NODES 2 # 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 src nodes for {set i 0} {$i < $NODES} {incr i} { set n_src($i) [$ns node] } # create DelayBox nodes set db(0) [$ns DelayBox] set db(1) [$ns DelayBox] # create sink nodes for {set i 0} {$i < $NODES} {incr i} { set n_sink($i) [$ns node] } # setup links $ns duplex-link $db(0) $db(1) 100Mb 1ms DropTail for {set i 0} {$i < $NODES} {incr i} { $ns duplex-link $n_src($i) $db(0) 100Mb 1ms DropTail } for {set i 0} {$i < $NODES} {incr i} { $ns duplex-link $n_sink($i) $db(1) 100Mb 1ms DropTail } # setup tracing set trace_file [open "data-test-fulltcp-delaybox.trq" w] for {set i 0} {$i < $NODES} {incr i} { $ns trace-queue $n_src($i) $db(0) $trace_file $ns trace-queue $n_sink($i) $db(1) $trace_file } $ns trace-queue $db(0) $db(1) $trace_file $ns trace-queue $db(1) $db(0) $trace_file # setup TCP Agents for {set i 0} {$i < $FLOWS} {incr i} { set src($i) [new Agent/TCP/FullTcp] set sink($i) [new Agent/TCP/FullTcp] $src($i) set fid_ $i $sink($i) set fid_ $i } # attach agents to nodes set node_ind 0 for {set i 0} {$i < $FLOWS} {incr i} { $ns attach-agent $n_src($node_ind) $src($i) $ns attach-agent $n_sink($node_ind) $sink($i) incr node_ind if {$node_ind >= $NODES} { set node_ind 0 } } # make the connections for {set i 0} {$i < $FLOWS} {incr i} { $ns connect $src($i) $sink($i) $sink($i) 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 for {set i 0} {$i < $NODES} {incr i} { $db(0) add-rule [$n_src($i) id] [$n_sink($i) id] $recvr_delay $loss_rate \ $recvr_bw $db(1) add-rule [$n_src($i) id] [$n_sink($i) id] $sender_delay $loss_rate \ $sender_bw } $db(0) set-delay-file "db0.txt" $db(1) set-delay-file "db1.txt" proc finish {} { global ns $ns flush-trace $ns halt } # schedule traffic for {set i 0} {$i < $FLOWS} {incr i} { $ns at [expr $i + 0.5] "$src($i) advance $PCKTS" } $ns at 1000.0 "finish" # start the simulation $ns run