<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. --><!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
<!ENTITY RFC3654 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3654.xml">
<!ENTITY RFC3746 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3746.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
<!ENTITY FE-MODEL SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-forces-model-16.xml">
<!ENTITY FORCES-PROTOCOL SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-forces-protocol-21.xml">
<!ENTITY FORCES-SCTP-TML SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-forces-sctptml-05.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="no" ?>
<!-- Start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-ietf-forces-implementation-experience-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="ForCES Implementation Experience Draft">ForCES Implementation Experience Draft</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

		<author fullname="Evangelos Haleplidis" initials="E.H." surname="Haleplidis">
			<organization>University of Patras</organization>
			<address>
				<postal>
					<street/>
					<!-- Reorder these if your country does things differently -->
					<city>Patras</city>
					<region/>
					<code/>
					<country>Greece</country>
				</postal>
				<email>ehalep@ece.upatras.gr</email>
				<!-- uri and facsimile elements may also be added -->
			</address>
		</author>
		<author fullname="Odysseas Koufopavlou" initials="O.K." surname="Koufopavlou">
			<organization>University of Patras</organization>
			<address>
				<postal>
					<street/>
					<!-- Reorder these if your country does things differently -->
					<city>Patras</city>
					<region/>
					<code/>
					<country>Greece</country>
				</postal>
				<email>odysseas@ece.upatras.gr</email>
				<!-- uri and facsimile elements may also be added -->
			</address>
		</author>
		<author fullname="Spyros Denazis" initials="S.D." surname="Denazis">
			<organization>University of Patras</organization>
			<address>
				<postal>
					<street/>
					<!-- Reorder these if your country does things differently -->
					<city>Patras</city>
					<region/>
					<code/>
					<country>Greece</country>
				</postal>
				<email>sdena@upatras.gr</email>
				<!-- uri and facsimile elements may also be added -->
			</address>
		</author>

    <date year="2009"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Routing</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>ForCES</keyword>
    <keyword>Interoperability</keyword>
    <keyword>Implementation</keyword>
    <keyword>Experience</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
    <t>The forwarding and Control Element Separation (ForCES) protocol 
   defines a standard communication and control mechanism through which 
   a Control Element (CE) can control the behavior of a Forwarding 
   Element (FE). This document captures the experience of implementing the ForCES
   protocol and model. It's aim is to help others by providing examples and possible strategies
   for implementing the ForCES protocol.</t>
    </abstract>
  </front>

  <middle>
    <section title="Terminology and Conventions">
      <t/>

      <section title="Requirements Language">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref target="RFC2119"></xref>.</t>
      </section>
    </section>

    <section title="Introduction">
      <t> Forwarding and Control Element Separation (ForCES) defines an
   architectural framework and associated protocols to standardize
   information exchange between the control plane and the forwarding
   plane in a ForCES Network Element (ForCES NE).  <xref target="RFC3654"></xref> has defined
   the ForCES requirements, and <xref target="RFC3746"></xref>  has defined the ForCES
   framework.</t>
      <t>The ForCES protocol works in a master-slave mode in which FEs are slaves and CEs
   are masters.  The protocol includes commands for transport of Logical Function Block (LFB) configuration information, association setup,
   status, and event notifications, etc. The reader is encouraged to read <xref target="I-D.ietf-forces-protocol">FE-protocol</xref> for further
   information.</t>
      <t>The <xref target="I-D.ietf-forces-model">FE-MODEL</xref> presents a formal way to define FE
   Logical Function Blocks (LFBs) using XML.  LFB configuration
   components, capabilities, and associated events are defined when the
   LFB is formally created.  The LFBs within the FE are accordingly
   controlled in a standardized way by the ForCES protocol.</t>
      <t>The TML transports the PL messages.  The TML is where the issues of
   how to achieve transport level reliability, congestion control,
   multicast, ordering, etc. are handled.  It is expected that more than
   one TML will be standardized.  The various possible TMLs could vary
   their implementations based on the capabilities of underlying media
   and transport.  However, since each TML is standardized,
   interoperability is guaranteed as long as both endpoints support the
   same TML.  All ForCES Protocol Layer implementations MUST be portable
  across all TMLs.  Although more than one TML may be standardized
  for the ForCES Protocol, all ForCES implementations MUST implement the
   <xref target="I-D.ietf-forces-sctptml">SCTP-TML</xref>.</t>
   
    <section title="Document Goal">
      <t>This document captures the experience of implementing the ForCES protocol and model 
      and it's main goal is not to tell others how to implement, but to provide alternatives, ideas and proposals
      as how it can be implemented.</t>
      <t>Also, this document mentions possible problems and potential choices that can be made,
       in an attempt to help implementors develop their own products.</t>
      <t>Additionally this document takes into account that the reader has become familiar with 
      the three main ForCES document, the <xref target="I-D.ietf-forces-protocol">FE-protocol</xref>, the <xref target="I-D.ietf-forces-model">FE-MODEL</xref> and the <xref target="I-D.ietf-forces-sctptml">SCTP-TML</xref>.</t>
      </section>
   <section title="Definitions">
    <t> This document follows the terminology defined by the ForCES
   Requirements in <xref target="RFC3654"></xref> and by the ForCES framework in <xref target="RFC3746"></xref>.</t>
   </section>
    </section>

  <section title="ForCES Architecture">
  <t>This section discusses the ForCES architecture, difficulties and how to overcome them.</t>
  <section title="Pre-association setup - Initial Configuration">
  <t>The initial configuration of the FE and the CE respectively is done by the FE Manager and the CE Manager.
  These entities has not as yet been standardized and anyone can build their own. It is expected that somehow 
  they will talk to each other and exchange details regarding the upcoming associations. Any developer can create
  any Manager, but at least they should be able to exchange the following details:</t>
  <t>From the FE side:</t>
  <t><list style="numbers">
    <t>FEID</t>
    <t>FE IP, if your FE and CE will be communicating via network.</t>
    <t>TML. The TML that you will be using. If you skip this, then SCTP MUST be chosen as default from the CE side.</t>
    <t>Priority ports. If you also skip this, then the CE MUST use the default ones from the respective TML rfc.</t>
  </list></t>
  <t>From the CE side:</t>
  <t><list style="numbers">
    <t>CEID</t>
    <t>CE IP, if your FE and CE will be communicating via network.</t>
    <t>TML. The TML that you will be using. If you skip this, then SCTP MUST be chosen as default from the FE side.</t>
    <t>Priority ports. If you also skip this, then the FE MUST use the default ones from the respective TML rfc.</t>
  </list></t>
  </section>
  <section title="TML">
  <t>All ForCES implementations MUST support the SCTP as TML. Even if another TML will be chosen by the developer, SCTP
  is mandatory and MUST be supported.</t>
  <t>There are several issues that should concern a developer for the TML.</t>
  <t><list style="numbers">
    <t>Security. TML must be secure according to the respective draft. For SCTP you have to use IPSec.</t>
    <t>NAT issues. ForCES can be deployed everywhere and can run over SCTP/IP. If you are behind a NAT, you must forward the
    TML priority ports to your CE who listens at these ports. The issue is what happens to the ports that the FE uses.
    Unless you bind the same port numbers to the FE, your FE would have a random port number. This means that port forwarding
    to the FE must include all sctp ports. The CE can be easily behind a NAT since it will bind the specific sctp ports. 
    In order for the FE to work, it must either have a global IP, or it must bind specific ports that are forwarded to it
    unless all sctp ports are forwarded to the FE.</t>
  </list></t>
  </section>
  <section title="Model">
  <t>The model is very dynamic and can be used to model anything. Using the basic atomic values that
  are defined, new datatypes can be built using atomic (single valued) and/or compound (structures and arrays).</t>
  <t>The difficulty is to create something that is completely scalable so a develeper doesn't need to write the same
  code for new LFBs, or for new components etc. Just create code for the defined atomic values
  and then new components can be built based on already written code.</t>
  <t>The model itself provides the key which is inheritance.</t>
  <section title="Components">
  <t>First, a basic component needs to be created as the mother of all the components with the basic parameters of all the
  components:</t>
  <t><list style="symbols">
    <t>The ID of the component.</t>
    <t>The access rights of that component.</t>
    <t>If it is of variable length.</t>
    <t>If it is an optional component.</t>    
    <t>The size of its data.</t>
  </list></t>
  <t>Next, some basic functions are in order:</t>
  <t><list style="symbols">
    <t>A common constructor.</t>
    <t>A common deconstructor.</t>
    <t>Retrieve Component ID.</t>
    <t>Retrieve access right property.</t>
    <t>Query if it is an optional component.</t>
    <t>Get Full Data.</t>
    <t>Set Full Data.</t>
    <t>Get Sparse Data.</t>
    <t>Set Sparse Data.</t>
    <t>Del Full Data.</t>
    <t>Del Sparse Data.</t>
    <t>Get Hardware Value.</t>
    <t>Set Hardware Value.</t>
    <t>Del Hardware Value.</t>
    <t>Get Data.</t>
    <t>Clone component.</t>
  </list></t>
  <t>While almost all functions are logical, the last function seems out of place. That function MUST return a new 
  component that has the exact same values and attributes. This function is especially useful in array components.</t>
  <t>Now any atomic datatype can be built as a child of that basic component which will inherit all the functions and 
  if necessary override the mother's functions.</t>
  <t>Next struct components can be built. A struct component is a component itself, but contains an array of basic
  components. The ID of the component is the array index. The Clone function must create and return a similar struct 
  component.</t>
  <t>The most difficult component to be built is the array. The difficulty lie in the actual benefit of the model. You have
  absolute freedom over what you build. An array is an array of components. In all rows you have the exact same type of 
  component either a single component or a specific struct. The struct can have multiple basic components, or a combination of
  basic components, structs and arrays and so on. So, the difficulty lies in how do to create a new row since the array is
  very dynamic. This is where the clone function is very useful. For the array you need a mother component. Once a set
  command is received, the mother component can spawn a new component and adds them into the array, and with the set 
  fulldata the value is set in the recently spawned component, as the spawned component knows how the data is created.</t>
  <t>Once the basic constructors of all possible components are created, then a developer only has to create his LFB 
  components or datatypes as a child of one of the already created components and the only thing the developer really 
  needs to add, is the three functions of Get/Set/Del hardware value of each component. The rest is the same.</t>
  </section>
  <section title="LFBs">
  <t>The same architecture in the components can be used for the LFBs. The parent LFB has some basic attributes:</t>
  <t><list style="symbols">
    <t>The LFB Class ID.</t>
    <t>The LFB Instance ID.</t>
    <t>An Array of Components.</t>
  </list></t>
  <t>Then some common functions:</t>
  <t><list>
    <t>Handle Configuration Command.</t>
    <t>Handle Query Command.</t>
    <t>Get Class ID.</t>
    <t>Get Instance ID.</t>
  </list></t>
  <t>Once these are created each LFB can inherit all these from the parent and the only thing it has to do is to add
  the components that have already been created.</t>
  <t>An example of this is the following. The code next creates a part of FEProtocolLFB:</t>
  <figure>
    <artwork align="center"><![CDATA[
//FEID
cui = new Component_uInt(FEPO_FEID, ACCESS_READ_ONLY, FE_id); 
Components[cui->get_ComponentId()]=cui; //Add component

//Current FEHB Policy Value
cub = new Component_uByte(FEPO_FEHBPolicy, ACCESS_READ_WRITE, 0); 
Components[cub->get_ComponentId()]=cub; //Add component

//FEIDs for BackupCEs Array
cui = new Component_uInt(0, ACCESS_READ_WRITE, 0); 
ca = new Component_Array(FEPO_BackupCEs, ACCESS_READ_WRITE);
ca->AddRow(cui, 1);
ca->AddMotherComponent(cui);
Components[ca->get_ComponentId()]=ca; //Add BackupCEs Array component
]]></artwork>
  </figure>
  <t>Then all it is required is an LFBHandler that will have an array of all the LFBs:</t>
  <t>LFBs[ClassID][InstanceID][LFB].</t>
  </section>
  </section>
  <section title="Protocol">
  <section title="TLVs">
  <t>Since the model is so free to create anything the developer needs, the protocol itself has been created thus to provide
  the user the freedom to manipulate any component. This creates some difficulties in developing a scalable architecture
  for handling the protocol messages.</t>
  <t>Another difficulty arises from the batching capabilities of the protocol. You can have multiple Operations within a 
  message, you can select more than one LFB to command, and more than one component to manipulate.</t>
  <t>A possible solution is again provided by inheritance. There are two basic components in a protocol message.</t>
  <t><list style="numbers">
    <t>A main header.</t>
    <t>The rest of the packet.</t>
  </list></t>
  <t>The rest of the packet is divided in Type-Length-Value (TLV) packets, and in one case Index-Length-Value (ILV)
  packets.</t>
  <t>The possible TLVs and ILVs the are described in detail in the forces protocol rfc.</t>
  <t>A TLV's main attributes are:</t>
  <t><list style="symbols">
    <t>Type</t>
    <t>Length</t>
    <t>Data</t>
    <t>An array of TLVs.</t>
  </list></t>
  <t>The array of TLVs is the next level of TLVs for this TLV.</t>
  <t>A TLVs common function could be:</t>
  <t><list style="symbols">
    <t>A basic constructor.</t>
    <t>A constructor using data from the wire.</t>
    <t>Add a new TLV for next level.</t>
    <t>Get the next TLV of next level.</t>
    <t>Get a specific TLV of next level.</t>
    <t>Replace a TLV of next level.</t>
    <t>Get the Data.</t>
    <t>Get the Length.</t>
    <t>Set the Data.</t>
    <t>Set the Length.</t>
    <t>Set the Type.</t>
    <t>Serialize the header.</t>
    <t>Serialize the TLV to be written on the wire.</t>
  </list></t>
  <t>Next all TLVs can inherit all these functions and attributes and either override them or create some new functions for 
  each.</t>
  </section>  
  <section title="Message Deserialization">
  <t>What follows is a the algorithm for deserializing any protocol message:</t>
  <t><list style="numbers">
    <t>Get the message header.</t>
    <t>Read the length.</t>
    <t>Check the message type to understand what kind of packet this is.</t>
    <t>If the length is larger than the message header then there is data for this packet.</t>
    <t>A check can be made here regarding the message type and the length of the packet</t>
  </list></t>
  <section title="Config or Query">
  <t>If the packet is a Query or Config type then for this level there are LFBSelector TLVs:</t>
  <t><list style="numbers">
    <t>Read the next 2 shorts(type-length). If the type==LFBSelector then the message is valid.</t>
    <t>Read the necessary length for this LFBSelector and create the LFBSelector from the data of the wire.</t>
    <t>Add this LFBSelector to the mainheader array of LFBSelectors</t>
    <t>Do this until the rest of the packet has finished.</t>
  </list></t>
  <t>The next level of TLVs are Operation TLVs</t>
  <t><list style="numbers">
    <t>Read the next 2 shorts(type-length). If the type==OperationTLV then the message is valid.</t>
    <t>Read the necessary length for this OperationTLV and create the OperationTLV from the data of the wire.</t>
    <t>Add this OperationTLV to the LFBSelector array of TLVs.</t>
    <t>Do this until the rest of the LFBSelector's Packet has finished.</t>
  </list></t>
  <t><list style="numbers">
    <t>Read the next 2 shorts(type-length). If the type==PathData then the message is valid.</t>
    <t>Read the necessary length for this PathDataTLV and create the PathDataTLV from the data of the wire.</t>
    <t>Add this PathData TLV to the Operation TLV's array of TLVs.</t>
    <t>Do this until the rest of the OperationTLV's Packet has finished.</t>
  </list></t>
  <t>Here it gets interesting, as the next level of PathDataTLVs can be either:</t>
  <t><list style="symbols">
    <t>PathData TLVs.</t>
    <t>FullData TLV.</t>
    <t>SparseData TLV.</t>
    <t>Result TLVs</t>
  </list></t>
  <t>The solution to this difficulty is recursion. If the next TLV is PathData then the PathData that is created uses the
  same kind of deserialisation etc. until it reaches a FullData or SparseData. There can be only one FullDataTLV or 
  SparseData within a PathData.</t>  
  <t><list style="numbers">
    <t>Read the next 2 shorts(type-length).</t>
    <t>If the Type==PathDataTLV then do again the previous algorithm but add the PathDataTLV to this PathDataTLV's array
    of TLVs.</t>
    <t>Do this until the rest of the PathData's Packet has finished.</t>
    <t>If the Type==FullDataTLV create the FullData TLV from the packet and add this to the PathData's array of TLVs</t>
    <t>If the Type==SparseDataTLV create the SparseData TLV from the packet and add this to the PathData's array of TLVs</t>
    <t>If the Type==ResultTLV create the Result TLV from the packet and add this to the PathData's array of TLVs</t>
  </list></t>
  <t>If the message is a Query it MUST not have any kind of data inside the PathData.</t>
  <t>If the message is a Query Response then it MUST either have a ResultTLV or a FullData TLV.</t>
  <t>If the message is a Config it MUST have inside either a FullDataTLV or a SparseData TLV.</t>
  <t>If the message is a Config Reponse, it MUST have inside a ResultTLV</t>
  </section>
  </section>
</section>
</section>

  <section title="Developement Platforms">
  <t>Any Developmens platfor that can support the SCTP TML and the TML of the developer's choosing is available for use.</t>
  <t>The next table provides an initial survey of sctp support for C/C++ and Java.</t>
  <figure>
    <artwork align="center"><![CDATA[
/-------------+-------------+-------------+-------------\
|\ Platform   |             |             |             |
| ----------\ |   Windows   |    Linux    |   Solaris   |
|  Language  \|             |             |             |
+-------------+-------------+-------------+-------------+
|             |             |             |             |
|    C/C++    |  Supported  |  Supported  |  Supported  |
|             |             |             |             |
+-------------+-------------+-------------+-------------+
|             |   Limited   |             |             |
|    Java     | Third Party |  Supported  |  Supported  |
|             | Not from SUN|             |             |
\-------------+-------------+-------------+-------------/
]]></artwork>
  </figure>
  <t>A developer should keep some limitations regarding Java.</t>
  <t>Java inherently does not support unsigned types. A workaround this can be found in the creation of classes that do the
  translation of unsigned to java types. The problem is that the unsigned long cannot be used as it is in the Java platform.
  <xref target="Java Unsigned Types">The proposed set of classes can be found in </xref>.</t>
  </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
     <t>TBA</t>
    </section>

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>

    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The security considerations of the ForCES framework in <xref target="RFC3746"></xref> and <xref target="I-D.ietf-forces-protocol">FE-protocol</xref> are applicable
   in this document.  Implementers or users of ForCES
   FEs and CEs should take these considerations into account.</t>

     <t>Also, as specified in the security considerations section of 
     the <xref target="I-D.ietf-forces-sctptml">SCTP-TML draft</xref>
   the transport-level security, has to be ensured by TLS (Transport
   Layer Security).</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
      &FE-MODEL;
      
      &FORCES-PROTOCOL;
      
      &FORCES-SCTP-TML;

    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

	  &RFC3654;
	  
	  &RFC3746;

      &RFC2629;

      &RFC3552;
      
      &RFC5226;

      &RFC2119;

      <!-- A reference written by by an organization not a person. -->
	<reference anchor="Java Unsigned Types" target="http://darksleep.com/player/JavaAndUnsignedTypes.html">
	<front>
		<title>Classes that support unsigned primitive types for Java. All except the unsigned long</title>
		<author>
			<organization></organization>
		</author>
		<date></date>
	</front>
</reference>

    </references>

    <!-- Change Log

v00 2009-02-17  EH   Initial version
  -->
  </back>
</rfc>
