# test-packmime.tcl # # Simulation script # # useful variables set rate 5; # number of new connections/s set length 30; # length of traced simulation (s) set window 16; # max TCP window size in KB set bw 100; # link speed (Mbps) set warmup 30; # warmup interval (s) set duration [expr $warmup + $length]; # total simulation time (s) # useful constants set CLIENT 0 set SERVER 1 #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # 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 Topology #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # $bw Mb # client -------- server # cloud 0ms cloud # # n(0) n(1) # create nodes set n(0) [$ns node] set n(1) [$ns node] # create link $ns duplex-link $n(0) $n(1) ${bw}Mb 0ms DropTail # set queue buffer sizes (in packets) (default is 20 packets) $ns queue-limit $n(0) $n(1) 200 $ns queue-limit $n(1) $n(0) 200 # setup TCP Agent/TCP/FullTcp set segsize_ 1460; # set MSS to 1460 bytes Agent/TCP set window [expr round ($window * 1024.0 / 1500.0)] #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Setup PackMime #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: set pm [new PackMimeHTTP] $pm set-client $n(0); # name $n(0) as client $pm set-server $n(1); # name $n(1) as server $pm set-rate $rate; # new connections per second # let PackMime setup random variables # record HTTP statistics $pm set-outfile "data-test-packmime-min.dat" #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Packet Tracing #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: proc trace {} { global ns n # setup packet tracing Trace set show_tcphdr_ 1 set qmonf [open "|gzip > data-test-packmime-min.trq.gz" w] $ns trace-queue $n(0) $n(1) $qmonf $ns trace-queue $n(1) $n(0) $qmonf } #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Cleanup #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: proc finish {} { global ns pm $ns flush-trace # delete PackMime delete $pm # delete Simulator delete $ns exit 0 } #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Simulation Schedule #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: $ns at 0.0 "$pm start" $ns at $warmup "trace" $ns at $duration "$pm stop" $ns at [expr $duration + 1] "finish" #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Start the Simulation #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: $ns run