branch merge

This commit is contained in:
Craig Dowell
2008-10-10 15:26:32 -07:00
14 changed files with 15 additions and 1324 deletions

View File

@@ -1,35 +1,22 @@
TEXI2HTML = texi2html
TEXI2PDF = texi2dvi --pdf
EPSTOPDF = epstopdf
TGIF = tgif
DIA = dia
CONVERT = convert
CSS = --css-include=manual.css
SPLIT = --split section
DIA_SOURCES = buffer.dia sockets-overview.dia
TGIF_SOURCES = packet.obj node.obj internet-node-send.obj internet-node-recv.obj
DIA_SOURCES = internet-node-send.dia internet-node-recv.dia packet.dia node.dia buffer.dia sockets-overview.dia
DIA_EPS = ${DIA_SOURCES:.dia=.eps}
DIA_PNG = ${DIA_SOURCES:.dia=.png}
DIA_PDF = ${DIA_SOURCES:.dia=.pdf}
TGIF_EPS = ${TGIF_SOURCES:.obj=.eps}
TGIF_PNG = ${TGIF_SOURCES:.obj=.png}
TGIF_PDF = ${TGIF_SOURCES:.obj=.pdf}
all: images html split-html pdf
# Note: tgif requires a valid x display to convert from .obj to .png.
# If running this makefile on a remote console, the X virtual frame
# buffer may be needed (xorg-x11-server-Xvfb) to provide a "fake"
# display
images:
cd figures/; $(DIA) -t png $(DIA_SOURCES)
cd figures/; $(DIA) -t eps $(DIA_SOURCES)
cd figures/; $(foreach FILE,$(DIA_EPS),$(EPSTOPDF) $(FILE);)
cd figures/; $(TGIF) -print -png $(TGIF_SOURCES)
cd figures/; $(TGIF) -print -eps $(TGIF_SOURCES)
cd figures/; $(foreach FILE,$(TGIF_EPS),$(EPSTOPDF) $(FILE);)
html: images
$(TEXI2HTML) ${CSS} manual.texi
@@ -42,7 +29,6 @@ pdf: images
figures-clean:
cd figures/; rm -rf $(DIA_EPS); rm -rf $(DIA_PNG); rm -rf $(DIA_PDF)
cd figures/; rm -rf $(TGIF_EPS); rm -rf $(TGIF_PNG); rm -rf $(TGIF_PDF)
clean: figures-clean
rm -rf manual.aux manual.cp manual.cps manual.fn manual.ky manual.pg manual.tp manual.vr manual.toc manual.log manual.pdf manual.html manual/

View File

@@ -1,18 +1,18 @@
Please write image files in a vector graphics format, when possible, and
generate the .png and .pdf versions on the fly (see ../Makefile).
Currently supported tools are dia and tgif. xfig could be added similarly
The currently supported tool is dia. xfig could be added similarly
if someone wants to add it. The main requirement for adding another format
is that the tool to edit it is freely available and that a cron script can
autogenerate the pdf and png from the figure source.
autogenerate the pdf and png from the figure source. Tgif (.obj) files
were once used but the file conversions require a valid X display to
be running, and are therefore to be avoided since our code server
does not run such a server. Tgif pdf conversions were also cumbersome.
Store the .dia, or .obj versions in mercurial, but not the .png or .pdfs.
Store the .dia versions in mercurial, but not the .png or .pdfs.
If the figure is not available in a vector graphics format, store both
a .png and a .pdf version in this directory.
If you add a source (.dia, .obj) file here, remember to add it to
If you add a source (.dia) file here, remember to add it to
the list of figure sources in the Makefile in the directory above
Note: tgif can convert from .obj to .pdf, but the pdf that results takes
up a whole page. Instead, we convert to an intermediate .eps step, and
then run epstopdf.

Binary file not shown.

View File

@@ -1,380 +0,0 @@
%TGIF 4.1.43-QPL
state(0,37,100.000,154,78,0,16,0,9,1,1,0,0,3,0,1,0,'Times-Roman',0,80640,0,3,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
%
% @(#)$Header$
% %W%
%
unit("1 pixel/pixel").
color_info(11,65535,0,[
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
"red", 65535, 0, 0, 65535, 0, 0, 1,
"green", 0, 65535, 0, 0, 65535, 0, 1,
"blue", 0, 0, 65535, 0, 0, 65535, 1,
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
"pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
"CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
"black", 0, 0, 0, 0, 0, 0, 1,
"DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
]).
script_frac("0.6").
fg_bg_colors('black','white').
dont_reencode("FFDingbests:ZapfDingbats").
page(1,"",1,'').
group([
rcbox('black','',161,586,241,634,2,1,1,0,16,125,0,0,0,0,'1',0,[
]),
text('black',161,605,1,0,1,72,18,124,13,5,0,0,0,0,2,72,18,0,0,"",0,0,0,0,618,'',[
minilines(72,18,0,0,0,0,0,[
mini_line(72,13,5,0,0,0,[
str_block(0,72,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,72,13,5,0,0,0,0,0,0,0,
"NetDevice")])
])
])])
],
141,0,0,[
]).
group([
rcbox('black','',147,77,255,125,2,1,1,0,16,354,0,0,0,0,'1',0,[
]),
text('black',163,96,1,0,1,88,18,353,13,5,0,0,0,0,2,88,18,0,0,"",0,0,0,0,109,'',[
minilines(88,18,0,0,0,0,0,[
mini_line(88,13,5,0,0,0,[
str_block(0,88,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,88,13,5,0,0,0,0,0,0,0,
"Application")])
])
])])
],
352,0,0,[
]).
text('black',202,172,1,1,1,90,17,473,14,3,2,0,0,0,2,90,17,0,0,"",0,0,0,0,186,'',[
minilines(90,17,0,0,1,0,0,[
mini_line(90,14,3,0,0,0,[
str_block(0,90,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,90,14,3,0,0,0,0,0,0,0,
"UdpSocketImpl")])
])
])]).
rcbox('black','',132,165,269,198,0,1,1,0,16,474,0,0,0,0,'1',0,[
]).
text('black',202,241,1,1,1,78,17,475,14,3,2,0,0,0,2,78,17,0,0,"",0,0,0,0,255,'',[
minilines(78,17,0,0,1,0,0,[
mini_line(78,14,3,0,0,0,[
str_block(0,78,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,78,14,3,0,0,0,0,0,0,0,
"Ipv4EndPoint")])
])
])]).
rcbox('black','',132,234,269,267,0,1,1,0,16,476,0,0,0,0,'1',0,[
]).
text('black',202,338,1,1,1,88,17,488,14,3,2,0,0,0,2,88,17,0,0,"",0,0,0,0,352,'',[
minilines(88,17,0,0,1,0,0,[
mini_line(88,14,3,0,0,0,[
str_block(0,88,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,88,14,3,0,0,0,0,0,0,0,
"UdpL4Protocol")])
])
])]).
rcbox('black','',132,331,269,364,0,1,1,0,16,489,0,0,0,0,'1',0,[
]).
text('black',202,434,1,1,1,90,17,490,14,3,2,0,0,0,2,90,17,0,0,"",0,0,0,0,448,'',[
minilines(90,17,0,0,1,0,0,[
mini_line(90,14,3,0,0,0,[
str_block(0,90,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,90,14,3,0,0,0,0,0,0,0,
"Ipv4L3Protocol")])
])
])]).
rcbox('black','',132,427,269,460,0,1,1,0,16,491,0,0,0,0,'1',0,[
]).
text('black',585,11,1,0,1,179,17,496,14,3,0,0,0,0,2,179,17,0,0,"",0,0,0,0,25,'',[
minilines(179,17,0,0,0,0,0,[
mini_line(179,14,3,0,0,0,[
str_block(0,179,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,179,14,3,0,-2,1,0,0,0,0,
"Step in packet receive process:")])
])
])]).
text('black',480,595,1,0,1,408,17,498,14,3,0,0,0,0,2,408,17,0,0,"",0,0,0,0,609,'',[
minilines(408,17,0,0,0,0,0,[
mini_line(408,14,3,0,0,0,[
str_block(0,408,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,408,14,3,0,0,0,0,0,0,0,
"1. NetDevice calls the function registered at Node::m_receiveCallback")])
])
])]).
text('black',480,572,1,0,1,346,17,520,14,3,0,0,0,0,2,346,17,0,0,"",0,0,0,0,586,'',[
minilines(346,17,0,0,0,0,0,[
mini_line(346,14,3,0,0,0,[
str_block(0,346,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,346,14,3,0,0,0,0,0,0,0,
"2. This is typically the Node::ReceiveFromDevice() function")])
])
])]).
text('black',479,509,3,0,1,460,51,524,14,3,0,0,0,0,2,460,51,0,0,"",0,0,0,0,523,'',[
minilines(460,51,0,0,0,0,0,[
mini_line(426,14,3,0,0,0,[
str_block(0,426,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,426,14,3,0,-1,0,0,0,0,0,
"3. Node::ReceiveFromDevice stores a set of callbacks (protocol handlers)")])
]),
mini_line(460,14,3,0,0,0,[
str_block(0,460,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,460,14,3,0,-1,0,0,0,0,0,
" that are looked up based on protocol number and device. In this case, the lookup")])
]),
mini_line(300,14,3,0,0,0,[
str_block(0,300,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,300,14,3,0,-1,0,0,0,0,0,
"will result in Ipv4L3Protocol::Receive() being called.")])
])
])]).
text('black',480,425,4,0,1,499,68,531,14,3,0,0,0,0,2,499,68,0,0,"",0,0,0,0,439,'',[
minilines(499,68,0,0,0,0,0,[
mini_line(475,14,3,0,0,0,[
str_block(0,475,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,475,14,3,0,-2,0,0,0,0,0,
"4. Ipv4L3Protocol removes the IP header, checks checksum (if implemented), and ")])
]),
mini_line(467,14,3,0,0,0,[
str_block(0,467,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,467,14,3,0,-2,0,0,0,0,0,
"either Forwards the packet or calls ForwardUp(). ForwardUp() then looks up the ")])
]),
mini_line(499,14,3,0,0,0,[
str_block(0,499,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,499,14,3,0,-1,0,0,0,0,0,
"IP protocol number in an IPv4L4Demux to obtain a pointer to an Ipv4L4Protocol object,")])
]),
mini_line(191,14,3,0,0,0,[
str_block(0,191,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,191,14,3,0,-1,0,0,0,0,0,
"and calls the ::Receive() method.")])
])
])]).
text('black',281,548,1,0,1,140,17,541,14,3,2,0,0,0,2,140,17,0,0,"",0,0,0,0,562,'',[
minilines(140,17,0,0,0,0,0,[
mini_line(140,14,3,0,0,0,[
str_block(0,140,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,140,14,3,0,-1,0,0,0,0,0,
"Node::ProtocolHandlers")])
])
])]).
rcbox('black','',261,541,398,574,0,1,1,2,16,542,0,0,0,0,'1',0,[
]).
poly('black','',2,[
236,596,327,576],1,1,1,548,0,0,2,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',272,590,1,0,1,112,17,550,14,3,0,0,0,0,2,112,17,0,0,"",0,0,0,0,604,'',[
minilines(112,17,0,0,0,0,0,[
mini_line(112,14,3,0,0,0,[
str_block(0,112,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,112,14,3,0,0,0,0,0,0,0,
"m_receiveCallback")])
])
])]).
poly('black','',2,[
306,541,202,460],1,1,1,555,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
poly('black','',2,[
280,447,367,423],3,1,1,566,0,0,3,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',185,499,1,0,1,65,17,575,14,3,0,0,0,0,2,65,17,0,0,"",0,0,0,0,513,'',[
minilines(65,17,0,0,0,0,0,[
mini_line(65,14,3,0,0,0,[
str_block(0,65,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,65,14,3,0,-1,0,0,0,0,0,
"::Receive()")])
])
])]).
text('black',315,438,1,0,1,135,17,585,14,3,0,0,0,0,2,135,17,0,0,"",0,0,0,0,452,'',[
minilines(135,17,0,0,0,0,0,[
mini_line(135,14,3,0,0,0,[
str_block(0,135,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,135,14,3,0,-1,0,0,0,0,0,
"::GetProtocol(protocol)")])
])
])]).
poly('black','',2,[
201,426,201,366],1,1,1,593,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',211,390,1,0,1,65,17,597,14,3,0,0,0,0,2,65,17,0,0,"",0,0,0,0,404,'',[
minilines(65,17,0,0,0,0,0,[
mini_line(65,14,3,0,0,0,[
str_block(0,65,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,65,14,3,0,-1,0,0,0,0,0,
"::Receive()")])
])
])]).
text('black',480,291,6,0,1,438,102,612,14,3,0,0,0,0,2,438,102,0,0,"",0,0,0,0,305,'',[
minilines(438,102,0,0,0,0,0,[
mini_line(293,14,3,0,0,0,[
str_block(0,293,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,293,14,3,0,0,0,0,0,0,0,
"5. UdpL4Protocol is where the socket-independent")])
]),
mini_line(428,14,3,0,0,0,[
str_block(0,428,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,428,14,3,0,0,0,0,0,0,0,
"protocol logic for UDP is implemented. The Receive() method removes the")])
]),
mini_line(420,14,3,0,0,0,[
str_block(0,420,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,420,14,3,0,0,0,0,0,0,0,
"UDP header and looks up the per-flow context state, which is one or more")])
]),
mini_line(438,14,3,0,0,0,[
str_block(0,438,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,438,14,3,0,-1,0,0,0,0,0,
"Ipv4EndPoint objects stored in an Ipv4EndPointDemux (indexed by src addr,")])
]),
mini_line(405,14,3,0,0,0,[
str_block(0,405,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,405,14,3,0,-1,0,0,0,0,0,
"src port, dest addr, dest port). It then calls Ipv4EndPoint::ForwardUp()")])
]),
mini_line(66,14,3,0,0,0,[
str_block(0,66,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,66,14,3,0,-1,0,0,0,0,0,
"when done.")])
])
])]).
poly('black','',2,[
201,331,201,271],1,1,1,619,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',211,295,1,0,1,85,17,620,14,3,0,0,0,0,2,85,17,0,0,"",0,0,0,0,309,'',[
minilines(85,17,0,0,0,0,0,[
mini_line(85,14,3,0,0,0,[
str_block(0,85,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,85,14,3,0,-1,0,0,0,0,0,
"::ForwardUp()")])
])
])]).
poly('black','',2,[
282,335,369,311],3,1,1,630,0,0,3,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',317,326,1,0,1,62,17,631,14,3,0,0,0,0,2,62,17,0,0,"",0,0,0,0,340,'',[
minilines(62,17,0,0,0,0,0,[
mini_line(62,14,3,0,0,0,[
str_block(0,62,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,62,14,3,0,-1,0,0,0,0,0,
"::Lookup()")])
])
])]).
text('black',211,208,1,0,1,181,17,650,14,3,0,0,0,0,2,181,17,0,0,"",0,0,0,0,222,'',[
minilines(181,17,0,0,0,0,0,[
mini_line(181,14,3,0,0,0,[
str_block(0,181,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,181,14,3,0,-1,0,0,0,0,0,
"(m_rxCallback)->ForwardUp()")])
])
])]).
poly('black','',2,[
201,233,201,196],1,1,1,652,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',211,138,1,0,1,144,17,656,14,3,0,0,0,0,2,144,17,0,0,"",0,0,0,0,152,'',[
minilines(144,17,0,0,0,0,0,[
mini_line(144,14,3,0,0,0,[
str_block(0,144,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,144,14,3,0,-1,0,0,0,0,0,
"(m_rxCallback)->Recv()")])
])
])]).
text('black',149,17,1,0,1,321,21,683,17,4,0,0,0,0,2,321,21,0,0,"",0,0,0,0,34,'',[
minilines(321,21,0,0,0,0,0,[
mini_line(321,17,4,0,0,0,[
str_block(0,321,17,4,0,0,0,0,0,[
str_seg('black','Times-Roman',0,103680,321,17,4,0,0,0,0,0,0,0,
"Function/object trace for receiving a packet")])
])
])]).
poly('black','',2,[
199,163,199,126],1,1,1,691,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
group([
text('black',311,280,1,0,1,120,17,484,14,3,0,0,0,0,2,120,17,0,0,"",0,0,0,0,294,'',[
minilines(120,17,0,0,0,0,0,[
mini_line(120,14,3,0,0,0,[
str_block(0,120,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,120,14,3,0,0,0,0,0,0,0,
"Ipv4EndPointDemux")])
])
])]),
polygon('black','',6,[
309,276,324,305,419,305,439,277,309,277,309,276],0,1,1,0,485,0,0,0,0,0,'1',0,
"00",[
])
],
704,0,0,[
]).
text('black',480,190,3,0,1,363,51,708,14,3,0,0,0,0,2,363,51,0,0,"",0,0,0,0,204,'',[
minilines(363,51,0,0,0,0,0,[
mini_line(363,14,3,0,0,0,[
str_block(0,363,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,363,14,3,0,-1,0,0,0,0,0,
"6. Ipv4EndPoint has a callback where a Socket object is able to")])
]),
mini_line(304,14,3,0,0,0,[
str_block(0,304,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,304,14,3,0,-1,0,0,0,0,0,
"register a receive method. Here, this callback calls to")])
]),
mini_line(175,14,3,0,0,0,[
str_block(0,175,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,175,14,3,0,-1,0,0,0,0,0,
"UdpSocketImpl::ForwardUp()")])
])
])]).
text('black',480,106,3,0,1,446,51,712,14,3,0,0,0,0,2,446,51,0,0,"",0,0,0,0,120,'',[
minilines(446,51,0,0,0,0,0,[
mini_line(407,14,3,0,0,0,[
str_block(0,407,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,407,14,3,0,0,0,0,0,0,0,
"7. UdpSocketImpl itself calls the Recv() callback set by the Application")])
]),
mini_line(402,14,3,0,0,0,[
str_block(0,402,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,402,14,3,0,0,0,0,0,0,0,
"when data is ready to be read. The application can then call the socket")])
]),
mini_line(446,14,3,0,0,0,[
str_block(0,446,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,446,14,3,0,-1,0,0,0,0,0,
"Recv() or RecvFrom() methods to read data (or dummy data) from the socket.")])
])
])]).
group([
text('black',308,393,1,0,1,96,17,772,14,3,0,0,0,0,2,96,17,0,0,"",0,0,0,0,407,'',[
minilines(96,17,0,0,0,0,0,[
mini_line(96,14,3,0,0,0,[
str_block(0,96,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,96,14,3,0,0,0,0,0,0,0,
" Ipv4L4Demux")])
])
])]),
polygon('black','',6,[
306,389,321,418,416,418,436,390,306,390,306,389],0,1,1,0,771,0,0,0,0,0,'1',0,
"00",[
])
],
770,0,0,[
]).

