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

📄 ns-mobilenode.tcl

📁 一个很好的LINUX底下的GPRS协议栈
💻 TCL
📖 第 1 页 / 共 2 页
字号:
# -*-	Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-# Modified and extended by Sandeep Kumar, Kopparapu Suman and Richa# Jain, Indian Institute of Technology, Bombay.# June, 2001. # Copyright (c) 2001 Indian Insitute of Technology, Bombay.   # 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 and binary code must contain # the above copyright notice, this list of conditions and the following  # disclaimer. #  # 2. All advertising materials mentioning features or use of this software # must display the following acknowledgement:  # This product includes software developed at Indian Insitute of # Technology, Bombay.  # # 3. The name of the Institute may not be used to endorse or promote  # products derived from this software without specific prior written  # permission. # INDIAN INSTITUTE OF TECHNOLOGY, BOMBAY, MAKES NO REPRESENTATIONS  # CONCERNING EITHER THE MERCHANTABILITY OF THIS SOFTWARE OR THE  # SUITABILITY OF THIS SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software  # is provided "as is" without express or implied warranty of any kind.      ######################################################################### 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.38 2000/09/14 18:19:27 haoboy 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_ rlc_        for {set i 0} {$i < $nifs_} {incr i} {		$netif_($i) reset		$mac_($i) reset		$ll_($i) reset		$rlc_($i) reset    ;# sandy's rlc 		$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	}		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			}

⌨️ 快捷键说明

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