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

📄 ns-mobilenode.tcl

📁 Low Rate Wireless Personal Area Networks (LR-WPANs)in C
💻 TCL
📖 第 1 页 / 共 2 页
字号:
# -*-	Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-## Copyright (c) 1998-2000 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-mobilenode.tcl,v 1.42 2002/04/01 23:07:27 buchheim Exp $## Ported from CMU-Monarch project's mobility extensions -Padma, 10/98.## IT IS NOT ENCOURAGED TO SUBCLASSS MOBILENODE CLASS DEFINED IN THIS FILE#======================================================================# The ARPTable class#======================================================================ARPTable instproc init args {	eval $self next $args		;# parent class constructor}ARPTable set bandwidth_         0ARPTable set delay_             5us#======================================================================# The Node/MobileNodeNode class#======================================================================Node/MobileNode instproc init args {#  	# I don't care about address classifier; it's not my business#  	# All I do is to setup port classifier so we can do broadcast, #  	# and to set up interface stuff.#  	$self attach-node $node#  	$node port-notify $self	eval $self next $args	$self instvar nifs_ arptable_ X_ Y_ Z_ nodetype_	set X_ 0.0	set Y_ 0.0	set Z_ 0.0        set arptable_ ""                ;# no ARP table yet	set nifs_	0		;# number of network interfaces	# Mobile IP node processing        $self makemip-New$nodetype_}#----------------------------------------------------------------------# XXX Following are the last remnant of nodetype_. Need to be completely # removed, however, we need a better mechanism to distinguish vanilla # mobile node from MIP base station, and MIP mobile host.Node/MobileNode instproc makemip-NewMobile {} {}Node/MobileNode instproc makemip-NewBase {} {}Node/MobileNode instproc makemip-New {} {}Node/MobileNode instproc makemip-NewMIPBS {} {	$self instvar regagent_ encap_ decap_ agents_ id_	set dmux [new Classifier/Port/Reserve]	$dmux set mask_ 0x7fffffff	$dmux set shift_ 0	$self install-demux $dmux   	set regagent_ [new Agent/MIPBS $self]	$self attach $regagent_ [Node/MobileNode set REGAGENT_PORT]	$self attach-encap 	$self attach-decap}Node/MobileNode instproc attach-encap {} {	$self instvar encap_ 		set encap_ [new MIPEncapsulator]	$encap_ set mask_ [AddrParams NodeMask 1]	$encap_ set shift_ [AddrParams NodeShift 1]	#set mask 0x7fffffff	#set shift 0	set nodeaddr [AddrParams addr2id [$self node-addr]]	$encap_ set addr_ [expr ( ~([AddrParams NodeMask 1] << \			[AddrParams NodeShift 1]) & $nodeaddr )]	$encap_ set port_ 1	$encap_ target [$self entry]	$encap_ set node_ $self}Node/MobileNode instproc attach-decap {} {	$self instvar decap_ dmux_ agents_	set decap_ [new Classifier/Addr/MIPDecapsulator]	lappend agents_ $decap_	$decap_ set mask_ [AddrParams NodeMask 1]	$decap_ set shift_ [AddrParams NodeShift 1]	$dmux_ install [Node/MobileNode set DECAP_PORT] $decap_}Node/MobileNode instproc makemip-NewMIPMH {} {	$self instvar regagent_ 	set dmux [new Classifier/Port/Reserve]	$dmux set mask_ 0x7fffffff	$dmux set shift_ 0	$self install-demux $dmux	set regagent_ [new Agent/MIPMH $self]	$self attach $regagent_ [Node/MobileNode set REGAGENT_PORT]	$regagent_ set mask_ [AddrParams NodeMask 1]	$regagent_ set shift_ [AddrParams NodeShift 1] 	$regagent_ set dst_addr_ [expr (~0) << [AddrParams NodeShift 1]]	$regagent_ set dst_port_ 0	$regagent_ node $self}#----------------------------------------------------------------------Node/MobileNode instproc reset {} {	$self instvar arptable_ nifs_ netif_ mac_ ifq_ ll_ imep_        for {set i 0} {$i < $nifs_} {incr i} {		$netif_($i) reset		$mac_($i) reset		$ll_($i) reset		$ifq_($i) reset		if { [info exists opt(imep)] && $opt(imep) == "ON" } { 			$imep_($i) reset 		}	}	if { $arptable_ != "" } {		$arptable_ reset 	}}## Attach an agent to a node.  Pick a port and# bind the agent to the port number.# if portnumber is 255, default target is set to the routing agent#Node/MobileNode instproc add-target { agent port } {	$self instvar dmux_ imep_ toraDebug_ 	set ns [Simulator instance]	set newapi [$ns imep-support]	$agent set sport_ $port	# special processing for TORA/IMEP node	set toraonly [string first "TORA" [$agent info class]] 	if {$toraonly != -1 } {		$agent if-queue [$self set ifq_(0)]  ;# ifq between LL and MAC		#		# XXX: The routing protocol and the IMEP agents needs handles		# to each other.		#		$agent imep-agent [$self set imep_(0)]		[$self set imep_(0)] rtagent $agent	}		# Special processing for AODV	set aodvonly [string first "AODV" [$agent info class]] 	if {$aodvonly != -1 } {		$agent if-queue [$self set ifq_(0)]   ;# ifq between LL and MAC	}	#<zheng: add>	# Special processing for ZBR	#set zbronly [string first "ZBR" [$agent info class]] 	#if {$zbronly != -1 } {	#	$agent if-queue [$self set ifq_(0)]   ;# ifq between LL and MAC	#}	#</zheng: add>	if { $port == [Node set rtagent_port_] } {					# Ad hoc routing agent setup needs special handling		$self add-target-rtagent $agent $port		return	}	# Attaching a normal agent	set namfp [$ns get-nam-traceall]	if { [Simulator set AgentTrace_] == "ON" } {		#		# Send Target		#		if {$newapi != ""} {			set sndT [$self mobility-trace Send "AGT"]		} else {			set sndT [cmu-trace Send AGT $self]		}		if { $namfp != "" } {			$sndT namattach $namfp		}		$sndT target [$self entry]		$agent target $sndT		#		# Recv Target		#		if {$newapi != ""} {			set rcvT [$self mobility-trace Recv "AGT"]		} else {			set rcvT [cmu-trace Recv AGT $self]		}		if { $namfp != "" } {			$rcvT namattach $namfp		}		$rcvT target $agent		$dmux_ install $port $rcvT	} else {		#		# Send Target		#		$agent target [$self entry]		#		# Recv Target		#		$dmux_ install $port $agent	}}Node/MobileNode instproc add-target-rtagent { agent port } {	$self instvar imep_ toraDebug_ 	set ns [Simulator instance]	set newapi [$ns imep-support]	set namfp [$ns get-nam-traceall]	set dmux_ [$self demux]	set classifier_ [$self entry]	if { [Simulator set RouterTrace_] == "ON" } {		#		# Send Target		#		if {$newapi != ""} {			set sndT [$self mobility-trace Send "RTR"]		} else {			set sndT [cmu-trace Send "RTR" $self]		}		if { $namfp != "" } {			$sndT namattach $namfp		}		if { $newapi == "ON" } {			$agent target $imep_(0)			$imep_(0) sendtarget $sndT			# second tracer to see the actual			# types of tora packets before imep packs them			if { [info exists toraDebug_] && $toraDebug_ == "ON"} {				set sndT2 [$self mobility-trace Send "TRP"]				$sndT2 target $imep_(0)				$agent target $sndT2			}		} else {  ;#  no IMEP			$agent target $sndT		}		$sndT target [$self set ll_(0)]		#		# Recv Target		#		if {$newapi != ""} {			set rcvT [$self mobility-trace Recv "RTR"]		} else {			set rcvT [cmu-trace Recv "RTR" $self]		}		if { $namfp != "" } {			$rcvT namattach $namfp		}		if {$newapi == "ON" } {			[$self set ll_(0)] up-target $imep_(0)			$classifier_ defaulttarget $agent			# need a second tracer to see the actual			# types of tora packets after imep unpacks them			# no need to support any hier node			if {[info exists toraDebug_] && $toraDebug_ == "ON" } {				set rcvT2 [$self mobility-trace Recv "TRP"]				$rcvT2 target $agent				$classifier_ defaulttarget $rcvT2			}		} else {			$rcvT target $agent			$classifier_ defaulttarget $rcvT			$dmux_ install $port $rcvT		}	} else {		#		# Send Target		#		# if tora is used		if { $newapi == "ON" } {			$agent target $imep_(0)			# second tracer to see the actual			# types of tora packets before imep packs them			if { [info exists toraDebug_] && $toraDebug_ == "ON"} {				set sndT2 [$self mobility-trace Send "TRP"]				$sndT2 target $imep_(0)				$agent target $sndT2			}			$imep_(0) sendtarget [$self set ll_(0)]					} else {  ;#  no IMEP			$agent target [$self set ll_(0)]		}    		#		# Recv Target		#		if {$newapi == "ON" } {			[$self set ll_(0)] up-target $imep_(0)			$classifier_ defaulttarget $agent			# need a second tracer to see the actual			# types of tora packets after imep unpacks them			# no need to support any hier node			if {[info exists toraDebug_] && $toraDebug_ == "ON" } {				set rcvT2 [$self mobility-trace Recv "TRP"]				$rcvT2 target $agent				[$self set classifier_] defaulttarget $rcvT2			}		} else {			$classifier_ defaulttarget $agent			$dmux_ install $port $agent		}	}}## The following setups up link layer, mac layer, network interface# and physical layer structures for the mobile node.#Node/MobileNode instproc add-interface { channel pmodel lltype mactype \		qtype qlen iftype anttype inerrproc outerrproc fecproc} {	$self instvar arptable_ nifs_ netif_ mac_ ifq_ ll_ imep_ inerr_ outerr_ fec_		set ns [Simulator instance]	set imepflag [$ns imep-support]	set t $nifs_	incr nifs_	set netif_($t)	[new $iftype]		;# interface	set mac_($t)	[new $mactype]		;# mac layer	set ifq_($t)	[new $qtype]		;# interface queue	set ll_($t)	[new $lltype]		;# link layer        set ant_($t)    [new $anttype]	set inerr_($t) ""	if {$inerrproc != ""} {		set inerr_($t) [$inerrproc]	}	set outerr_($t) ""	if {$outerrproc != ""} {		set outerr_($t) [$outerrproc]	}	set fec_($t) ""	if {$fecproc != ""} {		set fec_($t) [$fecproc]	}	set namfp [$ns get-nam-traceall]        if {$imepflag == "ON" } {              		# IMEP layer		set imep_($t) [new Agent/IMEP [$self id]]		set imep $imep_($t)		set drpT [$self mobility-trace Drop "RTR"]		if { $namfp != "" } {			$drpT namattach $namfp		}		$imep drop-target $drpT		$ns at 0.[$self id] "$imep_($t) start"   ;# start beacon timer        }	#	# Local Variables	#	set nullAgent_ [$ns set nullAgent_]	set netif $netif_($t)	set mac $mac_($t)	set ifq $ifq_($t)	set ll $ll_($t)	set inerr $inerr_($t)	set outerr $outerr_($t)

⌨️ 快捷键说明

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