Binary file not shown.

View File

@@ -1,352 +0,0 @@
%TGIF 4.1.43-QPL
state(0,37,100.000,83,0,0,16,0,9,1,1,0,0,3,2,1,0,'Times-Roman',0,80640,0,3,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
%
% @(#)$Header$
% %W%
%
unit("1 pixel/pixel").
color_info(11,65535,0,[
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
"red", 65535, 0, 0, 65535, 0, 0, 1,
"green", 0, 65535, 0, 0, 65535, 0, 1,
"blue", 0, 0, 65535, 0, 0, 65535, 1,
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
"pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
"CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
"black", 0, 0, 0, 0, 0, 0, 1,
"DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
]).
script_frac("0.6").
fg_bg_colors('black','white').
dont_reencode("FFDingbests:ZapfDingbats").
page(1,"",1,'').
group([
rcbox('black','',158,451,238,499,2,1,1,0,16,125,0,0,0,0,'1',0,[
]),
text('black',158,470,1,0,1,72,18,124,13,5,0,0,0,0,2,72,18,0,0,"",0,0,0,0,483,'',[
minilines(72,18,0,0,0,0,0,[
mini_line(72,13,5,0,0,0,[
str_block(0,72,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,72,13,5,0,0,0,0,0,0,0,
"NetDevice")])
])
])])
],
141,0,0,[
]).
group([
rcbox('black','',147,77,255,125,2,1,1,0,16,354,0,0,0,0,'1',0,[
]),
text('black',163,96,1,0,1,88,18,353,13,5,0,0,0,0,2,88,18,0,0,"",0,0,0,0,109,'',[
minilines(88,18,0,0,0,0,0,[
mini_line(88,13,5,0,0,0,[
str_block(0,88,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,88,13,5,0,0,0,0,0,0,0,
"Application")])
])
])])
],
352,0,0,[
]).
text('black',202,172,1,1,1,90,17,473,14,3,2,0,0,0,2,90,17,0,0,"",0,0,0,0,186,'',[
minilines(90,17,0,0,1,0,0,[
mini_line(90,14,3,0,0,0,[
str_block(0,90,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,90,14,3,0,0,0,0,0,0,0,
"UdpSocketImpl")])
])
])]).
rcbox('black','',132,165,269,198,0,1,1,0,16,474,0,0,0,0,'1',0,[
]).
text('black',202,241,1,1,1,88,17,475,14,3,2,0,0,0,2,88,17,0,0,"",0,0,0,0,255,'',[
minilines(88,17,0,0,1,0,0,[
mini_line(88,14,3,0,0,0,[
str_block(0,88,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,88,14,3,0,0,0,0,0,0,0,
"UdpL4Protocol")])
])
])]).
rcbox('black','',132,234,269,267,0,1,1,0,16,476,0,0,0,0,'1',0,[
]).
text('black',201,317,1,1,1,90,17,490,14,3,2,0,0,0,2,90,17,0,0,"",0,0,0,0,331,'',[
minilines(90,17,0,0,1,0,0,[
mini_line(90,14,3,0,0,0,[
str_block(0,90,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,90,14,3,0,0,0,0,0,0,0,
"Ipv4L3Protocol")])
])
])]).
rcbox('black','',131,310,268,343,0,1,1,0,16,491,0,0,0,0,'1',0,[
]).
text('black',540,56,1,0,1,180,17,496,14,3,0,0,0,0,2,180,17,0,0,"",0,0,0,0,70,'',[
minilines(180,17,0,0,0,0,0,[
mini_line(180,14,3,0,0,0,[
str_block(0,180,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,180,14,3,0,-2,1,0,0,0,0,
"Step in packet sending process:")])
])
])]).
text('black',480,420,4,0,1,460,68,524,14,3,0,0,0,0,2,460,68,0,0,"",0,0,0,0,434,'',[
minilines(460,68,0,0,0,0,0,[
mini_line(457,14,3,0,0,0,[
str_block(0,457,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,457,14,3,0,0,0,0,0,0,0,
"5. Ipv4Interface is an abstract base class; here, we depict the ArpIpv4Interface")])
]),
mini_line(460,14,3,0,0,0,[
str_block(0,460,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,460,14,3,0,-1,0,0,0,0,0,
"concrete class. This object looks up the MAC address if Arp is supported on this")])
]),
mini_line(454,14,3,0,0,0,[
str_block(0,454,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,454,14,3,0,0,0,0,0,0,0,
"NetDevice technology, and if there is a cache hit, it sends it to the NetDevice, or")])
]),
mini_line(197,14,3,0,0,0,[
str_block(0,197,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,197,14,3,0,-1,0,0,0,0,0,
"else it first initiates an Arp request.")])
])
])]).
text('black',479,354,3,0,1,476,51,531,14,3,0,0,0,0,2,476,51,0,0,"",0,0,0,0,368,'',[
minilines(476,51,0,0,0,0,0,[
mini_line(469,14,3,0,0,0,[
str_block(0,469,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,469,14,3,0,0,0,0,0,0,0,
"4. Ipv4L3Protocol adds the IP header, looks up a route, and sends the packet to an")])
]),
mini_line(476,14,3,0,0,0,[
str_block(0,476,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,476,14,3,0,-1,0,0,0,0,0,
"appropriate Ipv4Interface instance. In this example, the device is one that supports")])
]),
mini_line(322,14,3,0,0,0,[
str_block(0,322,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,322,14,3,0,-1,0,0,0,0,0,
"Arp, so the packet is sent to an ArpIpv4Interface object.")])
])
])]).
text('black',478,261,4,0,1,437,68,612,14,3,0,0,0,0,2,437,68,0,0,"",0,0,0,0,275,'',[
minilines(437,68,0,0,0,0,0,[
mini_line(293,14,3,0,0,0,[
str_block(0,293,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,293,14,3,0,0,0,0,0,0,0,
"3. UdpL4Protocol is where the socket-independent")])
]),
mini_line(387,14,3,0,0,0,[
str_block(0,387,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,387,14,3,0,0,0,0,0,0,0,
"protocol logic for UDP is implemented. The Send() method adds the")])
]),
mini_line(437,14,3,0,0,0,[
str_block(0,437,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,437,14,3,0,-1,0,0,0,0,0,
"UDP header, initializes the checksum, and sends the packet to the Ipv4 layer.")])
]),
mini_line(431,14,3,0,0,0,[
str_block(0,431,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,431,14,3,0,-1,0,0,0,0,0,
"Here, the Ipv4L3Protocol object is queried, and the Send() method is called.")])
])
])]).
poly('black','',2,[
201,308,201,271],2,1,1,619,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',208,278,1,0,1,47,17,620,14,3,0,0,0,0,2,47,17,0,0,"",0,0,0,0,292,'',[
minilines(47,17,0,0,0,0,0,[
mini_line(47,14,3,0,0,0,[
str_block(0,47,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,47,14,3,0,-1,0,0,0,0,0,
"::Send()")])
])
])]).
text('black',211,208,1,0,1,47,17,650,14,3,0,0,0,0,2,47,17,0,0,"",0,0,0,0,222,'',[
minilines(47,17,0,0,0,0,0,[
mini_line(47,14,3,0,0,0,[
str_block(0,47,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,47,14,3,0,-1,0,0,0,0,0,
"::Send()")])
])
])]).
poly('black','',2,[
201,233,201,196],2,1,1,652,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',211,138,1,0,1,87,17,656,14,3,0,0,0,0,2,87,17,0,0,"",0,0,0,0,152,'',[
minilines(87,17,0,0,0,0,0,[
mini_line(87,14,3,0,0,0,[
str_block(0,87,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,87,14,3,0,-1,0,0,0,0,0,
"Socket::Send()")])
])
])]).
text('black',149,17,1,0,1,310,21,683,17,4,0,0,0,0,2,310,21,0,0,"",0,0,0,0,34,'',[
minilines(310,21,0,0,0,0,0,[
mini_line(310,17,4,0,0,0,[
str_block(0,310,17,4,0,0,0,0,0,[
str_seg('black','Times-Roman',0,103680,310,17,4,0,0,0,0,0,0,0,
"Function/object trace for sending a packet")])
])
])]).
poly('black','',2,[
199,163,199,126],2,1,1,691,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',480,153,6,0,1,524,102,708,14,3,0,0,0,0,2,524,102,0,0,"",0,0,0,0,167,'',[
minilines(524,102,0,0,0,0,0,[
mini_line(399,14,3,0,0,0,[
str_block(0,399,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,399,14,3,0,-2,0,0,0,0,0,
"2. Socket::Send() forwards to UdpSocketImpl::DoSend() and later to ")])
]),
mini_line(173,14,3,0,0,0,[
str_block(0,173,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,173,14,3,0,-1,0,0,0,0,0,
"UdpSocketImpl::DoSendTo().")])
]),
mini_line(479,14,3,0,0,0,[
str_block(0,479,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,479,14,3,0,-1,0,0,0,0,0,
"These functions set the proper source and destination addresses, handle socket calls")])
]),
mini_line(524,14,3,0,0,0,[
str_block(0,524,14,3,0,-2,0,0,0,[
str_seg('black','Times-Roman',0,80640,524,14,3,0,-2,0,0,0,0,0,
"such as bind() and connect() and then the UdpL4Protocol::Send() function is called. As in a ")])
]),
mini_line(505,14,3,0,0,0,[
str_block(0,505,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,505,14,3,0,-1,0,0,0,0,0,
"real implementation, the socket must query the Ipv4 layer to find the right source address")])
]),
mini_line(187,14,3,0,0,0,[
str_block(0,187,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,187,14,3,0,-1,0,0,0,0,0,
"to match the destination address.")])
])
])]).
text('black',480,106,2,0,1,434,34,712,14,3,0,0,0,0,2,434,34,0,0,"",0,0,0,0,120,'',[
minilines(434,34,0,0,0,0,0,[
mini_line(413,14,3,0,0,0,[
str_block(0,413,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,413,14,3,0,-1,0,0,0,0,0,
"1. The Application has previously created a socket (here, a UdpSocket).")])
]),
mini_line(434,14,3,0,0,0,[
str_block(0,434,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,434,14,3,0,-1,0,0,0,0,0,
"It calls Socket::Send(). Either real data or dummy data is passed at the API.")])
])
])]).
text('black',377,315,1,1,1,60,17,774,14,3,2,0,0,0,2,60,17,0,0,"",0,0,0,0,329,'',[
minilines(60,17,0,0,1,0,0,[
mini_line(60,14,3,0,0,0,[
str_block(0,60,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,60,14,3,0,0,0,0,0,0,0,
"Ipv4Route")])
])
])]).
rcbox('black','',307,308,444,341,0,1,1,0,16,775,0,0,0,0,'1',0,[
]).
poly('black','',2,[
267,325,304,325],3,1,1,787,0,0,3,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',278,299,1,0,1,62,17,796,14,3,2,0,0,0,2,62,17,0,0,"",0,0,0,0,313,'',[
minilines(62,17,0,0,0,0,0,[
mini_line(62,14,3,0,0,0,[
str_block(0,62,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,62,14,3,0,-1,0,0,0,0,0,
"::Lookup()")])
])
])]).
text('black',200,385,1,1,1,102,17,803,14,3,2,0,0,0,2,102,17,0,0,"",0,0,0,0,399,'',[
minilines(102,17,0,0,1,0,0,[
mini_line(102,14,3,0,0,0,[
str_block(0,102,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,102,14,3,0,0,0,0,0,0,0,
"ArpIpv4Interface")])
])
])]).
rcbox('black','',130,378,267,411,0,1,1,0,16,804,0,0,0,0,'1',0,[
]).
poly('black','',2,[
199,380,199,343],2,1,1,810,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',206,350,1,0,1,47,17,811,14,3,0,0,0,0,2,47,17,0,0,"",0,0,0,0,364,'',[
minilines(47,17,0,0,0,0,0,[
mini_line(47,14,3,0,0,0,[
str_block(0,47,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,47,14,3,0,-1,0,0,0,0,0,
"::Send()")])
])
])]).
text('black',378,388,1,1,1,71,17,817,14,3,2,0,0,0,2,71,17,0,0,"",0,0,0,0,402,'',[
minilines(71,17,0,0,1,0,0,[
mini_line(71,14,3,0,0,0,[
str_block(0,71,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,71,14,3,0,0,0,0,0,0,0,
"ArpProtocol")])
])
])]).
rcbox('black','',308,381,445,414,0,1,1,0,16,818,0,0,0,0,'1',0,[
]).
poly('black','',2,[
268,398,305,398],3,1,1,819,0,0,3,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',279,372,1,0,1,62,17,820,14,3,2,0,0,0,2,62,17,0,0,"",0,0,0,0,386,'',[
minilines(62,17,0,0,0,0,0,[
mini_line(62,14,3,0,0,0,[
str_block(0,62,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,62,14,3,0,-1,0,0,0,0,0,
"::Lookup()")])
])
])]).
poly('black','',2,[
199,448,199,411],2,1,1,837,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',206,418,1,0,1,47,17,838,14,3,0,0,0,0,2,47,17,0,0,"",0,0,0,0,432,'',[
minilines(47,17,0,0,0,0,0,[
mini_line(47,14,3,0,0,0,[
str_block(0,47,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,47,14,3,0,-1,0,0,0,0,0,
"::Send()")])
])
])]).
text('black',371,173,1,1,1,26,17,842,14,3,2,0,0,0,2,26,17,0,0,"",0,0,0,0,187,'',[
minilines(26,17,0,0,1,0,0,[
mini_line(26,14,3,0,0,0,[
str_block(0,26,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,26,14,3,0,-1,0,0,0,0,0,
"Ipv4")])
])
])]).
rcbox('black','',301,166,438,199,0,1,1,0,16,843,0,0,0,0,'1',0,[
]).
text('black',272,157,1,0,1,148,17,844,14,3,2,0,0,0,2,148,17,0,0,"",0,0,0,0,171,'',[
minilines(148,17,0,0,0,0,0,[
mini_line(148,14,3,0,0,0,[
str_block(0,148,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,148,14,3,0,-1,0,0,0,0,0,
"::GetAddress(outgoing if)")])
])
])]).
poly('black','',2,[
269,182,306,182],3,1,1,846,0,0,3,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).

