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

📄 ns-source.tcl

📁 diff serve for ns-2, work for version 2.29
💻 TCL
字号:
## Copyright (c) 1996 Regents of the University of California.# All rights reserved.# # Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions# are met:# 1. Redistributions of source code must retain the above copyright#    notice, this list of conditions and the following disclaimer.# 2. Redistributions in binary form must reproduce the above copyright#    notice, this list of conditions and the following disclaimer in the#    documentation and/or other materials provided with the distribution.# 3. All advertising materials mentioning features or use of this software#    must display the following acknowledgement:# 	This product includes software developed by the MASH Research# 	Group at the University of California Berkeley.# 4. Neither the name of the University nor of the Research Group may be#    used to endorse or promote products derived from this software without#    specific prior written permission.# # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF# SUCH DAMAGE.## @(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcl/lib/ns-source.tcl,v 1.25 2000/11/01 21:47:59 xuanc Exp $##  NOTE:  Could consider renaming this file to ns-app.tcl and moving the#  backward compatible code to ns-compat.tcl#set ns_telnet(interval) 1000ms#set ns_bursty(interval) 0#set ns_bursty(burst-size) 2#set ns_message(packet-size) 40Class Application/FTP -superclass ApplicationApplication/FTP instproc init {} {	$self next}Application/FTP instproc start {} {        [$self agent] set_apptype 27	[$self agent] send -1}# Causes TCP to send no more new data.Application/FTP instproc stop {} {	[$self agent] advance 0	[$self agent] close}Application/FTP instproc send {nbytes} {	[$self agent] send $nbytes}# For sending packets.  Sends $pktcnt packets.Application/FTP instproc produce { pktcnt } {	[$self agent] advance $pktcnt}# For sending packets.  Sends $pktcnt more packets.Application/FTP instproc producemore { pktcnt } {	[$self agent] advanceby $pktcnt}# Backward compatibilityApplication/Traffic instproc set args {	$self instvar packetSize_ rate_	if { [lindex $args 0] == "packet_size_" } {		if { [llength $args] == 2 } {			set packetSize_ [lindex $args 1]			return		} elseif { [llength $args] == 1 } {			return $packetSize_		}	}	eval $self next $args}# Helper function to convert rate_ into an interval_#Hicked to generate pulse UDP traffic (seperate rate_ and interval_).Application/Traffic/CBR instproc set args {	$self instvar packetSize_ rate_	if { [lindex $args 0] == "interval_" } {		if { [llength $args] == 2 } {			set ns_ [Simulator instance]			set interval_ [$ns_ delay_parse [lindex $args 1]]			$self set rate_ [expr $packetSize_ * 8.0/$interval_]			return		} elseif { [llength $args] == 1 } {			return [expr $packetSize_ * 8.0/$rate_]		}	}	eval $self next $args}## Below are backward compatible components#Class Agent/CBR -superclass Agent/UDPClass Agent/CBR/UDP -superclass Agent/UDPClass Agent/CBR/RTP -superclass Agent/RTPClass Agent/CBR/UDP/SA -superclass Agent/SAAgent/SA instproc attach-traffic tg {	$tg attach-agent $self	eval $self cmd attach-traffic $tg}Agent/CBR/UDP instproc attach-traffic tg {	$self instvar trafgen_	$tg attach-agent $self	set trafgen_ $tg}Agent/CBR/UDP instproc done {} { }Agent/CBR/UDP instproc start {} {	$self instvar trafgen_	$trafgen_ start}Agent/CBR/UDP instproc stop {} {	$self instvar trafgen_	$trafgen_ stop}Agent/CBR/UDP instproc advance args {	$self instvar trafgen_	eval $trafgen_ advance $args}Agent/CBR/UDP instproc advanceby args {	$self instvar trafgen_	eval $trafgen_ advanceby $args}Agent/CBR instproc init {} {	$self next	$self instvar trafgen_ interval_ random_ packetSize_ maxpkts_	# The following used to be in ns-default.tcl	set packetSize_ 210	set random_ 0	set maxpkts_ 268435456		set interval_ 0.00375	set trafgen_ [new Application/Traffic/CBR]	$trafgen_ attach-agent $self	# Convert packetSize_ and interval_ to trafgen_ rate_	$trafgen_ set rate_ [expr $packetSize_ * 8.0/ $interval_]	$trafgen_ set random_ [$self set random_]	$trafgen_ set maxpkts_ [$self set maxpkts_]	$trafgen_ set packetSize_ [$self set packetSize_]	# The line below is needed for backward compat with v1 test scripts         if {[Simulator set nsv1flag] == 0} {         	    puts "using backward compatible Agent/CBR; use Application/Traffic/CBR instead"	}    }Agent/CBR instproc done {} { }Agent/CBR instproc start {} {	$self instvar trafgen_	$trafgen_ start}Agent/CBR instproc stop {} {	$self instvar trafgen_	$trafgen_ stop}Agent/CBR instproc advance args {	$self instvar trafgen_	eval $trafgen_ advance $args}Agent/CBR instproc advanceby args {	$self instvar trafgen_	eval $trafgen_ advanceby $args}# Catches parameter settings for overlying traffic generator objectAgent/CBR instproc set args {	$self instvar interval_ random_ packetSize_ maxpkts_ trafgen_	if { [info exists trafgen_] } {		if { [lindex $args 0] == "packetSize_" } {			if { [llength $args] == 2 } {				$trafgen_ set packetSize_ [lindex $args 1]				set packetSize_ [lindex $args 1]				# Recompute rate 				$trafgen_ set rate_ [expr $packetSize_ * 8.0/ $interval_]                        	return                 	} elseif { [llength $args] == 1 } {				return $packetSize_                	}		} elseif { [lindex $args 0] == "random_" } {			if { [llength $args] == 2 } {				$trafgen_ set random_ [lindex $args 1]				set random_ [lindex $args 1]				return                	} elseif { [llength $args] == 1 } {				return $random_			}		} elseif { [lindex $args 0] == "maxpkts_" } {			if { [llength $args] == 2 } {				$trafgen_ set maxpkts_ [lindex $args 1]				set maxpkts_ [lindex $args 1]				return                	} elseif { [llength $args] == 1 } {				return $maxpkts_			}		} elseif { [lindex $args 0] == "interval_" } {			if { [llength $args] == 2 } {				set ns_ [Simulator instance]				set interval_ [$ns_ delay_parse [lindex $args 1]]				# Convert interval_ to rate for trafgen_				$trafgen_ set rate_ [expr $packetSize_ * 8.0/ $interval_]				return                	} elseif { [llength $args] == 1 } {				return $interval_			}		}	}	eval $self next $args} Class Traffic/Expoo -superclass Application/Traffic/ExponentialClass Traffic/Pareto -superclass Application/Traffic/ParetoClass Traffic/RealAudio -superclass Application/Traffic/RealAudioClass Traffic/Trace -superclass Application/Traffic/Trace# These instprocs are needed to map old Traffic/* type variablesTraffic/Expoo instproc set args {	$self instvar packetSize_ burst_time_ idle_time_ rate_ 	if { [lindex $args 0] == "packet-size" } {		if { [llength $args] == 2 } {			$self set packetSize_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $packetSize_               	}	} elseif { [lindex $args 0] == "burst-time" } {		if { [llength $args] == 2 } {			$self set burst_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $burst_time_               	}	} elseif { [lindex $args 0] == "idle-time" } {		if { [llength $args] == 2 } {			$self set idle_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $idle_time_               	}	} elseif { [lindex $args 0] == "rate" } {		if { [llength $args] == 2 } {			$self set rate_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $rate_               	}	}	eval $self next $args}Traffic/Pareto instproc set args {	$self instvar packetSize_ burst_time_ idle_time_ rate_ shape_	if { [lindex $args 0] == "packet-size" } {		if { [llength $args] == 2 } {			$self set packetSize_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $packetSize_               	}	} elseif { [lindex $args 0] == "burst-time" } {		if { [llength $args] == 2 } {			$self set burst_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $burst_time_               	}	} elseif { [lindex $args 0] == "idle-time" } {		if { [llength $args] == 2 } {			$self set idle_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $idle_time_               	}	} elseif { [lindex $args 0] == "rate" } {		if { [llength $args] == 2 } {			$self set rate_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $rate_               	}	} elseif { [lindex $args 0] == "shape" } {		if { [llength $args] == 2 } {			$self set shape_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $shape_               	}	}	eval $self next $args}Traffic/RealAudio instproc set args {	$self instvar packetSize_ burst_time_ idle_time_ rate_ 	if { [lindex $args 0] == "packet-size" } {		if { [llength $args] == 2 } {			$self set packetSize_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $packetSize_               	}	} elseif { [lindex $args 0] == "burst-time" } {		if { [llength $args] == 2 } {			$self set burst_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $burst_time_               	}	} elseif { [lindex $args 0] == "idle-time" } {		if { [llength $args] == 2 } {			$self set idle_time_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $idle_time_               	}	} elseif { [lindex $args 0] == "rate" } {		if { [llength $args] == 2 } {			$self set rate_ [lindex $args 1]                       	return                	} elseif { [llength $args] == 1 } {			return $rate_               	}	}	eval $self next $args}Class Source/FTP -superclass ApplicationSource/FTP set maxpkts_ 268435456Source/FTP instproc attach o {	$self instvar agent_	set agent_ $o	$self attach-agent $o}Source/FTP instproc init {} {	$self next	$self instvar maxpkts_ agent_	set maxpkts_ 268435456}Source/FTP instproc start {} {	$self instvar agent_ maxpkts_	$agent_ advance $maxpkts_}Source/FTP instproc stop {} {	$self instvar agent_	$agent_ advance 0}Source/FTP instproc produce { pktcnt } {	$self instvar agent_ 	$agent_ advance $pktcnt}Source/FTP instproc producemore { pktcnt } {	$self instvar agent_	$agent_ advanceby $pktcnt}## For consistency with other applications#Class Source/Telnet -superclass Application/TelnetSource/Telnet set maxpkts_ 268435456Source/Telnet instproc attach o {	$self instvar agent_	set agent_ $o	$self attach-agent $o}

⌨️ 快捷键说明

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