[Anet-checkins] CVS: Documentation/design/latex anetdesign.tex,1.5,1.6
Status: Abandoned
Brought to you by:
benad
From: Christopher J. <cwj...@us...> - 2002-01-06 19:54:04
|
Update of /cvsroot/anet/Documentation/design/latex In directory usw-pr-cvs1:/tmp/cvs-serv4539 Modified Files: anetdesign.tex Log Message: Don't worry I need to fix the dtd figure. Fixed a couple of formatting problems with the description environment. The contents of an item can start on a new line with the following hack: \item[foo]\mbox{}\\ This will be on a separate line. :) Index: anetdesign.tex =================================================================== RCS file: /cvsroot/anet/Documentation/design/latex/anetdesign.tex,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** anetdesign.tex 2002/01/05 16:46:35 1.5 --- anetdesign.tex 2002/01/06 19:54:01 1.6 *************** *** 85,89 **** \tableofcontents \listoffigures ! \listoftables % do we need an abstract? %\clearpage --- 85,90 ---- \tableofcontents \listoffigures ! ! % \listoftables % we don't have tables yet... % do we need an abstract? %\clearpage *************** *** 400,404 **** \begin{description} ! \item[Register/Unregister service] Given some service number, it registers that service for its calling module instance. You can also --- 401,405 ---- \begin{description} ! \item[Register/Unregister service]\mbox{}\\ Given some service number, it registers that service for its calling module instance. You can also *************** *** 410,414 **** command. ! \item[Send packet] Sends an ANet packet, query[3] or static data[4], to the ANet network. The cluster group[5] where the packet will be --- 411,415 ---- command. ! \item[Send packet]\mbox{}\\ Sends an ANet packet, query[3] or static data[4], to the ANet network. The cluster group[5] where the packet will be *************** *** 417,421 **** ANet packet" will be described in "Cluster Group Modules"[5]. ! \item[Get Status] Will make the ANet daemon return a packet describing its current status. The contents of this packet will be implementation --- 418,422 ---- ANet packet" will be described in "Cluster Group Modules"[5]. ! \item[Get Status]\mbox{}\\ Will make the ANet daemon return a packet describing its current status. The contents of this packet will be implementation *************** *** 424,428 **** going on in the daemon. ! \item[Get Status -- Start/Stop polling] From the time the daemon gets the "Start Polling" command to the time it gets the "Stop Polling" --- 425,429 ---- going on in the daemon. ! \item[Get Status -- Start/Stop polling]\mbox{}\\ From the time the daemon gets the "Start Polling" command to the time it gets the "Stop Polling" *************** *** 434,447 **** ignored. ! \item[Get Static Data] Given a primary and/or the secondary key, this will make ANet return all the static packets currectly stored locally that matches the key (or keys). ! \item[Change/Delete Static Data] Those commands will allow the module to change or delete some static packets currently stored locally. ! \item[Open TWDTC] Given the protocol, the ``unique address'' and the "subnet" of the other node, ANet will try to establish a Two-Way Data --- 435,448 ---- ignored. ! \item[Get Static Data]\mbox{}\mbox{}\\ Given a primary and/or the secondary key, this will make ANet return all the static packets currectly stored locally that matches the key (or keys). ! \item[Change/Delete Static Data]\mbox{}\\ Those commands will allow the module to change or delete some static packets currently stored locally. ! \item[Open TWDTC]\mbox{}\\ Given the protocol, the ``unique address'' and the "subnet" of the other node, ANet will try to establish a Two-Way Data *************** *** 453,466 **** can be used to identify the TWDTC with the other TWDTC commands. ! \item[Read/Write TWDTC] Read or write some data in the TWDTC. This is similar to reading or writing data in a TCP socket. ! \item[Close TWDTC] Given an open TWDTC ID\footnote{If you know what "TWDTC ID" means, then you're ready to be a developer for ANet!}, closes the identified channel. ! \item[Get Config] Returns the readeable tags in the configuration files \xs{sec:rtw}. Each tag in the configuration files can have --- 454,467 ---- can be used to identify the TWDTC with the other TWDTC commands. ! \item[Read/Write TWDTC]\mbox{}\\ Read or write some data in the TWDTC. This is similar to reading or writing data in a TCP socket. ! \item[Close TWDTC]\mbox{}\\ Given an open TWDTC ID\footnote{If you know what "TWDTC ID" means, then you're ready to be a developer for ANet!}, closes the identified channel. ! \item[Get Config]\mbox{}\\ Returns the readeable tags in the configuration files \xs{sec:rtw}. Each tag in the configuration files can have *************** *** 469,473 **** contain. Otherwise, they remain to their default value. ! \item[Change Config] Allows the client connection module to change tags in the configuration file, it it has the right to do so. The --- 470,474 ---- contain. Otherwise, they remain to their default value. ! \item[Change Config]\mbox{}\\ Allows the client connection module to change tags in the configuration file, it it has the right to do so. The *************** *** 644,648 **** \section{Cluster Group Modules} \label{sec:cgm} The Cluster Group Modules are used to duplicate, when needed, data ! between different clusters[1]. \subsection{Design} --- 645,649 ---- \section{Cluster Group Modules} \label{sec:cgm} The Cluster Group Modules are used to duplicate, when needed, data ! between different clusters \xs{sec:rtw}. \subsection{Design} *************** *** 659,663 **** \subsubsection{Input/Output for the Cluster Group Modules} ! As input, the Cluster Groups need two things each time their "main" function is called. First, they need a list of cluster IDs. Those are unique numbers that identify all the clusters you have to receive or --- 660,664 ---- \subsubsection{Input/Output for the Cluster Group Modules} ! As input, the Cluster Groups need two things each time their \texttt{main} function is called. First, they need a list of cluster IDs. Those are unique numbers that identify all the clusters you have to receive or *************** *** 690,694 **** follows byte-ordering and memory alignment of the compiled deamon. Also, the structure is much more flexible than the External ! one\footnote{}. The AIPs are broken into two: the header and the data. The size of --- 691,696 ---- follows byte-ordering and memory alignment of the compiled deamon. Also, the structure is much more flexible than the External ! one\footnote{What I mean is that, most of the time, doing a simple ! typecasting is enough to retrieve the data you want.}. The AIPs are broken into two: the header and the data. The size of *************** *** 737,742 **** \begin{fmpage}{\textwidth} \begin{verbatim} ! <!-- Cluster Group. Contains references to Clusters that compose ! that Cluster Group. --> <!ELEMENT ClusterGroup (ClusterRef)+> <!ATTLIST ClusterGroup %name; %moduleName; %args; %security;> --- 739,743 ---- \begin{fmpage}{\textwidth} \begin{verbatim} ! <!-- Cluster Group. Contains references to Clusters that compose that Cluster Group. --> <!ELEMENT ClusterGroup (ClusterRef)+> <!ATTLIST ClusterGroup %name; %moduleName; %args; %security;> *************** *** 790,794 **** "definition kind" and the definition itself. The definition will be used be the Handshaking Protocol Modules to tell to the other node ! what are the security requirements of the cluster. The second function, the optional one, is used to do ``forced'' --- 791,795 ---- "definition kind" and the definition itself. The definition will be used be the Handshaking Protocol Modules to tell to the other node ! what are the security xrequirements of the cluster. The second function, the optional one, is used to do ``forced'' *************** *** 852,856 **** be sent in a similar manner to the other Core Modules. Unused commands will be finally deleted if they were unused by all the Core ! Modules.(1) The input packets are AIPs. There is one buffer for all the cluster, --- 853,859 ---- be sent in a similar manner to the other Core Modules. Unused commands will be finally deleted if they were unused by all the Core ! Modules.\footnote{The Run-Time wrapper \xs{sec:rtw} will allow you to create as ! many new commands as you want. Actually, commands that are ! unrecognized by the wrapper will be sent to the Core Modules.} The input packets are AIPs. There is one buffer for all the cluster, *************** *** 862,873 **** which are totally platform independant. The deamon will provide some functions to transform an AIP to an AEP, though the modules might have ! to set some values by themselves(2). \subsubsection{Core Modules} Here is a high-level description of the Core Modules that will be ! implemented for the first versions of ANet.(3) ! ! Query Module This module will implement queries[1] for ANet. A query packet is sent to a connection only if the same packet was not sent recently and if --- 865,885 ---- which are totally platform independant. The deamon will provide some functions to transform an AIP to an AEP, though the modules might have ! to set some values by themselves.\footnote{For example, the ! \emph{Time-to-Live} exists only in the AEPs (for query AEPs), so it is up ! to the Query Module to fill the value. Note that the format or the ! AEPs will be very similar to the format of the AIP, though without ! memory alignment and with strict rules for byte ordering.} \subsubsection{Core Modules} Here is a high-level description of the Core Modules that will be ! implemented for the first versions of ANet.\footnote{The modules were ! already described in the development introduction. They don't really ! have a high-level design, and the low-level design will be covered ! during development. That's because it's too simple (Query Module) or ! too complex (Static Data and TWDT Module) to be worth the time ! investment. Don't worry, the modules will be thoroughly documented ! once a stable implementation will be done.} + \paragraph{Query Module} This module will implement queries[1] for ANet. A query packet is sent to a connection only if the same packet was not sent recently and if *************** *** 878,884 **** sent, in the form of a simple checksum(4) and the origin of each packet. - - Static Data Module This module will implement Static Data[2] in ANet. It will mostly use the hard disk to store the data, though it might need a larger cache --- 890,895 ---- sent, in the form of a simple checksum(4) and the origin of each packet. + \paragraph{Static Data Module} This module will implement Static Data[2] in ANet. It will mostly use the hard disk to store the data, though it might need a larger cache *************** *** 886,891 **** packets. ! TWDT Module ! This module will implement Anonymous Two-Way Data Transfers (TWDT[3]) in ANet. Its input come only from the client commands[4] made for the --- 897,901 ---- packets. ! \paragraph{TWDT Module} This module will implement Anonymous Two-Way Data Transfers (TWDT[3]) in ANet. Its input come only from the client commands[4] made for the *************** *** 895,912 **** Communication[5], even though the caching of the queries it needs to produce is handled by the TWDT Module itself. - - Managing Connections As input, the modules will always have a list of the connections, and their state. That list is kept in the parsed configuration file[5]. Here are the possible states. - - Open - The connection is open, thus it will accept input data and produce output data. - On Hold - The connection cannot do any input or output, but will soon become either Open again or be Closed. - Closed - The connection is forever closed. The connection will soon be removed from the connection list. The Core Modules cannot, by themselves, change the state of a connection. Only Cluster Filter Modules[6] and by Handshaking Protocol Modules. --- 905,922 ---- Communication[5], even though the caching of the queries it needs to produce is handled by the TWDT Module itself. + \subsubsection{Managing Connections} As input, the modules will always have a list of the connections, and their state. That list is kept in the parsed configuration file[5]. Here are the possible states. + \begin{description} + \item[Open]\mbox{}\\ + The connection is open, thus it will accept input data and produce output data. + \item[On Hold]\mbox{}\\ + The connection cannot do any input or output, but will soon become either Open again or be Closed. + \item[Closed]\mbox{}\\ + The connection is forever closed. The connection will soon be removed from the connection list. + \end{description} The Core Modules cannot, by themselves, change the state of a connection. Only Cluster Filter Modules[6] and by Handshaking Protocol Modules. *************** *** 1090,1093 **** --- 1100,1217 ---- \end{center} \label{fig:daemon} \caption{High-Level Structure of the ANet Daemon} + \end{figure} + + \begin{figure} + \begin{verbatim} + <!-- ******** Generic Entities ******** --> + <!ENTITY ANet.XMLVersion % 1.0a1> + + <!-- ******* Attribute Entities ******* --> + + <!-- Unique name for the element type. --> + <!ENTITY name % "name ID #REQUIRED"> + + <!-- Module name corresponding to that element. + A Module Instance will be created for each element with a module name. --> + <!ENTITY moduleName % "module CDATA #REQUIRED"> + + <!-- Arguments given to the module. They are POSIX-style arguments. + One-letter arguments: "-c -v" or "-cv". + String arguments: "-_-file="a.txt" (mentally delete underscore; + XML doesn't allow me to write that directly in XML comments). + You can mix both style of arguments. --> + <!ENTITY args % "args CDATA #IMPLIED"> + + <!-- Element security. This limits access for the Client Connection + Modules. The security attribute of an element is the one it has, if it's + not "no_change", otherwise it is the one from its closest ancestor with a + value other than "no_change". --> + <!ENTITY security % "access (r | w | rw | no_access | no_change) no_change"> + + <!-- ************ Elements ************ --> + + <!-- #FIXED attributes are values that can be changed only at run-time. + Their default are discarded when parsing and replaced with the generated + value. --> + + <!-- Root element --> + <!ELEMENT ANet (ClientConnection)+, BandwidthManager, (ClusterGroup)+, CoreModules, (Cluster)+> + <!ATTLIST ANet %security;> + + <!-- Cluster Group. Contains references to Clusters that compose + that Cluster Group. --> + <!ELEMENT ClusterGroup (ClusterRef)+> + <!ATTLIST ClusterGroup %name; %moduleName; %args; %security;> + + <!-- Cluster. Contains a Handshake Protocol and if needed + a Cluster Filter. --> + <!ELEMENT Cluster HandshakeProtocol, (ClusterFilter)?> + <!ATTLIST Cluster %id; %security; + id CDATA #FIXED> + + <!-- Handshake Protocol. Contains a list of initial connections + (live connections once opened) --> + <!ELEMENT HandshakeProtocol (Connection)*> + <!ATTLIST HandshakeProtocol %moduleName; %args; %security; + minConnections CDATA "0" + maxConnections CDATA "-1"> + + <!-- Connection. Has a Connection Protocol and, if needed, + a Packet Protocol. --> + <!ELEMENT Connection (PacketProtocol)?, ConnectionProtocol, (DataTransform)*> + <!ATTLIST Connection %security; + status (open | on_hold | closed) #FIXED + id CDATA #FIXED + inBuffer CDATA #FIXED + outBuffer CDATA #FIXED> + + <!-- Core Modules. Simply contains a list of CoreModule elements. --> + <!ELEMENT CoreModules (CoreModule)+> + <!ATTLIST CoreModules %security;> + + <!-- Those are empty elements. If you want those elements to contain an XML + structure, then define an attribute that contains a reference to an external + XML document. --> + + <!-- Client Connection Module --> + <!ELEMENT ClientConnection EMPTY> + <!ATTLIST ClientConnection %moduleName; %args; %security;> + + <!-- Bandwidth Manager Module --> + <!ELEMENT BandwidthManager EMPTY> + <!ATTLIST BandwidthManager %moduleName; %args; %security;> + + <!-- Core Module --> + <!ELEMENT CoreModule EMPTY> + <!ATTLIST CoreModule %moduleName; %args; %security;> + + <!-- Cluster Filter Module --> + <!ELEMENT ClusterFilter EMPTY> + <!ATTLIST ClusterFilter %moduleName; %args; %security;> + + <!-- Reference to a Cluster element --> + <!ELEMENT ClusterRef EMPTY> + <!ATTLIST ClusterRef + name IDREF #REQUIRED> + + <!-- Packet Protocol Module --> + <!ELEMENT PacketProtocol EMPTY> + <!ATTLIST PacketProtocol %moduleName; %args; %security;> + + <!-- Connection Protocol Module --> + <!ELEMENT ConnectionProtocol EMPTY> + <!ATTLIST ConnectionProtocol %moduleName; %args; %security; + id CDATA #FIXED + peerID CDATA #REQUIRED + subnet CDATA "Internet"> + + <!-- Data Transformation Module. Data Transformation Modules will be used + in ascending order of "order" for output (to the network), in descending + order for input (from the network). --> + <!ELEMENT DataTransform EMPTY> + <!ATTLIST DataTransform %moduleName; %args; %security; + order CDATA "-1"> + \end{verbatim} + \label{fig:completedtd} \caption{ANet Complete DTD} \end{figure} |