📄 node135.html
字号:
<html><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><!--Converted with jLaTeX2HTML 2002 (1.62) JA patch-1.4patched version by: Kenshi Muto, Debian Project.LaTeX2HTML 2002 (1.62),original version by: Nikos Drakos, CBLU, University of Leeds* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan* with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --><HTML><HEAD><TITLE>12.2.4 The PacketHeaderManager Class</TITLE><META NAME="description" CONTENT="12.2.4 The PacketHeaderManager Class"><META NAME="keywords" CONTENT="everything"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"><META NAME="Generator" CONTENT="jLaTeX2HTML v2002 JA patch-1.4"><META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"><LINK REL="STYLESHEET" HREF="everything.css" tppabs="http://www.isi.edu/nsnam/ns/doc/everything.css"><LINK REL="previous" HREF="node134.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node134.html"><LINK REL="up" HREF="node131.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node131.html"><LINK REL="next" HREF="node136.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node136.html"></HEAD><BODY ><!--Navigation Panel--><A NAME="tex2html3360" HREF="node136.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node136.html"><IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="file:/usr/share/latex2html/icons/next.png"></A> <A NAME="tex2html3354" HREF="node131.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node131.html"><IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="file:/usr/share/latex2html/icons/up.png"></A> <A NAME="tex2html3350" HREF="node134.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node134.html"><IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="file:/usr/share/latex2html/icons/prev.png"></A> <A NAME="tex2html3356" HREF="node1.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node1.html"><IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="file:/usr/share/latex2html/icons/contents.png"></A> <A NAME="tex2html3358" HREF="node590.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node590.html"><IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="file:/usr/share/latex2html/icons/index.png"></A> <BR><B> Next:</B> <A NAME="tex2html3361" HREF="node136.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node136.html">12.3 Commands at a</A><B> Up:</B> <A NAME="tex2html3355" HREF="node131.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node131.html">12.2 Packet Classes</A><B> Previous:</B> <A NAME="tex2html3351" HREF="node134.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node134.html">12.2.3 The hdr_cmn Class</A>   <B> <A NAME="tex2html3357" HREF="node1.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node1.html">Contents</A></B>   <B> <A NAME="tex2html3359" HREF="node590.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node590.html">Index</A></B> <BR><BR><!--End of Navigation Panel--><H2><A NAME="SECTION03924000000000000000"></A><A NAME="sec:packethdrmgr"></A><BR>12.2.4 The PacketHeaderManager Class</H2><P>An object of the PacketHeaderManager../ns-2/packet.h is usedto manage the set of currently-active packet header types andassign each of them unique offsets in the BOB.It is defined in both the C++ and OTcl code:<PRE>{\rm From tcl/lib/ns-packet.tcl:} PacketHeaderManager set hdrlen_ 0 ...... foreach prot { AODV ARP aSRM Common CtrMcast Diffusion ...... TORA UMP } { add-packet-header $prot } 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 }{\rm From packet.cc:} /* manages active packet header types */ class PacketHeaderManager : public TclObject { public: PacketHeaderManager() { bind("hdrlen_", &Packet::hdrlen_); } };</PRE> The code in tcl/lib/ns-packet.tcl is executedwhen the simulator initializes.Thus, the <TT>foreach</TT> statement is executed before thesimulation begins, and initializes the OTcl class array<TT>tab_</TT> to contain the mapping between classthe name and the names of the currently active packet header classes.As discussed above (<A HREF="node128.html#sec:ppackethdr" tppabs="http://www.isi.edu/nsnam/ns/doc/node128.html#sec:ppackethdr">12.1</A>), packet headers shouldbe accessed using <TT>hdr_hdrname::access()</TT>. <P>The []create_packetformat instance procedure is part of thebasic Simulator class and is called one time during simulatorconfiguration.It first creates a single <TT>PacketHeaderManager</TT> object.The C++ constructor links the OTcl instancevariable <TT>hdrlen_</TT> (of class <TT>PacketHeaderManager</TT>)to the C++ variable <TT>Packet::hdrlen_</TT> (a staticmember of the <TT>Packet</TT> class).This has the effect of setting <TT>Packet::hdrlen_</TT> tozero.Note that binding across class types in this fashion isunusual.<P><A NAME="sec:configpacket"></A>After creating the packet manager, the <TT>foreach</TT>loop enables each of the packet headers of interest.This loop iterates through the list of definedpacket headers of the form where is the name of the th headerand is the name of the variable containing thelocation of the header in BOB.The placement of headers is performed by the <TT>allochdr</TT>instproc of the <TT>PacketHeaderManager</TT> OTcl class.The procedure keeps a running variable <TT>hdrlen_</TT> withthe current length of BOB as new packet headers are enabled.It also arranges for 8-byte alignment for any newly-enabled packetheader.This is needed to ensure that when double-world length quantitiesare used in packet headers on machines where double-word alignmentis required, access faults are not produced.<A NAME="tex2html22" HREF="footnode.html#foot5328" tppabs="http://www.isi.edu/nsnam/ns/doc/footnode.html#foot5328"><SUP>12.3</SUP></A>.<P><HR><!--Navigation Panel--><A NAME="tex2html3360" HREF="node136.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node136.html"><IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="file:/usr/share/latex2html/icons/next.png"></A> <A NAME="tex2html3354" HREF="node131.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node131.html"><IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="file:/usr/share/latex2html/icons/up.png"></A> <A NAME="tex2html3350" HREF="node134.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node134.html"><IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="file:/usr/share/latex2html/icons/prev.png"></A> <A NAME="tex2html3356" HREF="node1.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node1.html"><IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="file:/usr/share/latex2html/icons/contents.png"></A> <A NAME="tex2html3358" HREF="node590.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node590.html"><IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="file:/usr/share/latex2html/icons/index.png"></A> <BR><B> Next:</B> <A NAME="tex2html3361" HREF="node136.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node136.html">12.3 Commands at a</A><B> Up:</B> <A NAME="tex2html3355" HREF="node131.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node131.html">12.2 Packet Classes</A><B> Previous:</B> <A NAME="tex2html3351" HREF="node134.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node134.html">12.2.3 The hdr_cmn Class</A>   <B> <A NAME="tex2html3357" HREF="node1.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node1.html">Contents</A></B>   <B> <A NAME="tex2html3359" HREF="node590.html" tppabs="http://www.isi.edu/nsnam/ns/doc/node590.html">Index</A></B> <!--End of Navigation Panel--><ADDRESS>2003-09-23</ADDRESS></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -