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

📄 rtm_link.tcl

📁 跑leach需要的
💻 TCL
字号:
## rtm_link.tcl#	all the instproc's needed to set up the link structure#	itself## set up link classifier's slot table with 2 entries:#	entry 0 : good box	[default]#	entry 1 : penalty boxRTMechanisms instproc bindboxes {} {	$self instvar cbqlink_	$self instvar goodclass_ badclass_	$self instvar goodslot_ badslot_        set classifier [$cbqlink_ classifier]	#$classifier dump        set goodslot_ [$classifier installNext $goodclass_]	set badslot_ [$classifier installNext $badclass_]        $classifier set default_ $goodslot_	$self vprint 2 "bindboxes: cbq classifier: $classifier, gslot: $goodslot_, bslot: $badslot_, defslot: $goodslot_"}RTMechanisms instproc set_red_params { redq psize qlim bytes wait } {        $redq set mean_pktsize_ $psize        $redq set limit_ $qlim        $redq set bytes_ $bytes        $redq set wait_ $wait}    ## create the CBQ classes for the good box and penalty box# insert them into the rtm link#RTMechanisms instproc makeboxes { okboxfm pboxfm qsz psz } {	$self instvar cbqlink_	$self instvar goodclass_ badclass_	$self instvar okboxfm_ pboxfm_	$self instvar ns_        set cbq [$cbqlink_ queue]        set rootcl [new CBQClass]        set badclass_ [new CBQClass]        set goodclass_ [new CBQClass]	$self vprint 2 "makeboxes: bclass:$badclass_, gclass:$goodclass_"        set badq [new Queue/RED]        $badq link [$cbqlink_ link]        set goodq [new Queue/RED]        $goodq link [$cbqlink_ link]        $self set_red_params $badq $psz $qsz true false        $self set_red_params $goodq $psz $qsz true false        $badclass_ install-queue $badq        $goodclass_ install-queue $goodq	$goodclass_ setparams $rootcl true 0.98 0.004 1 1 0	$badclass_ setparams $rootcl true 0.0 0.004 1 1 0# WHY DO NO PACKETS GET SENT WHEN BADCLASS has borrowing set to FALSE??? # ../../ns rtm_reclass.tcl three net3        $rootcl setparams none true 0.98 0.004 1 1 0	set okboxfm_ $okboxfm	set pboxfm_ $pboxfm        $cbqlink_ insert $rootcl        $cbqlink_ insert $badclass_ $pboxfm_        $cbqlink_ insert $goodclass_ $okboxfm_	# put in the edrop stuff	$cbqlink_ instvar drophead_	set edsnoop [new SnoopQueue/EDrop]	$edsnoop set-monitor $pboxfm_	$edsnoop target $drophead_	$badq early-drop-target $edsnoop	set edsnoop [new SnoopQueue/EDrop]	$edsnoop set-monitor $okboxfm_	$edsnoop target $drophead_	$goodq early-drop-target $edsnoop	$self vprint 2 "makeboxes completing: okfm: $okboxfm, okfmcl: [$okboxfm classifier], okredQ: $goodq; pboxfm: $pboxfm, pboxfmcl: [$pboxfm classifier], pboxredQ: $badq"}## create a flow monitorRTMechanisms instproc makeflowmon {} {	$self instvar ns_ okboxfm_ pboxfm_	set flowmon [new QueueMonitor/ED/Flowmon]        set cl [new Classifier/Hash/SrcDestFid 33]        set pbody {		set ns [$rtm_ set ns_]		set okcl [[$rtm_ set okboxfm_] classifier]                ## puts "here, okcl: $okcl self: $self"		if { $okcl == $self } {			# see if this flow moved to the pbox			set pboxcl [[$rtm_ set pboxfm_] classifier]			set moved [$pboxcl lookup auto $src $dst $fid]		} else {			# see if this flow moved to the okbox			set okboxcl [[$rtm_ set okboxfm_] classifier]			set moved [$okboxcl lookup auto $src $dst $fid]		}		if { $moved != "" } {			# residual packet belonging to a moved flow			return		}                set fdesc [new QueueMonitor/ED/Flow]                set slot [$self installNext $fdesc]		$rtm_ vprint 2 "(self:$self) installing flow $fdesc (s:$src,d:$dst,f:$fid) in buck: ?, slot >$slot<"                $self set-hash auto $src $dst $fid $slot		$rtm_ vprint 2 "(self: $self) unknown-flow done"flush stdout        }	set pbody "set rtm_ $self ; $pbody"        $cl proc unknown-flow { src dst fid } $pbody	$cl proc no-slot slotnum {		#		# note: we can wind up here when a packet passes		# through either an Out or a Drop Snoop Queue for		# a queue that the flow doesn't belong to anymore.		# For exampe, if a flow is penalized, future packets		# are directed to a "penalty box" queue, but there		# may be previos packets still in the good box queue		# which are allowed to either depart or are dropped.		# Since there is no longer hash state in the good box's		# hash classifier, we get a -1 return value for the		# hash classifier's classify() function, and there		# is no node at slot_[-1].  What to do about this?		# Well, we are talking about flows that have already		# been moved and so should rightly have their stats		# zero'd anyhow, so for now just ignore this case..		# puts "classifier $self, no-slot for slotnum $slotnum"	}        $flowmon classifier $cl        return $flowmon}RTMechanisms instproc monitor-link {} {	$self instvar ns_ cbqlink_	set flowmon [new QueueMonitor/ED/Flowmon]	set cl [new Classifier/Hash/SrcDestFid 33]	$flowmon classifier $cl	$cl proc unknown-flow { src dst fid } {		set nflow [new QueueMonitor/ED/Flow]		set slot [$self installNext $nflow]		## puts "here1"		$self set-hash auto $src $dst $fid $slot	}	$cl proc no-slot slotnum {		puts stderr "classifier $self, no-slot for slotnum $slotnum"	}	$cbqlink_ attach-monitors [new SnoopQueue/In] [new SnoopQueue/Out] \		[new SnoopQueue/Drop] $flowmon	return $flowmon}

⌨️ 快捷键说明

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