📄 http-ex.tcl
字号:
#!/bin/sh# the next line finds ns \nshome=`dirname $0`; [ ! -x $nshome/ns ] && [ -x ../../ns ] && nshome=../..# the next line starts ns \export nshome; exec $nshome/ns "$0" "$@"if [info exists env(nshome)] { set nshome $env(nshome)} elseif [file executable ../../ns] { set nshome ../..} elseif {[file executable ./ns] || [file executable ./ns.exe]} { set nshome "[pwd]"} else { puts "$argv0 cannot find ns directory" exit 1}set env(PATH) "$nshome/bin:$env(PATH)"#source $nshome/tcl/lan/ns-lan.tclsource $nshome/tcl/http/http.tclset opt(trsplit) "-"set opt(tr) outset opt(namtr) ""set opt(stop) 20set opt(node) 3set opt(seed) 0set opt(bw) 1.8Mbset opt(delay) 1msset opt(ll) LLset opt(ifq) Queue/DropTailset opt(mac) Mac/Csma/Cdset opt(chan) Channelset opt(tcp) TCP/Renoset opt(sink) TCPSink# number of traffic source (-1 means the number of nodes $opt(node))set opt(telnet) 0set opt(cbr) 0set opt(ftp) 0set opt(http) -1set opt(webModel) $nshome/tcl/http/dataset opt(maxConn) 4set opt(phttp) 0if {$argc == 0} { puts "Usage: $argv0 \[-stop sec\] \[-seed value\] \[-node numNodes\]" puts "\t\[-tr tracefile\] \[-g\]" puts "\t\[-ll lltype\] \[-ifq qtype\] \[-mac mactype\]" puts "\t\[-bw $opt(bw)] \[-delay $opt(delay)\]" exit 1}proc getopt {argc argv} { global opt for {set i 0} {$i < $argc} {incr i} { set key [lindex $argv $i] if ![string match {-*} $key] continue set key [string range $key 1 end] set val [lindex $argv [incr i]] set opt($key) $val if [string match {-[A-z]*} $val] { incr i -1 continue } switch $key { ll { set opt($key) LL/$val } ifq { set opt($key) Queue/$val } mac { set opt($key) Mac/$val } } }}proc finish {} { global env nshome pwd global ns opt trfd $ns flush-trace close $trfd foreach key {node bw delay ll ifq mac seed} { lappend comment $opt($key) } exec perl $nshome/bin/trsplit -tt r -pt tcp -c "$comment" \ $opt(trsplit) $opt(tr) >& $opt(tr)-bw exec head -1 $opt(tr)-bw >@ stdout if [info exists opt(g)] { catch "exec xgraph -nl -M -display $env(DISPLAY) \ [lsort [glob $opt(tr).*]] &" } exit 0}proc create-trace {} { global ns opt if {[info exists opt(f)] || [info exists opt(g)]} { set opt(trsplit) "-f" } if [file exists $opt(tr)] { exec touch $opt(tr). eval exec rm -f $opt(tr) $opt(tr)-bw [glob $opt(tr).*] } set trfd [open $opt(tr) w] $ns trace-all $trfd if {$opt(namtr) != ""} { $ns namtrace-all [open $opt(namtr) w] } return $trfd}proc create-topology {} { global ns opt global lan node source # Nodes: # 0 a router from LAN to external network # 1 to n nodes on the LAN # n+1 node outside of the LAN, set num $opt(node) set node(0) [$ns node] for {set i 1} {$i <= $num} {incr i} { set node($i) [$ns node] lappend nodelist $node($i) } set node($i) [$ns node] $ns duplex-link $node(0) $node($i) 10Mb 50ms DropTail set lan [$ns newLan $nodelist $opt(bw) $opt(delay) -llType $opt(ll) \ -ifqType $opt(ifq) -macType $opt(mac)] $lan addNode $node(0) $opt(bw) $opt(delay) set ifq0 [[$lan netIface $node(0)] set ifq_] $ifq0 set limit_ [expr $opt(node) * [$ifq0 set limit_]]}proc create-source {} { global ns opt global lan node source if {$opt(webModel) != ""} { create-webModel $opt(webModel) } # make node($num+1) the source of all connection set src $node(0) foreach ttype {http ftp cbr telnet} { set num $opt($ttype) if {$num < 0} { set num $opt(node) } for {set i 0} {$i < $num} {incr i} { set dst $node([expr 1 + $i % $opt(node)]) new_$ttype $i $src $dst } }}proc create-webModel path { Http setCDF rvClientTime 0# Http setCDF rvClientTime $path/HttpThinkTime.cdf Http setCDF rvReqLen $path/HttpRequestLength.cdf Http setCDF rvNumImg $path/HttpConnections.cdf set rv [Http setCDF rvRepLen $path/HttpReplyLength.cdf] Http setCDF rvImgLen $rv}proc new_http {i server client} { global ns opt http webm set webopt "-srcType $opt(tcp) -snkType $opt(sink) -phttp $opt(phttp) -maxConn $opt(maxConn)" set http($i) [eval new Http $ns $client $server $webopt] $ns at [expr 0 + $i/1000.0] "$http($i) start"}proc new_cbr {i src dst} { global ns opt cbr set cbr($i) [$ns create-connection CBR $src Null $dst 0] $ns at [expr 0.0001 + $i/1000.0] "$cbr($i) start"}proc new_ftp {i src dst} { global ns opt ftp set tcp [$ns create-connection $opt(tcp) $src $opt(sink) $dst 0] set ftp($i) [$tcp attach-source FTP] $ns at [expr 0.0002 + $i/1000.0] "$ftp($i) start"}proc new_telnet {i src dst} { global ns opt telnet set tcp [$ns create-connection $opt(tcp) $src $opt(sink) $dst 0] set telnet($i) [$tcp attach-source Telnet] $ns at [expr 0.0003 + $i/1000.0] "$telnet($i) start"}## MAIN ##getopt $argc $argvif {$opt(seed) >= 0} { ns-random $opt(seed) }if [info exists opt(qsize)] { Queue set limit_ $opt(qsize) }set ns [new Simulator]set trfd [create-trace]create-topology$lan trace $ns $trfdcreate-source$ns at $opt(stop) "finish"$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -