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

📄 ns-packet.tcl

📁 Ns2下Wimax的代码
💻 TCL
字号:
# -*-	Mode:tcl; tcl-indent-level:8; tab-width:8; indent-tabs-mode:t -*-## Time-stamp: <2000-08-31 19:01:26 haoboy>## Copyright (c) 1997 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: /cvsroot/nsnam/ns-2/tcl/lib/ns-packet.tcl,v 1.55 2005/06/17 17:41:16 sfloyd Exp $## set up the packet format for the simulation# (initial version)### XXX Packet Header Usage Guide## By default, ns includes ALL packet headers of ALL protocols in ns in # EVERY packet in your simulation. This is a LOT, and will increase as more# protocols are added into ns. For "packet-intensive" simulations, this could# be a huge overhead.## To include only the packet headers that are of interest to you in your # specific simulation, follow this pattern (e.g., you want to remove AODV,# and ARP headers from your simulation):##   remove-packet-header AODV ARP#   ...#   set ns [new Simulator]## NOTICE THAT ADD-PACKET-HEADER{} MUST GO BEFORE THE SIMULATOR IS CREATED.## To include only a specific set of headers in your simulation, e.g., AODV# and ARP, follow this pattern:##   remove-all-packet-headers#   add-packet-header AODV ARP#   ... #   set ns [new Simulator]## IMPORTANT: You MUST never remove common header from your simulation. # As you can see, this is also enforced by these header manipulation procs.#PacketHeaderManager set hdrlen_ 0# XXX Common header should ALWAYS be presentPacketHeaderManager set tab_(Common) 1proc add-packet-header args {	foreach cl $args {		PacketHeaderManager set tab_(PacketHeader/$cl) 1	}}proc add-all-packet-headers {} {	PacketHeaderManager instvar tab_	foreach cl [PacketHeader info subclass] {		if [info exists tab_($cl)] { 			PacketHeaderManager set tab_($cl) 1		}	}}proc remove-packet-header args {	foreach cl $args {		if { $cl == "Common" } {			warn "Cannot exclude common packet header."			continue		}		PacketHeaderManager unset tab_(PacketHeader/$cl)	}}proc remove-all-packet-headers {} {	PacketHeaderManager instvar tab_	foreach cl [PacketHeader info subclass] {		if { $cl != "PacketHeader/Common" } {			if [info exists tab_($cl)] { 				PacketHeaderManager unset tab_($cl)			}		}	}}foreach prot {# Common:	Common 	Flags	IP 	# IP# Routing Protocols:	NV 	# NixVector classifier for stateless routing 	rtProtoDV 	# distance vector routing protocol	rtProtoLS 	# link state routing protocol	SR 	# source routing, dsr/hdr_sr.cc	Src_rt 	# source routing, src_rtg/hdr_src.cc# Routers:	LDP 	# mpls/ldp.cc	MPLS 	# MPLS, MultiProtocol Label Switching	Resv 	# Token buckets, for reservations.	UMP 	# Admission control, adc/ump.cc	Pushback 	# Pushback, router-to-router# Multicast:  	aSRM 	# mcast/srm.cc	CtrMcast 	# Centralized Multicast routing	mcastCtrl 	# mcast/mcast_ctrl.cc	MFTP 	# Multicast File Transfer Protocol	PGM 	# PGM multicast	PGM_SPM # PGM multicast	PGM_NAK # PGM multicast  	SRM 	# SRM, multicast  	SRMEXT 	# SRM, multicast# Transport Protocols and related protocols:	HttpInval 	# HTTP	IVS 	# Inria video conferencing system 	QS 	# Quick-Start	RAP 	# Rate Adaption Protocol, transport protocol.	RTP 	# RTP.  Also used for UPD traffic.	SCTP 	# SCTP, transport protocol	Snoop 	# tcp/snoop.cc	TCP 	# TCP, transport protocol	TCPA 	# Asymmetric TCP, transport protocol	TFRC 	# TFRC, transport protocol	TFRC_ACK 	# TFRC, transport protocol	XCP 	# XCP, transport protocol# Application-Layer Protocols:	Message # a protocol to carry text messages	Ping 	# Ping# Wireless:	ARP 	# Address Resolution Protocol, network wireless stack	GAF 	# Geographic Adaptive Delity, for ad-hoc networks	LL 	# network wireless stack        LRWPAN  # zheng, wpan/p802_15_4mac.cc	Mac 	# network wireless stack# Mobility, Ad-Hoc Networks, Sensor Nets:	AODV 	# routing protocol for ad-hoc networks	Diffusion 	# diffusion/diffusion.cc	IMEP 	# Internet MANET Encapsulation Protocol, for ad-hoc networks        MIP 	# Mobile IP, mobile/mip-reg.cc	Smac 	# Sensor-MAC	TORA 	# routing protocol for ad-hoc networks# Other:	Encap 	# common/encap.cc        IPinIP 	# IP encapsulation 	HDLC 	# High Level Data Link Control	802_16} {	add-packet-header $prot}proc PktHdr_offset { hdrName {field ""} } {	set offset [$hdrName offset]	if { $field != "" } {		# This requires that fields inside the packet header must		# be exported via PacketHeaderClass::export_offsets(), which		# should use PacketHeaderClass::field_offset() to export 		# field offsets into otcl space.		incr offset [$hdrName set offset_($field)]	}	return $offset}Simulator instproc create_packetformat { } {	PacketHeaderManager instvar tab_	set pm [new PacketHeaderManager]	foreach cl [PacketHeader info subclass] {		if [info exists tab_($cl)] {			set off [$pm allochdr $cl]			$cl offset $off		}	}	$self set packetManager_ $pm}PacketHeaderManager instproc allochdr cl {	set size [$cl set hdrlen_]	$self instvar hdrlen_	set NS_ALIGN 8	# round up to nearest NS_ALIGN bytes	# (needed on sparc/solaris)	set incr [expr ($size + ($NS_ALIGN-1)) & ~($NS_ALIGN-1)]	set base $hdrlen_	incr hdrlen_ $incr	return $base}# XXX Old code. Do NOT delete for now. - Aug 30, 2000# Initialization#  foreach cl [PacketHeader info subclass] {#  	PacketHeaderManager set vartab_($cl) ""#  }# So that not all packet headers should be initialized here.# E.g., the link state routing header is initialized using this proc in # ns-rtProtoLS.tcl; because link state may be turned off when STL is not # available, this saves us a ns-packet.tcl.in#  proc create-packet-header { cl var } {#  	PacketHeaderManager set vartab_(PacketHeader/$cl) $var#  }# If you need to save some memory, you can disable unneeded packet headers# by commenting them out from the list below#  foreach pair {#  	{ Common off_cmn_ }#  	{ Mac off_mac_ }#  	{ LL off_ll_ }#  	{ ARP off_arp_ }#  	{ Snoop off_snoop_ }#  	{ SR off_SR_ }#  	{ IP off_ip_ }#  	{ TCP off_tcp_ }#  	{ TCPA off_tcpasym_ }#  	{ Flags off_flags_ }#  	{ TORA off_TORA_ }#  	{ AODV off_AODV_ }#  	{ IMEP off_IMEP_ }#  	{ RTP off_rtp_ } #  	{ Message off_msg_ }#  	{ IVS off_ivs_ }#  	{ rtProtoDV off_DV_ }#  	{ CtrMcast off_CtrMcast_ }#  	{ mcastCtrl off_mcast_ctrl_ }#    	{ aSRM off_asrm_ }#    	{ SRM off_srm_ }#    	{ SRMEXT off_srm_ext_}#  	{ Resv off_resv_}#  	{ HttpInval off_inv_}#          { IPinIP off_ipinip_} #          { MIP off_mip_}#  	{ MFTP off_mftp_ }#  	{ Encap off_encap_ }#  	{ RAP off_rap_ }#  	{ UMP off_ump_  }#  	{ TFRC off_tfrm_ }#  	{ Ping off_ping_ }#  	{ rtProtoLS off_LS_ }#  	{ MPLS off_mpls_ }#	{ GAF off_gaf_ } #  	{ LDP off_ldp_ }#  } {#  	create-packet-header [lindex $pair 0] [lindex $pair 1]#  }#  proc PktHdr_offset {hdrName {field ""}} {#  	set var [PacketHeaderManager set vartab_($hdrName)]#  	set offset [TclObject set $var]#  	if {$field != ""} {#  		incr offset [$hdrName set offset_($field)]#  	}#  	return $offset#  }#  Simulator instproc create_packetformat { } {#  	PacketHeaderManager instvar vartab_#  	set pm [new PacketHeaderManager]#  	foreach cl [PacketHeader info subclass] {#  		if {[info exists vartab_($cl)] && $vartab_($cl) != ""} {#  			set off [$pm allochdr [lindex [split $cl /] 1]]#  			set var [PacketHeaderManager set vartab_($cl)]#  			TclObject set $var $off#  			$cl offset $off#  		}#  	}#  	$self set packetManager_ $pm#  }

⌨️ 快捷键说明

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