%
% x-kernel v3.3
%
% Copyright (c) 1996,1993,1991,1990  Arizona Board of Regents
%

\section{Introduction}

The {\xk} is an object-based protocol implementation framework It
defines an interface that protocols use to invoke operations on one
another (this is called the Uniform Protocol Interface, or UPI), and a
collection of libraries for manipulating messages, participant
addresses, events, associative memory tables (maps), and threads.

Version 3.3 represents a re-engineering of most of the {\xk}
libraries, a consolidation of the platforms on which the {\xk} runs,
and the addition of a protocol simulation platform.  Like the previous
version, Version 3.3 completely isolates the protocol from the
underlying operating system.  As a result, protocol source code can be
moved from one platform to another without modification.  However,
there are several minor differences between the Version 3.2 and 3.3
interfaces.

Sections \ref{upi} through \ref{control_ops} of this manual define the
Uniform Protocol Interface and the libraries that make up the
{\xk}. Sections \ref{config}--\ref{releasing} then describe the
procedures for configuring and running the {\xk}, and for releasing
protocols.

\subsection{Other Sources of Information}

This document is intended as a reference manual for a user that is
already familiar with the {\xk}. There are several other sources of
information that you should look at to learn more about the {\xk}.

First, the {\xk} was originally described in a pair of research papers
\cite{Hutchinson91tse,OMalley92tocs}. These are a good place to start
to understand the motivation and design rationale behind the {\xk}.

Second, this Programmer's Manual, while thorough, is somewhat cryptic.
It does not serve as a tutorial that teaches you how to write {\xk}
protocols. For help in learning how to write {\xk} protocols,
including examples from several existing protocols, see
\cite{Tutorial}. This tutorial borrows liberally from
\cite{Peterson96}, which provides an even more comprehensive
discussion of protocol design and implementation.

Third, if you have just picked up the {\xk} and want to try it out
without having to first learn everything there is to know about it,
then \cite{Started} is a good place to begin. Once you have a version
of the {\xk} that builds and runs, it is much easier to start playing
with the various features and options discussed in the Programmer's
Manual.

Fourth, the {\xk} can now be run as a network simulator rather than on
top of a real network. This simulator, called $x$-sim, provides a
complete and realistic framework for developing, analyzing, and
testing network protocols. Information about how to configure and use
$x$-sim can be found in \cite{xsim}.

Finally, various components of the {\xk} are described in detail in a
collection of design documents. In particular, \cite{Message}
describes the implementation of the message library and \cite{Idmap}
describes the implementation of the map library.  Note that it is not
necessary to understand how these components are implemented in order
to write protocols; these reports are intended for advanced users that
want to know more about how the {\xk} is implemented.

\subsection{Acknowledgements}

Many people at the University of Arizona and elsewhere have
contributed to the {\xk}.  They include Andy Bavier, Mats Bjorkman,
Lawrence Brakmo, Peter Druschel, Norm Hutchinson, Hasnain
Karampurwala, Ed Menze, Sandra Miller, David Mosberger-Tang, Erich
Nahum, Sean O'Malley, Hilarie Orman, Larry Peterson, Rich Schroeppel,
David Yates, and Andrey Yeatts.  Many others have contributed
protocols, as noted in the Appendix.

Our work with the {\xk} has been supported over the years by several
different organizations and companies, including the National Science
Foundation (through grants CCR-8811423, IRI-9015407, CCR-9102040, and
NCR-9204393), the Advanced Research Projects Agency (through contracts
DABT63-91-C-0030, DABT63-94-C-0002, and DABT63-95-C-0075), the
National Computer Security Center (through University research grant
MDA904-92-C-515), Sun Microsystems, and Digital Equipment Corporation,
Intel, and Hewlett-Packard.

\subsection{Our Address}

Please let us know of any problems you encounter so that we can
continue to improve the distribution.  Our mail address is:
\begin{quote}
The {\xk} Project\\
Department of Computer Science\\
University of Arizona\\
PO BOX 210077\\
Tucson, AZ 85721-0077
\end{quote}
We can be reached by electronic mail at:
\begin{quote}
{\var xkernel-help@cs.arizona.edu}
\end{quote}
Because of limited resources we can't promise to fix every problem,
but we appreciate all comments. Also, we typically post messages about
the {\xk} (including notices of future releases) to 
\begin{quote}
{\var xkernel-interest@cs.arizona.edu}
\end{quote}
Send mail to
\begin{quote}
{\var xkernel-interest-request@cs.arizona.edu}
\end{quote}
to be added to to this mailing list. Finally, we are on the Web at
\begin{quote}
{\var http://www.cs.arizona.edu/xkernel/}
\end{quote}

\subsection{Copyright Notice}

\input copyright
