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

📄 ns-rsvp.tcl

📁 rsvp and wfq patch for Netowrk Simulator 2
💻 TCL
字号:
## Copyright (c) 1998 The University of Bonn# All rights reserved.# # Permission to use and copy this software in source and binary forms# is hereby granted, provided that the above copyright notice, this# paragraph and the following disclaimer are retained in any copies# of any part of this software and that the University of Bonn is# acknowledged in all documentation pertaining to any such copy# or derivative work. The name of the University of Bonn may not# be used to endorse or promote products derived from this software# without specific prior written permission.## THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL # THE UNIVERSITY OF BONN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF # OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE.#WFQClass set limit_ 5000WFQClass set bw_ 0WFQClass set blocked_ falseWFQClass set unblock_on_resume_ trueWFQClass set debug_ falseQueue/WFQ set wf2q_ 0Queue/WFQ set prio_ 0Queue/WFQ set best_effort_ 0Queue/WFQ set borrow_ 0Queue/WFQ set num_classes_ 0Queue/WFQ set num_flows_ 0Queue/WFQ set num_drops_ 0Queue/WFQ set size_drops_ 0Agent/RSVP set noisy_ 0Agent/RSVP set refresh_ 30Agent/RSVP set lifetime_factor_ 3Agent/RSVP set ip6_ 0Agent/RSVP set fid_ 46Agent/RSVP set num_flows_ 0Agent/RSVP set num_rsb_ 0Agent/RSVP set num_psb_ 0Agent/RSVP set nam_ 1RSVPLink set src_ -1RSVPLink set dst_ -1RSVPLink set besteffort_ 0RSVPLink set debug_ falseRSVPChecker set src_ 0RSVPChecker set debug_ false# Clear the stats for a WFQ queueQueue/WFQ instproc clear-stats {} {	$self set num_drops_ 0	$self set size_drops_ 0}# Upcall procedure for path eventsAgent/RSVP instproc upcall-path { sid rate bucket sender } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_]] \		PATH EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid RATE: [format "%.0f" $rate] BUCKET:\		 $bucket SENDER: $sender"}# Upcall procedure for path-tear eventsAgent/RSVP instproc upcall-path-tear { sid sender } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		PATHTEAR EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid SENDER: $sender"}# Upcall procedure for resv-tear eventsAgent/RSVP instproc upcall-resv-tear { sid sender } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		RESVTEAR EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid SENDER: $sender"}# Upcall procedure for resv eventsAgent/RSVP instproc upcall-resv { sid rate bucket sender } {        set ns [Simulator instance]        puts "[expr [$self set agent_addr_] ] \		RESV EVENT at [format "%3.3f" [$ns now]] :\                SID: $sid RATE: [format "%.0f" $rate]\		 BUCKET: $bucket SENDER: $sender"}# Upcall procedure for path-timeout eventsAgent/RSVP instproc upcall-path-timeout { sid sender } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		PATHTIMEOUT EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid SENDER: $sender"}# Upcall procedure for resv-timeout eventsAgent/RSVP instproc upcall-resv-timeout { sid sender } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		RESVTIMEOUT EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid SENDER: $sender"}# Upcall procedure for resv-confirm eventsAgent/RSVP instproc upcall-resv-confirm { sid sender node } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		RESVCONF EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid SENDER: $sender NODE: $node"}# Upcall procedure for resv-error eventsAgent/RSVP instproc upcall-resv-error { sid code value node } {	set ns [Simulator instance]	puts "[expr [$self set agent_addr_] ] \		RESVERROR EVENT at [format "%3.3f" [$ns now]] :\		SID: $sid CODE: $code VALUE: $value NODE: $node"}# Return the admission control module which is attached to the link# between n1 and n2.Agent/RSVP instproc get-adc { n1 n2 } {	set link [[Simulator instance] link $n1 $n2]	return [$link set adc_]}# Check if the node the agent is attached to is a leaf in the# source-tree for the multicast group 'dst' and the source 'src'.Agent/RSVP instproc is-leaf { src dst } {	set node [$self set node_]	set rep [$node getReps $src $dst]	if { $rep == "" } {		return 1	} 	if { [$rep slots] == "" } {		return 1	}			return 0}# Create a class for the best-effort trafficRSVPLink instproc set-be { bw lim que } {	$self instvar wfq_be_	set wfq_be_ [new WFQClass]	$wfq_be_ set limit_ $lim	$wfq_be_ set bw_ $bw	$que add $wfq_be_	$que bind $wfq_be_ -1 0}# Return the best-effort traffic classRSVPLink instproc get-be {} {	$self instvar wfq_be_	return $wfq_be_}# Set the destination for an RSVPChecker objectRSVPChecker instproc set-dst { node } {	$self instvar dst_	set dst_ $node }# Set the source for an RSVPChecker objectRSVPChecker instproc set-src { node } {	$self instvar src_	set src_ [$node id]}# Return the destination for an RSVPChecker objectRSVPChecker instproc get-rsvp-agent {} {	$self instvar dst_	return [$dst_ get-rsvp-agent]}# Return the address of the destination agent for an RSVPChecker objectRSVPChecker instproc get-rsvp-agent-addr {} {	$self instvar dst_	set agent [$dst_ get-rsvp-agent]	return [$agent set agent_addr_]}# Add an RSVP agent to a nodeNode instproc add-rsvp-agent {} {	$self instvar rsvp_	set rsvp_ [new Agent/RSVP]	[Simulator instance] attach-agent $self $rsvp_	return $rsvp_}# Return a node's RSVP agent (or nothing if there is none)Node instproc get-rsvp-agent {} {	$self instvar rsvp_	if [info exists rsvp_] {		return $rsvp_	} else {		return	}}# Add an RSVPChecker object to a linkSimpleLink instproc add-rsvp-checker { check } {	$self instvar rsvpcheck_ link_ ttl_	set rsvpcheck_ $check}# Connect two RSVP agentsSimulator instproc connect-rsvp-agents { n1 n2 } {	set a1 [[$self get-node-by-id $n1] get-rsvp-agent]	set a2 [[$self get-node-by-id $n2] get-rsvp-agent]	$self connect $a1 $a2}# Add a single reservation to a link's schedulerSimulator instproc add-reservation { n1 n2 rate size} {	set link_ [$self link $n1 $n2]	set queue_ [$link_ queue]	set wfq [new WFQClass]	$wfq set limit_ $size	$wfq set bw_ $rate	$queue_ add $wfq        set signalmod_ [$link_ set signalmod_]	set be_ [$signalmod_ get-be]	$be_ set bw_ [expr [$be_ set bw_] - $rate]	return $wfq}# Modify a reservationSimulator instproc modify-reservation { n1 n2 wfq rate size} {	set diff [expr $rate - [$wfq set bw_]]	$wfq set limit_ $size	$wfq set bw_ $rate        set link_ [$self link $n1 $n2]        set signalmod_ [$link_ set signalmod_]	set be_ [$signalmod_ get-be]	$be_ set bw_ [expr [$be_ set bw_] - $diff]}# Remove a reservation from a link's schedulerSimulator instproc delete-reservation { n1 n2 wfq } {	$self modify-reservation $n1 $n2 $wfq 0 0        set link_ [$self link $n1 $n2]        set queue_ [$link_ queue]        $queue_ remove $wfq	delete $wfq}# Bind a filter/fid combination to a reservationSimulator instproc add-filter-fid { n1 n2 wfq sender fid } {	set link_ [$self link $n1 $n2]	set queue_ [$link_ queue]	$queue_ bind $wfq $sender $fid}# Unbind a filter/fid combination from a reservationSimulator instproc delete-filter-fid { n1 n2 sender fid } {	set link_ [$self link $n1 $n2]	set queue_ [$link_ queue]	$queue_ unbind $sender $fid}# Set up an RSVP link with an RSVPChecker object, admission# control and a class for the best-effort trafficSimulator instproc setup-rsvp-link { n1 n2 bw res signal lim } {	set link_ [$self link $n1 $n2]	set ttl_ [$link_ set ttl_]	set rsvpcheck_ [new RSVPChecker]	$rsvpcheck_ set-dst $n2	$rsvpcheck_ target [$ttl_ target]	$ttl_ target $rsvpcheck_	$rsvpcheck_ set-dst $n2	$rsvpcheck_ set-src $n1	set adc_ [$link_ set adc_]	$adc_ set utilization_ $res	set queue_ [$link_ queue]	$queue_ set best_effort_ 1	$queue_ set borrow_ 1	$queue_ set src_ 1	set signalmod_ [$link_ set signalmod_]	$signalmod_ set-be $bw $lim $queue_	set sigwfq [new WFQClass]	if { $signal > 0 } {		$sigwfq set limit_ 1000		$sigwfq set bw_ $signal		$queue_ add $sigwfq		$queue_ bind $sigwfq -1 46		set be_ [$signalmod_ get-be]		$be_ set bw_ [expr [$be_ set bw_] - $signal]	}}# Create a duplex RSVP link# Arguments: Node1, Node2, Bandwidth, Delay, Reservable Portion of the# link, portion of the link reserved for RSVP messages, queue size for the # best-effort class, admission control module, estimator module (for # measurement based admission control)Simulator instproc duplex-rsvp-link { n1 n2 bw delay res signal lim adc est } {	$self duplex-intserv-link $n1 $n2 $bw $delay WFQ RSVPLink $adc $est CL	$self setup-rsvp-link $n1 $n2 $bw $res $signal $lim	$self setup-rsvp-link $n2 $n1 $bw $res $signal $lim}# To get rid of the warnings when using ADC/Param:ADC/Param set utilization_ 0

⌨️ 快捷键说明

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