BIN
doc/manual/figures/node.dia Normal file

Binary file not shown.

View File

@@ -1,211 +0,0 @@
%TGIF 4.1.43-QPL
state(0,37,100.000,0,0,0,16,0,9,1,1,0,0,3,2,1,0,'Times-Italic',2,80640,0,8,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
%
% @(#)$Header$
% %W%
%
unit("1 pixel/pixel").
color_info(11,65535,0,[
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
"red", 65535, 0, 0, 65535, 0, 0, 1,
"green", 0, 65535, 0, 0, 65535, 0, 1,
"blue", 0, 0, 65535, 0, 0, 65535, 1,
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
"pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
"CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
"black", 0, 0, 0, 0, 0, 0, 1,
"DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
]).
script_frac("0.6").
fg_bg_colors('black','white').
dont_reencode("FFDingbests:ZapfDingbats").
page(1,"",1,'').
rcbox('black','',64,64,400,384,0,1,1,0,16,0,0,0,0,0,'1',0,[
]).
box('black','',280,432,555,464,0,1,1,17,0,0,0,0,0,'1',0,[
]).
text('black',384,435,1,0,1,56,18,18,13,5,0,0,0,0,2,56,18,0,0,"",0,0,0,0,448,'',[
minilines(56,18,0,0,0,0,0,[
mini_line(56,13,5,0,0,0,[
str_block(0,56,13,5,0,-1,0,0,0,[
str_seg('black','Courier-Bold',1,80640,56,13,5,0,-1,0,0,0,0,0,
"Channel")])
])
])]).
text('black',76,42,1,0,1,208,18,108,13,5,2,0,0,0,2,208,18,0,0,"",0,0,0,0,55,'',[
minilines(208,18,0,0,0,0,0,[
mini_line(208,13,5,0,0,0,[
str_block(0,208,13,5,0,0,0,0,0,[
str_seg('black','Courier-Bold',1,80640,208,13,5,0,0,0,0,0,0,0,
"class Node : public Object")])
])
])]).
group([
rcbox('black','',112,304,192,352,2,1,1,0,16,134,0,0,0,0,'1',0,[
]),
text('black',112,323,1,0,1,72,18,135,13,5,0,0,0,0,2,72,18,0,0,"",0,0,0,0,336,'',[
minilines(72,18,0,0,0,0,0,[
mini_line(72,13,5,0,0,0,[
str_block(0,72,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,72,13,5,0,0,0,0,0,0,0,
"NetDevice")])
])
])])
],
138,0,0,[
]).
group([
rcbox('black','',266,304,346,352,2,1,1,0,16,125,0,0,0,0,'1',0,[
]),
text('black',266,323,1,0,1,72,18,124,13,5,0,0,0,0,2,72,18,0,0,"",0,0,0,0,336,'',[
minilines(72,18,0,0,0,0,0,[
mini_line(72,13,5,0,0,0,[
str_block(0,72,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,72,13,5,0,0,0,0,0,0,0,
"NetDevice")])
])
])])
],
141,0,0,[
]).
poly('black','',2,[
304,351,304,430],3,1,1,167,0,2,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',219,304,1,0,1,24,37,177,30,7,2,0,0,0,2,24,37,0,0,"",0,0,0,0,334,'',[
minilines(24,37,0,0,0,0,0,[
mini_line(24,30,7,0,0,0,[
str_block(0,24,30,7,0,-2,0,0,0,[
str_seg('black','Times-Bold',1,195840,24,30,7,0,-2,0,0,0,0,0,
"...")])
])
])]).
text('black',220,98,1,0,1,24,37,182,30,7,2,0,0,0,2,24,37,0,0,"",0,0,0,0,128,'',[
minilines(24,37,0,0,0,0,0,[
mini_line(24,30,7,0,0,0,[
str_block(0,24,30,7,0,-2,0,0,0,[
str_seg('black','Times-Bold',1,195840,24,30,7,0,-2,0,0,0,0,0,
"...")])
])
])]).
text('black',420,116,2,0,1,136,36,183,13,5,2,0,0,0,2,136,36,0,0,"",0,0,0,0,129,'',[
minilines(136,36,0,0,0,0,0,[
mini_line(136,13,5,0,0,0,[
str_block(0,136,13,5,0,0,0,0,0,[
str_seg('black','Courier-Bold',1,80640,136,13,5,0,0,0,0,0,0,0,
"Unix-like C-based")])
]),
mini_line(80,13,5,0,0,0,[
str_block(0,80,13,5,0,-1,0,0,0,[
str_seg('black','Courier-Bold',1,80640,80,13,5,0,-1,0,0,0,0,0,
"socket API")])
])
])]).
text('black',414,212,3,0,1,232,54,198,13,5,2,0,0,0,2,232,54,0,0,"",0,0,0,0,225,'',[
minilines(232,54,0,0,0,0,0,[
mini_line(112,13,5,0,0,0,[
str_block(0,112,13,5,0,0,0,0,0,[
str_seg('black','Courier-Bold',1,80640,112,13,5,0,0,0,0,0,0,0,
"Callback-based")])
]),
mini_line(176,13,5,0,0,0,[
str_block(0,176,13,5,0,0,0,0,0,[
str_seg('black','Courier-Bold',1,80640,176,13,5,0,0,0,0,0,0,0,
"protocol demultiplexer")])
]),
mini_line(232,13,5,0,0,0,[
str_block(0,8,13,5,0,-1,0,0,0,[
str_seg('black','Courier-Bold',1,80640,8,13,5,0,-1,0,0,0,0,0,
"(")]),
str_block(0,216,13,3,0,-2,0,0,0,[
str_seg('black','Courier-Oblique',2,80640,216,13,3,0,-2,0,0,0,0,0,
"list of ProtocolHandlers")]),
str_block(0,8,13,5,0,-2,0,0,0,[
str_seg('black','Courier-Bold',1,80640,8,13,5,0,-2,0,0,0,0,0,
")")])
])
])]).
poly('black','',2,[
410,231,222,259],1,1,1,200,0,2,2,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
box('black','',56,401,229,433,0,1,1,250,0,0,0,0,0,'1',0,[
]).
text('black',119,409,1,0,1,56,18,251,13,5,0,0,0,0,2,56,18,0,0,"",0,0,0,0,422,'',[
minilines(56,18,0,0,0,0,0,[
mini_line(56,13,5,0,0,0,[
str_block(0,56,13,5,0,-1,0,0,0,[
str_seg('black','Courier-Bold',1,80640,56,13,5,0,-1,0,0,0,0,0,
"Channel")])
])
])]).
poly('black','',2,[
154,353,154,400],3,1,1,254,0,2,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
group([
rcbox('black','',98,96,206,144,2,1,1,0,16,1,0,0,0,0,'1',0,[
]),
text('black',114,115,1,0,1,88,18,2,13,5,0,0,0,0,2,88,18,0,0,"",0,0,0,0,128,'',[
minilines(88,18,0,0,0,0,0,[
mini_line(88,13,5,0,0,0,[
str_block(0,88,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,88,13,5,0,0,0,0,0,0,0,
"Application")])
])
])])
],
348,0,0,[
]).
group([
rcbox('black','',257,96,365,144,2,1,1,0,16,354,0,0,0,0,'1',0,[
]),
text('black',273,115,1,0,1,88,18,353,13,5,0,0,0,0,2,88,18,0,0,"",0,0,0,0,128,'',[
minilines(88,18,0,0,0,0,0,[
mini_line(88,13,5,0,0,0,[
str_block(0,88,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,88,13,5,0,0,0,0,0,0,0,
"Application")])
])
])])
],
352,0,0,[
]).
text('black',155,73,1,0,1,110,18,426,14,4,2,0,0,0,2,110,18,0,0,"",0,0,0,0,87,'',[
minilines(110,18,0,0,0,0,0,[
mini_line(110,14,4,0,0,0,[
str_block(0,110,14,4,0,-1,0,0,0,[
str_seg('black','Times-Italic',2,80640,110,14,4,0,-1,0,0,0,0,0,
"list of Applications")])
])
])]).
text('black',161,357,1,0,1,106,18,443,14,4,2,0,0,0,2,106,18,0,0,"",0,0,0,0,371,'',[
minilines(106,18,0,0,0,0,0,[
mini_line(106,14,4,0,0,0,[
str_block(0,106,14,4,0,-1,0,0,0,[
str_seg('black','Times-Italic',2,80640,106,14,4,0,-1,0,0,0,0,0,
"list of NetDevices")])
])
])]).
text('black',79,194,2,0,1,55,36,482,14,4,2,0,0,0,2,55,36,0,0,"",0,0,0,0,208,'',[
minilines(55,36,0,0,0,0,0,[
mini_line(53,14,4,0,0,0,[
str_block(0,53,14,4,0,0,0,0,0,[
str_seg('black','Times-Italic',2,80640,53,14,4,0,0,0,0,0,0,0,
"unique id")])
]),
mini_line(55,14,4,0,0,0,[
str_block(0,55,14,4,0,0,0,0,0,[
str_seg('black','Times-Italic',2,80640,55,14,4,0,0,0,0,0,0,0,
"system id")])
])
])]).
polygon('black','',7,[
158,271,305,271,288,291,173,291,159,273,160,273,158,271],2,1,1,0,493,8,0,0,0,0,'1',0,
"00",[
]).

Binary file not shown.

View File

@@ -1,227 +0,0 @@
%TGIF 4.1.43-QPL
state(0,37,100.000,0,64,0,32,0,9,1,1,1,0,0,0,1,0,'Courier-Bold',1,103680,0,3,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
%
% @(#)$Header$
% %W%
%
unit("1 pixel/pixel").
color_info(11,65535,0,[
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
"red", 65535, 0, 0, 65535, 0, 0, 1,
"green", 0, 65535, 0, 0, 65535, 0, 1,
"blue", 0, 0, 65535, 0, 0, 65535, 1,
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
"pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
"CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
"black", 0, 0, 0, 0, 0, 0, 1,
"DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
]).
script_frac("0.6").
fg_bg_colors('black','white').
dont_reencode("FFDingbests:ZapfDingbats").
page(1,"",1,'').
box('black','',32,48,240,256,0,3,1,0,0,0,0,0,0,'3',0,[
]).
text('black',64,10,1,0,1,121,28,3,22,6,0,0,0,0,2,121,28,0,0,"",0,0,0,0,32,'',[
minilines(121,28,0,0,0,0,0,[
mini_line(121,22,6,0,0,0,[
str_block(0,121,22,6,0,0,0,0,0,[
str_seg('black','Times-Roman',0,138240,121,22,6,0,0,0,0,0,0,0,
"class Packet")])
])
])]).
text('black',416,100,1,0,1,116,28,15,22,6,0,0,0,0,2,116,28,0,0,"",0,0,0,0,122,'',[
minilines(116,28,0,0,0,0,0,[
mini_line(116,22,6,0,0,0,[
str_block(0,116,22,6,0,0,0,0,0,[
str_seg('black','Times-Roman',0,138240,116,22,6,0,0,0,0,0,0,0,
"class Buffer")])
])
])]).
text('black',48,178,4,0,1,83,69,32,14,4,0,0,0,0,2,83,69,0,0,"",0,0,0,0,192,'',[
minilines(83,69,0,0,0,0,0,[
mini_line(80,14,4,0,0,0,[
str_block(0,80,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,80,14,4,0,-1,0,0,0,0,0,
"private data:")])
]),
mini_line(59,14,3,0,0,0,[
str_block(0,59,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,59,14,3,0,0,0,0,0,0,0,
"- unique id")])
]),
mini_line(83,14,3,0,0,0,[
str_block(0,83,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,83,14,3,0,0,0,0,0,0,0,
"- Buffer object")])
]),
mini_line(76,14,3,0,0,0,[
str_block(0,76,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,76,14,3,0,0,0,0,0,0,0,
"- Tags object")])
])
])]).
text('black',112,288,1,0,1,103,28,82,22,6,0,0,0,0,2,103,28,0,0,"",0,0,0,0,310,'',[
minilines(103,28,0,0,0,0,0,[
mini_line(103,22,6,0,0,0,[
str_block(0,103,22,6,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,138240,103,22,6,0,-1,0,0,0,0,0,
"class Tags")])
])
])]).
text('black',48,50,5,0,1,175,86,176,14,4,0,0,0,0,2,175,86,0,0,"",0,0,0,0,64,'',[
minilines(175,86,0,0,0,0,0,[
mini_line(105,14,4,0,0,0,[
str_block(0,105,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,105,14,4,0,-1,0,0,0,0,0,
"public functions:")])
]),
mini_line(80,14,3,0,0,0,[
str_block(0,80,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,80,14,3,0,-1,0,0,0,0,0,
"- constructors")])
]),
mini_line(175,14,3,0,0,0,[
str_block(0,175,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,175,14,3,0,-1,0,0,0,0,0,
"- add/remove/peek at Headers")])
]),
mini_line(155,14,3,0,0,0,[
str_block(0,155,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,155,14,3,0,-1,0,0,0,0,0,
"- add/remove/peek at Tags")])
]),
mini_line(88,14,3,0,0,0,[
str_block(0,88,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,88,14,3,0,0,0,0,0,0,0,
"- fragmentation")])
])
])]).
box('black','',384,144,614,352,0,3,1,245,0,0,0,0,0,'3',0,[
]).
text('black',400,274,4,0,1,204,69,246,14,4,0,0,0,0,2,204,69,0,0,"",0,0,0,0,288,'',[
minilines(204,69,0,0,0,0,0,[
mini_line(80,14,4,0,0,0,[
str_block(0,80,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,80,14,4,0,-1,0,0,0,0,0,
"private data:")])
]),
mini_line(193,14,3,0,0,0,[
str_block(0,193,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,193,14,3,0,0,0,0,0,0,0,
"- struct BufferData, a dynamically")])
]),
mini_line(160,14,3,0,0,0,[
str_block(0,160,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,160,14,3,0,0,0,0,0,0,0,
"varying byte buffer to which")])
]),
mini_line(204,14,3,0,0,0,[
str_block(0,204,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,204,14,3,0,0,0,0,0,0,0,
"data can be prepended or appended")])
])
])]).
text('black',400,146,5,0,1,188,86,247,14,4,0,0,0,0,2,188,86,0,0,"",0,0,0,0,160,'',[
minilines(188,86,0,0,0,0,0,[
mini_line(105,14,4,0,0,0,[
str_block(0,105,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,105,14,4,0,-1,0,0,0,0,0,
"public functions:")])
]),
mini_line(172,14,3,0,0,0,[
str_block(0,172,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,172,14,3,0,0,0,0,0,0,0,
"- Iterators to move byte buffer")])
]),
mini_line(171,14,3,0,0,0,[
str_block(0,171,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,171,14,3,0,0,0,0,0,0,0,
"pointers forward or backward")])
]),
mini_line(188,14,3,0,0,0,[
str_block(0,188,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,188,14,3,0,0,0,0,0,0,0,
"- functions to read and write data")])
]),
mini_line(132,14,3,0,0,0,[
str_block(0,132,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,132,14,3,0,-1,0,0,0,0,0,
"of various sized chunks")])
])
])]).
box('black','',96,324,304,532,0,3,1,264,0,0,0,0,0,'3',0,[
]).
text('black',112,454,4,0,1,167,69,265,14,4,0,0,0,0,2,167,69,0,0,"",0,0,0,0,468,'',[
minilines(167,69,0,0,0,0,0,[
mini_line(80,14,4,0,0,0,[
str_block(0,80,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,80,14,4,0,-1,0,0,0,0,0,
"private data:")])
]),
mini_line(167,14,3,0,0,0,[
str_block(0,167,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,167,14,3,0,0,0,0,0,0,0,
"- singly linked-list of TagData")])
]),
mini_line(158,14,3,0,0,0,[
str_block(0,158,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,158,14,3,0,0,0,0,0,0,0,
"structures, with a reference")])
]),
mini_line(32,14,3,0,0,0,[
str_block(0,32,14,3,0,0,0,0,0,[
str_seg('black','Times-Roman',0,80640,32,14,3,0,0,0,0,0,0,0,
"count")])
])
])]).
text('black',112,326,5,0,1,155,86,266,14,4,0,0,0,0,2,155,86,0,0,"",0,0,0,0,340,'',[
minilines(155,86,0,0,0,0,0,[
mini_line(105,14,4,0,0,0,[
str_block(0,105,14,4,0,-1,0,0,0,[
str_seg('black','Times-Bold',1,80640,105,14,4,0,-1,0,0,0,0,0,
"public functions:")])
]),
mini_line(80,14,3,0,0,0,[
str_block(0,80,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,80,14,3,0,-1,0,0,0,0,0,
"- constructors")])
]),
mini_line(155,14,3,0,0,0,[
str_block(0,155,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,155,14,3,0,-1,0,0,0,0,0,
"- templates to add, remove,")])
]),
mini_line(148,14,3,0,0,0,[
str_block(0,148,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,148,14,3,0,-1,0,0,0,0,0,
"or peek at Tags of various")])
]),
mini_line(31,14,3,0,0,0,[
str_block(0,31,14,3,0,-1,0,0,0,[
str_seg('black','Times-Roman',0,80640,31,14,3,0,-1,0,0,0,0,0,
"types")])
])
])]).
poly('black','',2,[
59,245,96,320],0,2,1,272,0,0,3,0,0,0,0,'2',0,0,
"0","",[
0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
]).
poly('black','',2,[
123,246,288,320],0,2,1,280,0,0,3,0,0,0,0,'2',0,0,
"0","",[
0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
]).
poly('black','',2,[
141,219,379,147],0,2,1,286,0,0,3,0,0,0,0,'2',0,0,
"0","",[
0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
]).
poly('black','',2,[
132,226,375,335],0,2,1,287,0,0,3,0,0,0,0,'2',0,0,
"0","",[
0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
]).

View File

@@ -1,23 +1,17 @@
TEXI2HTML = texi2html
TEXI2PDF = texi2dvi --pdf
EPSTOPDF = epstopdf
TGIF = tgif
DIA = dia
CONVERT = convert
CSS = --css-include=tutorial.css
SPLIT = --split section
DIA_SOURCES = pp.dia dumbbell.dia star.dia
TGIF_SOURCES = helpers.obj
DIA_EPS = ${DIA_SOURCES:.dia=.eps}
DIA_PNG = ${DIA_SOURCES:.dia=.png}
DIA_PDF = ${DIA_SOURCES:.dia=.pdf}
TGIF_EPS = ${TGIF_SOURCES:.obj=.eps}
TGIF_PNG = ${TGIF_SOURCES:.obj=.png}
TGIF_PDF = ${TGIF_SOURCES:.obj=.pdf}
all: html split-html pdf
# Note: tgif requires a valid x display to convert from .obj to .png.
@@ -28,9 +22,6 @@ images:
cd figures/; $(DIA) -t png $(DIA_SOURCES)
cd figures/; $(DIA) -t eps $(DIA_SOURCES)
cd figures/; $(foreach FILE,$(DIA_EPS),$(EPSTOPDF) $(FILE);)
cd figures/; $(TGIF) -print -png $(TGIF_SOURCES)
cd figures/; $(TGIF) -print -eps $(TGIF_SOURCES)
cd figures/; $(foreach FILE,$(TGIF_EPS),$(EPSTOPDF) $(FILE);)
html:
$(TEXI2HTML) ${CSS} tutorial.texi
@@ -43,7 +34,6 @@ pdf:
figures-clean:
cd figures/; rm -rf $(DIA_EPS); rm -rf $(DIA_PNG); rm -rf $(DIA_PDF)
cd figures/; rm -rf $(TGIF_EPS); rm -rf $(TGIF_PNG); rm -rf $(TGIF_PDF)
clean: # figures-clean
rm -rf tutorial.aux tutorial.cp tutorial.cps tutorial.fn tutorial.ky tutorial.pg tutorial.tp tutorial.vr tutorial.toc tutorial.log tutorial.pdf tutorial.html tutorial/

View File

@@ -1,18 +1,18 @@
Please write image files in a vector graphics format, when possible, and
generate the .png and .pdf versions on the fly (see ../Makefile).
Currently supported tools are dia and tgif. xfig could be added similarly
The currently supported tool is dia. xfig could be added similarly
if someone wants to add it. The main requirement for adding another format
is that the tool to edit it is freely available and that a cron script can
autogenerate the pdf and png from the figure source.
autogenerate the pdf and png from the figure source. Tgif (.obj) files
were once used but the file conversions require a valid X display to
be running, and are therefore to be avoided since our code server
does not run such a server. Tgif pdf conversions were also cumbersome.
Store the .dia, or .obj versions in mercurial, but not the .png or .pdfs.
Store the .dia versions in mercurial, but not the .png or .pdfs.
If the figure is not available in a vector graphics format, store both
a .png and a .pdf version in this directory.
If you add a source (.dia, .obj) file here, remember to add it to
If you add a source (.dia) file here, remember to add it to
the list of figure sources in the Makefile in the directory above
Note: tgif can convert from .obj to .pdf, but the pdf that results takes
up a whole page. Instead, we convert to an intermediate .eps step, and
then run epstopdf.

Binary file not shown.

View File

@@ -1,115 +0,0 @@
%TGIF 4.1.43-QPL
state(0,37,100.000,0,0,0,32,1,9,1,1,0,0,1,2,1,0,'Courier',0,80640,0,2,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
%
% @(#)$Header$
% %W%
%
unit("1 pixel/pixel").
color_info(11,65535,0,[
"magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
"red", 65535, 0, 0, 65535, 0, 0, 1,
"green", 0, 65535, 0, 0, 65535, 0, 1,
"blue", 0, 0, 65535, 0, 0, 65535, 1,
"yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
"pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
"cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
"CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
"white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
"black", 0, 0, 0, 0, 0, 0, 1,
"DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
]).
script_frac("0.6").
fg_bg_colors('black','white').
dont_reencode("FFDingbests:ZapfDingbats").
page(1,"",1,'').
text('black',272,195,2,0,1,248,36,0,13,5,0,0,0,0,2,248,36,0,0,"",0,0,0,0,208,'',[
minilines(248,36,0,0,0,0,0,[
mini_line(200,13,5,0,0,0,[
str_block(0,200,13,5,0,-8,0,0,0,[
str_seg('black','Courier',0,80640,200,13,5,0,-8,0,0,0,0,0,
"low-level APIs (all src/ ")])
]),
mini_line(248,13,5,0,0,0,[
str_block(0,248,13,5,0,-2,0,0,0,[
str_seg('black','Courier',0,80640,248,13,5,0,-2,0,0,0,0,0,
"directories except src/helper/)")])
])
])]).
rcbox('black','',96,240,384,288,5,1,1,0,16,2,0,0,0,0,'1',0,[
]).
text('black',192,259,1,0,1,112,18,3,13,5,2,0,0,0,2,112,18,0,0,"",0,0,0,0,272,'',[
minilines(112,18,0,0,0,0,0,[
mini_line(112,13,5,0,0,0,[
str_block(0,112,13,5,0,0,0,0,0,[
str_seg('black','Courier',0,80640,112,13,5,0,0,0,0,0,0,0,
"ns-3 simulator")])
])
])]).
poly('black','',2,[
272,208,240,240],0,1,1,17,0,0,2,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
poly('black','',2,[
240,176,240,240],1,1,1,18,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
rcbox('black','',176,128,384,176,5,1,1,0,16,25,0,0,0,0,'1',0,[
]).
text('black',192,131,2,0,1,120,36,26,13,5,2,0,0,0,2,120,36,0,0,"",0,0,0,0,144,'',[
minilines(120,36,0,0,0,0,0,[
mini_line(120,13,5,0,0,0,[
str_block(0,120,13,5,0,-1,0,0,0,[
str_seg('black','Courier',0,80640,120,13,5,0,-1,0,0,0,0,0,
"ns-3 helper API")])
]),
mini_line(96,13,5,0,0,0,[
str_block(0,96,13,5,0,-2,0,0,0,[
str_seg('black','Courier',0,80640,96,13,5,0,-2,0,0,0,0,0,
"(src/helper)")])
])
])]).
rcbox('black','',96,16,384,64,0,1,1,0,16,32,0,0,0,0,'1',0,[
]).
poly('black','',2,[
240,64,240,128],1,1,1,36,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',272,83,2,0,1,200,36,40,13,5,0,0,0,0,2,200,36,0,0,"",0,0,0,0,96,'',[
minilines(200,36,0,0,0,0,0,[
mini_line(200,13,5,0,0,0,[
str_block(0,200,13,5,0,-2,0,0,0,[
str_seg('black','Courier',0,80640,200,13,5,0,-2,0,0,0,0,0,
"helper APIs (src/helper/)")])
]),
mini_line(192,13,5,0,0,0,[
str_block(0,192,13,5,0,-1,0,0,0,[
str_seg('black','Courier',0,80640,192,13,5,0,-1,0,0,0,0,0,
"call into low-level APIs")])
])
])]).
poly('black','',2,[
272,96,240,128],0,1,1,41,0,0,2,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).
text('black',128,19,2,0,1,232,36,47,13,5,0,0,0,0,2,232,36,0,0,"",0,0,0,0,32,'',[
minilines(232,36,0,0,0,0,0,[
mini_line(224,13,5,0,0,0,[
str_block(0,224,13,5,0,-2,0,0,0,[
str_seg('black','Courier',0,80640,224,13,5,0,-2,0,0,0,0,0,
"ns-3 scripts (main programs)")])
]),
mini_line(232,13,5,0,0,0,[
str_block(0,232,13,5,0,-1,0,0,0,[
str_seg('black','Courier',0,80640,232,13,5,0,-1,0,0,0,0,0,
"- may use either or both APIs")])
])
])]).
poly('black','',2,[
144,64,144,240],1,1,1,50,0,0,0,0,0,0,0,'1',0,0,
"0","",[
0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[
]).