⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test-suite-webcache.tcl

📁 NS-2.28的802.11e协议扩展源代码
💻 TCL
📖 第 1 页 / 共 4 页
字号:
# Test suite for HTTP server, client, proxy cache.## Also tests TcpApp, which is an Application used to transmit # application-level data. Because current TCP isn't capable of this,# we build this functionality based on byte-stream model of underlying # TCP connection.# # $Header: /nfs/jade/vint/CVSROOT/ns-2/tcl/test/test-suite-webcache.tcl,v 1.14 1999/09/20 17:42:47 haoboy Exp $#----------------------------------------------------------------------# Related Files#----------------------------------------------------------------------source misc.tclsource topologies.tcl#----------------------------------------------------------------------# Misc setup#----------------------------------------------------------------------set tcl_precision 10#----------------------------------------------------------------------# Topologies for cache testing#----------------------------------------------------------------------# Simplest topology: 1 client + 1 cache + 1 serverClass Topology/cache0 -superclass SkelTopologyTopology/cache0 instproc init ns {	$self next	$self instvar node_	set node_(c) [$ns node]	set node_(e) [$ns node]	set node_(s) [$ns node]	$ns duplex-link $node_(s) $node_(e) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e) $node_(c) 10Mb 2ms DropTail	$ns duplex-link-op $node_(c) $node_(e) orient right	$ns duplex-link-op $node_(e) $node_(s) orient right}# Hierarchical cache, 1 server + 7 cache + 4 clients, server linked to # a top-level cacheClass Topology/cache2 -superclass SkelTopologyTopology/cache2 instproc init ns {	$self next	$self instvar node_	set node_(c0) [$ns node]	set node_(c1) [$ns node]	set node_(c2) [$ns node]	set node_(c3) [$ns node]	set node_(e0) [$ns node]	set node_(e1) [$ns node]	set node_(e2) [$ns node]	set node_(e3) [$ns node]	set node_(e4) [$ns node]	set node_(e5) [$ns node]	set node_(e6) [$ns node]	set node_(s0) [$ns node]	# between top-level cache: OC3	$ns duplex-link $node_(e0) $node_(e1) 155Mb 100ms DropTail	# server to top-level cache and inside a cache hierarchy: T1	$ns duplex-link $node_(s0) $node_(e0) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e0) $node_(e2) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e0) $node_(e3) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e1) $node_(e4) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e1) $node_(e5) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e2) $node_(e6) 10Mb 2ms DropTail	# client to caches: 10Mb ethernet	$ns duplex-link $node_(e2) $node_(c0) 10Mb 2ms DropTail	$ns duplex-link $node_(e6) $node_(c1) 10Mb 2ms DropTail	$ns duplex-link $node_(e4) $node_(c2) 10Mb 2ms DropTail	$ns duplex-link $node_(e1) $node_(c3) 10Mb 2ms DropTail	$ns duplex-link-op $node_(s0) $node_(e0) orient right	$ns duplex-link-op $node_(e0) $node_(e1) orient right	$ns duplex-link-op $node_(e0) $node_(e2) orient left-down	$ns duplex-link-op $node_(e0) $node_(e3) orient right-down	$ns duplex-link-op $node_(e2) $node_(e6) orient down	$ns duplex-link-op $node_(c0) $node_(e2) orient right	$ns duplex-link-op $node_(c1) $node_(e6) orient right	$ns duplex-link-op $node_(e1) $node_(e4) orient left-down	$ns duplex-link-op $node_(e1) $node_(e5) orient right-down	$ns duplex-link-op $node_(e4) $node_(c2) orient down	$ns duplex-link-op $node_(e1) $node_(c3) orient right	$self checkConfig $class $ns}# Hierarchical cache, 1 server + 7 cache + 4 clients, server linked to a # second-level cache.Class Topology/cache3 -superclass SkelTopologyTopology/cache3 instproc init ns {	$self next	$self instvar node_	set node_(c0) [$ns node]	set node_(c1) [$ns node]	set node_(c2) [$ns node]	set node_(c3) [$ns node]	set node_(e0) [$ns node]	set node_(e1) [$ns node]	set node_(e2) [$ns node]	set node_(e3) [$ns node]	set node_(e4) [$ns node]	set node_(e5) [$ns node]	set node_(e6) [$ns node]	set node_(s0) [$ns node]	# between top-level cache: OC3	$ns duplex-link $node_(e0) $node_(e1) 155Mb 100ms DropTail	# server to top-level cache and inside a cache hierarchy: T1	$ns duplex-link $node_(s0) $node_(e5) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e0) $node_(e2) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e0) $node_(e3) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e1) $node_(e4) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e1) $node_(e5) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e2) $node_(e6) 10Mb 2ms DropTail	# client to caches: 10Mb ethernet	$ns duplex-link $node_(e2) $node_(c0) 10Mb 2ms DropTail	$ns duplex-link $node_(e6) $node_(c1) 10Mb 2ms DropTail	$ns duplex-link $node_(e4) $node_(c2) 10Mb 2ms DropTail	$ns duplex-link $node_(e1) $node_(c3) 10Mb 2ms DropTail	$ns duplex-link-op $node_(e5) $node_(s0) orient right	$ns duplex-link-op $node_(e0) $node_(e1) orient right	$ns duplex-link-op $node_(e0) $node_(e2) orient left-down	$ns duplex-link-op $node_(e0) $node_(e3) orient right-down	$ns duplex-link-op $node_(e2) $node_(e6) orient down	$ns duplex-link-op $node_(c0) $node_(e2) orient right	$ns duplex-link-op $node_(c1) $node_(e6) orient right	$ns duplex-link-op $node_(e1) $node_(e4) orient left-down	$ns duplex-link-op $node_(e1) $node_(e5) orient right-down	$ns duplex-link-op $node_(e4) $node_(c2) orient down	$ns duplex-link-op $node_(e1) $node_(c3) orient right	$self checkConfig $class $ns}# Two level hierarchical cache. 1 server + 1 TLC + n 2nd caches with one # bottleneck link connecting TCL to other caches + n clientsClass Topology/BottleNeck -superclass SkelTopologyClass Topology/BottleNeck -superclass SkelTopologyTopology/BottleNeck instproc init { ns } {	$self next 	$self instvar node_ 	global opts	if [info exists opts(num-2nd-cache)] {		set n $opts(num-2nd-cache)	} else {		error "Topology/BottleNeck requires option num-2nd-cache"	}	set node_(s0) [$ns node]	# TLC is node e0	for {set i 0} {$i <= $n} {incr i} {		set node_(e$i) [$ns node]	}	# We create clients separately so we have consecutive ids for all 	# clients	for {set i 0} {$i < $n} {incr i} {		set node_(c$i) [$ns node]	}	# Between TLC and server: T1#	$ns duplex-link $node_(e$n) $node_(s0) 1.5Mb 100ms DropTail	# Server attached to a client via a LAN	$ns duplex-link $node_(e0) $node_(s0) 1.5Mb 100ms DropTail	#$ns duplex-link $node_(e0) $node_(s0) 10Mb 2ms DropTail	# Bottleneck link	$self instvar dummy_	set dummy_ [$ns node]	$ns duplex-link $node_(e$n) $dummy_ 1.5Mb 50ms DropTail	for {set i 0} {$i < $n} {incr i} {		$ns duplex-link $node_(e$i) $dummy_ 1.5Mb 50ms DropTail		$ns duplex-link $node_(c$i) $node_(e$i) 10Mb 2ms DropTail	}	$self checkConfig $class $ns}Topology/BottleNeck instproc start-monitor { ns } {	$self instvar qmon_ node_ dummy_	# Traffic between server and its primary cache	set qmon_(svr_f) [$ns monitor-queue $node_(s0) $node_(e0) ""]	set qmon_(svr_t) [$ns monitor-queue $node_(e0) $node_(s0) ""]	global opts	set n $opts(num-2nd-cache)	# Traffic between TLC and all others	set qmon_(btnk_f) [$ns monitor-queue $node_(e$n) $dummy_ ""]	set qmon_(btnk_t) [$ns monitor-queue $dummy_ $node_(e$n) ""]	# Traffic for all the rest links	for {set i 0} {$i < $n} {incr i} {		set qmon_(e${i}_d_f) [$ns monitor-queue $node_(e$i) $dummy_ ""]		set qmon_(e${i}_d_t) [$ns monitor-queue $dummy_ $node_(e$i) ""]		set qmon_(e${i}_c${i}_f) \			[$ns monitor-queue $node_(e$i) $node_(c$i) ""]		set qmon_(e${i}_c${i}_t) \			[$ns monitor-queue $node_(c$i) $node_(e$i) ""]	}	#puts "Monitors started at time [$ns now]"}Topology/BottleNeck instproc mon-stat {} {	$self instvar qmon_	set total_bw 0	foreach n [array names qmon_] {		set total_bw [expr $total_bw + \			double([$qmon_($n) set bdepartures_])]	}	set svr_bw [expr double([$qmon_(svr_f) set bdepartures_]) + \			double([$qmon_(svr_t) set bdepartures_])]	set btnk_bw [expr double([$qmon_(btnk_f) set bdepartures_]) + \			double([$qmon_(btnk_t) set bdepartures_])]	return [list total_bw $total_bw svr_bw $svr_bw btnk_bw $btnk_bw]}## Three level hierarchical cache, binary tree. #Class Topology/cache4 -superclass SkelTopologyTopology/cache4 instproc init { ns } {	$self next	$self instvar node_	# server attached to a leaf cache	set node_(s0) [$ns node]	# TLC is node e0	for {set i 0} {$i <= 6} {incr i} {		set node_(e$i) [$ns node]	}	# All clients attached to leaf caches	for {set i 0} {$i <= 3} {incr i} {		set node_(c$i) [$ns node]	}	# Bottleneck link between TLC and other caches	set dummy [$ns node]	$ns duplex-link $node_(e0) $dummy 100Mb 1ms DropTail	$ns duplex-link $dummy $node_(e1) 1.5Mb 50ms DropTail	$ns duplex-link $dummy $node_(e2) 1.5Mb 50ms DropTail	$ns duplex-link $node_(e1) $node_(e3) 1.5Mb 10ms DropTail	$ns duplex-link $node_(e1) $node_(e4) 1.5Mb 10ms DropTail	$ns duplex-link $node_(e2) $node_(e5) 1.5Mb 10ms DropTail	$ns duplex-link $node_(e2) $node_(e6) 1.5Mb 10ms DropTail	$ns duplex-link $node_(e3) $node_(c0) 10Mb 1ms DropTail	$ns duplex-link $node_(e4) $node_(c1) 10Mb 1ms DropTail	$ns duplex-link $node_(e5) $node_(c2) 10Mb 1ms DropTail	$ns duplex-link $node_(e6) $node_(c3) 10Mb 1ms DropTail	$ns duplex-link $node_(s0) $node_(e3) 10Mb 10ms DropTail		$ns duplex-link-op $node_(e0) $dummy orient down	$ns duplex-link-op $dummy $node_(e1) orient left-down	$ns duplex-link-op $dummy $node_(e2) orient right-down	$ns duplex-link-op $node_(e1) $node_(e3) orient left-down	$ns duplex-link-op $node_(e1) $node_(e4) orient right-down	$ns duplex-link-op $node_(e2) $node_(e5) orient left-down	$ns duplex-link-op $node_(e2) $node_(e6) orient right-down	$ns duplex-link-op $node_(e3) $node_(c0) orient down	$ns duplex-link-op $node_(e4) $node_(c1) orient down	$ns duplex-link-op $node_(e5) $node_(c2) orient down	$ns duplex-link-op $node_(e6) $node_(c3) orient down	$ns duplex-link-op $node_(s0) $node_(e3) orient right	$self checkConfig $class $ns}# Same as Topology/cache4, except adding a dynamic linksClass Topology/cache4d -superclass Topology/cache4Topology/cache4d instproc init { ns } {	$self next $ns	$self instvar node_	$ns rtmodel-at 500 down $node_(s0) $node_(e3)	$ns rtmodel-at 1000 up $node_(s0) $node_(e3)	$self checkConfig $class $ns}# 2-level topology with direct links from server to every client# Compare invalidation vs ttl with direct requestClass Topology/cache5 -superclass SkelTopologyTopology/cache5 instproc init { ns } {	$self next	$self instvar node_	global opts	if [info exists opts(num-2nd-cache)] {		set n $opts(num-2nd-cache)	} else {		error "Topology/BottleNeck requires option num-2nd-cache"	}	set node_(s0) [$ns node]	# TLC is node e0	for {set i 0} {$i <= $n} {incr i} {		set node_(e$i) [$ns node]	}	# We create clients separately so we have consecutive ids for all 	# clients	for {set i 0} {$i < $n} {incr i} {		set node_(c$i) [$ns node]	}	set sn [$ns node]	;# Dummy node for bottleneck link	$ns duplex-link $node_(e$n) $sn 1.5Mb 50ms DropTail	# Traffic on the duplex link. 	$self instvar qmon_	set qmon_(btnk_f) [$ns monitor-queue $node_(e$n) $sn ""]	set qmon_(btnk_t) [$ns monitor-queue $sn $node_(e$n) ""]	for {set i 0} {$i < $n} {incr i} {		$ns duplex-link $node_(e$i) $sn 1.5Mb 50ms DropTail		$ns duplex-link $node_(c$i) $node_(e$i) 10Mb 2ms DropTail		# Server attached to all clients, but its parent cache is e0		# delay to server is proportional to its distance to e0		set delay [expr 5 + $i*5]ms		$ns duplex-link $node_(e$i) $node_(s0) 1.5Mb $delay DropTail		set qmon_(svr_f$i) [$ns monitor-queue $node_(s0) $node_(e$i) ""]		set qmon_(svr_t$i) [$ns monitor-queue $node_(e$i) $node_(s0) ""]	}	$self checkConfig $class $ns}## Simple 2 node topology testing SimpleTcp and TcpApp#Class Topology/2node -superclass SkelTopologyTopology/2node instproc init { ns } {	$self next	$self instvar node_	set node_(0) [$ns node]	set node_(1) [$ns node]	$ns duplex-link $node_(0) $node_(1) 1.5Mb 10ms DropTail	$ns duplex-link-op $node_(0) $node_(1) orient right	$self checkConfig $class $ns}## 3 node linear topology testing SimpleTcp and TcpApp#Class Topology/3node -superclass SkelTopologyTopology/3node instproc init { ns } {	$self next 	$self instvar node_	set node_(0) [$ns node]	set node_(1) [$ns node]	set node_(2) [$ns node]	$ns duplex-link $node_(0) $node_(1) 1.5Mb 50ms DropTail	$ns duplex-link $node_(1) $node_(2) 1.5Mb 50ms DropTail	$ns duplex-link-op $node_(0) $node_(1) orient right	$ns duplex-link-op $node_(1) $node_(2) orient right}## 5 node topology testing HTTP cache, with 3 clients, one server and # one cache#Class Topology/5node -superclass SkelTopologyTopology/5node instproc init { ns } {	$self next	$self instvar node_	for {set i 0} {$i < 5} {incr i} {		set node_($i) [$ns node]	}	$ns duplex-link $node_(3) $node_(4) 1Mb 50ms DropTail	$ns duplex-link $node_(0) $node_(3) 1Mb 50ms DropTail	$ns duplex-link $node_(1) $node_(3) 1Mb 50ms DropTail	$ns duplex-link $node_(2) $node_(3) 1Mb 50ms DropTail	$ns duplex-link-op $node_(4) $node_(3) orient right	$ns duplex-link-op $node_(0) $node_(3) orient down	$ns duplex-link-op $node_(1) $node_(3) orient left	$ns duplex-link-op $node_(2) $node_(3) orient up}#----------------------------------------------------------------------# Section 1: Base test class#----------------------------------------------------------------------Class TestTest instproc init-instvar v {	set cl [$self info class]	while { "$cl" != "" } {		foreach c $cl {			if ![catch "$c set $v" val] {				$self set $v $val				return			}		}		set parents ""		foreach c $cl {			if { $cl != "Object" } {				set parents "$parents [$c info superclass]"			}		}		set cl $parents	}}Test instproc init {} {	$self instvar ns_ trace_ net_ defNet_ testName_ node_ test_ topo_	set ns_ [new Simulator -multicast on]	set cls [$self info class]	set cls [split $cls /]	set test_ [lindex $cls [expr [llength $cls] - 1]]	global opts	ns-random $opts(ns-random-seed)	if $opts(nam-trace-all) {		#set trace_ [open "$test_" w]		# test-all-template1 requires data file to be temp.rands :(		set trace_ [open "temp.rands" w]		$ns_ trace-all $trace_	}	if ![info exists opts(net)] {		set net_ $defNet_	} else {		set net_ $opts(net)	}	if ![Topology/$defNet_ info subclass Topology/$net_] {		global argv0		puts "$argv0: cannot run test $test_ over topology $net_"		exit 1	}	set topo_ [new Topology/$net_ $ns_]	foreach i [$topo_ array names node_] {		# This would be cool, but lets try to be compatible		# with test-suite.tcl as far as possible.		#		# $self instvar $i		# set $i [$topo_ node? $i]		#		set node_($i) [$topo_ node? $i]	}	if {$net_ == $defNet_} {		set testName_ "$test_"	} else {		set testName_ "$test_:$net_"	}}# Use this so derived class would have a chance to overwrite the default net# of parent classesTest instproc set-defnet { defnet } {	$self instvar defNet_	if ![info exists defNet_] {		set defNet_ $defnet	}}Test instproc inherit-set { name val } {	$self instvar $name	if ![info exists $name] {		set $name $val	}}Test instproc write-testconf { file } {	$self instvar test_ net_	puts $file "# TESTNAME: $test_"	puts $file "# TOPOLOGY: $net_"	global opts	foreach n [lsort [array names opts]] {		# XXX Remove this after validating existing traces		if {$n == "quiet"} { continue }		puts $file "# $n: $opts($n)" 	}}Test instproc set-routing {} {}Test instproc set-members {} {}Test instproc finish {} {	$self instvar ns_ trace_	if [info exists trace_] {		$ns_ flush-trace		close $trace_	}	exit 0}Test instproc run {} {	$self instvar finishTime_ ns_ trace_	global opts	if $opts(nam-trace-all) {		$self write-testconf $trace_	}	$self set-routing	$self set-members	$ns_ at $finishTime_ "$self finish"	$ns_ run}# option processing copied from John's ~ns/tcl/ex/rbp_demo.tclproc default_options {} {	global opts opt_wants_arg raw_opt_info	# raw_opt_info can be set in user's script	while {$raw_opt_info != ""} {		if {![regexp "^\[^\n\]*\n" $raw_opt_info line]} {			break		}		regsub "^\[^\n\]*\n" $raw_opt_info {} raw_opt_info		set line [string trim $line]		if {[regexp "^\[ \t\]*#" $line]} {			continue		}		if {$line == ""} {			continue		} elseif [regexp {^([^ ]+)[ ]+([^ ]+)$} $line dummy key value] {			set opts($key) $value			set opt_wants_arg($key) 1		} elseif [regexp {^([^ ]+)[ ]*$} $line dummy key] {			# So we don't need to assign opt($key)			set opt_wants_arg($key) 1		} else {			set opt_wants_arg($key) 0			error "unknown stuff \"$line\" in raw_opt_info"		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -