#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass article
\begin_preamble
\usepackage{a4wide}

\usepackage{url}
\urlstyle{rm}

\usepackage[pdftex=true,
pdftitle={Evaluation of a Simple Load Balancing Improvement for Reliable Server Pooling with Heterogeneous Server Pools},
pdfauthor={Thomas Dreibholz},
pdfsubject={Reliable Server Pooling},
pdfkeywords={Reliable Server Pooling, Redundancy, Load Balancing, Heterogeneous Pools, Performance Evaluation},
pdfpagemode=UseOutlines,
plainpages=false,
hypertexnames=true,
pdfpagelabels=true,
hyperindex=true,
colorlinks=true]{hyperref}

\usepackage{color}
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\definecolor{black}{rgb}{0,0,0}
\hypersetup{colorlinks
,linkcolor=darkblue
,urlcolor=blue
,citecolor=darkblue,
,filecolor=darkgreen}
\end_preamble
\use_default_options false
\maintain_unincluded_children false
\language english
\language_package default
\inputencoding utf8
\fontencoding global
\font_roman "times" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
\use_dash_ligatures true
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize 11
\spacing single
\use_hyperref false
\papersize a4paper
\use_geometry false
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 0
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 0
\use_minted 0
\index Index
\shortcut idx
\color #008000
\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\is_math_indent 0
\math_numbering_side default
\quotes_style english
\dynamic_quotes 0
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Title
The
\noun on
 rsplib
\noun default
 RSerPool Implementation Handbook
\end_layout

\begin_layout Author
Thomas Dreibholz
\begin_inset Newline newline
\end_inset

Simula Metropolitan Centre for Digital Engineering 
\begin_inset Newline newline
\end_inset

Centre for Resilient Networks and Applications
\end_layout

\begin_layout Author
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
href{mailto:thomas.dreibholz@gmail.com}{thomas.dreibholz@gmail.com}
\end_layout

\end_inset


\end_layout

\begin_layout Date
January
\begin_inset space \thinspace{}
\end_inset

6, 2023
\end_layout

\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents

\end_inset


\end_layout

\begin_layout Section
Introduction
\end_layout

\begin_layout Standard
This is the documentation for the
\noun on
 rsplib
\noun default
 RSerPool package.
 It contains information how to install and make use of
\noun on
 rsplib
\noun default
.
 For a detailed introduction to RSerPool and its concepts itself, see
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "Dre2006"
literal "true"

\end_inset

.
 For questions about RSerPool and 
\noun on
rsplib
\noun default
, see our mailing lists at
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "RSerPoolPage"
literal "true"

\end_inset

.
\end_layout

\begin_layout Section
What is RSerPool?
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename EN-RSerPool-Scenario-with-PPE.pdf
	width 80col%
	keepAspectRatio

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption Standard

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "cap:The-RSerPool-Architecture"

\end_inset

The RSerPool Architecture
\end_layout

\end_inset


\end_layout

\end_inset


\begin_inset Float figure
wide false
sideways false
status collapsed

\begin_layout Plain Layout
\align center
\begin_inset Graphics
	filename EN-RSerPool-ProtocolStack.pdf
	width 80col%
	keepAspectRatio

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption Standard

\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "cap:The-RSerPool-Protocol-Stack"

\end_inset

The RSerPool Protocol Stack
\end_layout

\end_inset


\end_layout

\end_inset

Figure
\begin_inset space ~
\end_inset


\begin_inset CommandInset ref
LatexCommand ref
reference "cap:The-RSerPool-Architecture"

\end_inset

 provides an illustration of the Reliable Server Pooling
\begin_inset space ~
\end_inset

(RSerPool) architecture as defined by the Internet Draft
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "rfc-rserpool-overview"
literal "true"

\end_inset

; the protocol stack of RSerPool is shown in figure
\begin_inset space ~
\end_inset


\begin_inset CommandInset ref
LatexCommand ref
reference "cap:The-RSerPool-Protocol-Stack"

\end_inset

.
 An RSerPool scenario consists of three component classes
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "rfc-rserpool-overview"
literal "true"

\end_inset

: servers of a pool are called
\emph on
 pool elements
\emph default

\begin_inset space ~
\end_inset

(PE).
 Each pool is identified by a unique
\emph on
 pool handle
\emph default

\begin_inset space ~
\end_inset

(PH) in the handlespace, which is the set of all pools.
 The handlespace is managed by
\emph on
 pool registrars
\emph default
 (PR).
 PRs of an
\emph on
 operation scope
\emph default
 (the domain which is covered by the handlespace, e.g.
\begin_inset space ~
\end_inset

an organization or building) synchronize their view of the handlespace using
 the Endpoint haNdlespace Redundancy Protocol (ENRP
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "rfc-rserpool-enrp,draft-dreibholz-rserpool-enrp-takeover,rfc-rserpool-common-param"
literal "true"

\end_inset

), transported via SCTP
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "RFC4960,Jun2005,JST2000b,SCI2002a"
literal "true"

\end_inset

.
\end_layout

\begin_layout Standard
Unlike already available solutions in the area of GRID and high-performance
 computing, the fundamental property of RSerPool is to be
\begin_inset Quotes eld
\end_inset

lightweight
\begin_inset Quotes erd
\end_inset

, i.e.
\begin_inset space ~
\end_inset

it must also be usable low-performance devices like telecommunications equipment
 or routers.
 This property restricts the RSerPool architecture to the management of
 pools and sessions only, but on the other hand makes a very efficient realizati
on possible
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "IJHIT2008,FGCN2007-HsMgt,Contel2005"
literal "true"

\end_inset

.
 In particular, an operation scope has a limited range, e.g.
\begin_inset space ~
\end_inset

a company or organization; RSerPool does not intend to scale to the whole
 Internet.
 Nevertheless, it is assumed that PEs can be distributed globally, for their
 service to survive localized disasters
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "KiVS2007"
literal "true"

\end_inset

.
\end_layout

\begin_layout Standard
PEs choose an arbitrary PR to register into a pool by using the Aggregate
 Server Access Protocol (ASAP
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "rfc-rserpool-asap,draft-dreibholz-rserpool-asap-hropt,rfc-rserpool-common-param"
literal "true"

\end_inset

), again transported via SCTP.
 Upon registration at a PR, the chosen PR becomes the Home-PR
\begin_inset space ~
\end_inset

(PR-H) of the newly registered PE.
 A PR-H is responsible for monitoring its PEs' availability by using ASAP
 Endpoint Keep-Alive messages (to be acknowledged by the PE within a given
 timeout) and propagates the information about its PEs to the other PRs
 of the operation scope via ENRP Update messages.
\end_layout

\begin_layout Standard
A client is called
\emph on
 pool user
\emph default

\begin_inset space ~
\end_inset

(PU) in RSerPool terminology.
 To access the service of a pool given by its PH, a PE has to be selected.
 This selection procedure – called
\emph on
 handle resolution
\emph default
 – is performed by an arbitrary PR of the operation scope.
 A PU can request a handle resolution from a PR using the ASAP protocol.
 The PR selects PE identities by using a pool-specific server selection
 rule, denoted as 
\emph on
pool policy
\emph default
.
 A set of adaptive and non-adaptive pool policies is defined in
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "rfc-rserpool-policies,draft-dreibholz-rserpool-delay"
literal "true"

\end_inset

; for a detailed discussion of these policies, see
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "Dre2006,LCN2005,Tencon2005,Euromicro2007,ICDS2008-LUD,ICDS2008-Failover,ADCOM2007,AINTEC2007,FGCN2007-LoadBalancing"
literal "true"

\end_inset

.
\end_layout

\begin_layout Section
Installation
\end_layout

\begin_layout Standard
In this section, the installation of the
\emph on
\noun on
 rsplib
\emph default
\noun default
 package is described.
\end_layout

\begin_layout Subsection
Installation of the SCTP Protocol
\end_layout

\begin_layout Standard
The first step is to decide which SCTP implementation should be used.
 You have the choice between kernel SCTP and userland SCTP.
 In most cases, you probably want kernel SCTP.
 It is most efficient and the implementation should be sufficiently stable.
\end_layout

\begin_layout Subsubsection
Installation of Kernel SCTP for Linux
\end_layout

\begin_layout Standard
A SCTP kernel module is already provided by all major Linux distributions.
 To load it into the kernel, call:
\end_layout

\begin_layout Standard

\family typewriter
sudo modprobe sctp
\end_layout

\begin_layout Standard
\noindent
In order to load it permanently, add a line 
\begin_inset Quotes eld
\end_inset

sctp
\begin_inset Quotes erd
\end_inset

 to /etc/modules.
 After that, the module will be loaded automatically at boot time.
 Also make sure that the SCTP include files are installed (in particular:
 /usr/include/netinet/sctp.h).
 If they are not installed, install the package libsctp-dev (or similar
 name).
 For Debian/Ubuntu Linux, you can use:
\end_layout

\begin_layout Standard

\family typewriter
sudo apt-get install libsctp-dev
\end_layout

\begin_layout Subsubsection
Installation of Userland SCTP
\noun on
 sctplib/socketapi
\end_layout

\begin_layout Standard
In the usual case, you use kernel SCTP.
 Then, the following steps can be skipped! However, if you decide to use
 our userland SCTP implementation
\noun on
 sctplib
\noun default

\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "sctplib"
literal "true"

\end_inset

, the following steps have to be performed.
 The
\noun on
 sctplib
\noun default
 userland SCTP implementation consists of two packages:
\noun on
 sctplib
\noun default
 containing the actual SCTP implementation and
\noun on
 socketapi
\noun default
 containing a BSD sockets API for
\noun on
 sctplib
\noun default
.
 You need both.
 Get the latest versions from
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "RSerPoolPage"
literal "true"

\end_inset

 (https://www.nntb.no/~dreibh/rserpool 
\begin_inset Flex URL
status collapsed

\begin_layout Plain Layout

https://www.nntb.no/~dreibh/rserpool
\end_layout

\end_inset

).
 First, unpack, configure and install
\noun on
sctplib
\noun default
:
\end_layout

\begin_layout Standard

\family typewriter
tar xzf sctplib-<version>.tar.gz
\end_layout

\begin_layout Standard
cd
\family typewriter
 sctplib-<version>
\end_layout

\begin_layout Standard

\family typewriter
./configure --enable-shared --enable-static <Options>
\end_layout

\begin_layout Standard

\family typewriter
make
\end_layout

\begin_layout Standard

\family typewriter
sudo make install
\end_layout

\begin_layout Standard
\noindent
Useful options are 
\begin_inset Quotes eld
\end_inset


\family typewriter
--enable-static --disable-shared --enable-maintainer-mode
\family default

\begin_inset Quotes erd
\end_inset

 to generate a static library with debug symbols.
 This is useful for debugging purposes (e.g.
\begin_inset space ~
\end_inset

memory leak detection using Valgrind
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "Valgrind"
literal "true"

\end_inset

).
 To use SCTP over UDP (defined in
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "draft-tuexen-sctp-udp-encaps"
literal "true"

\end_inset

), use 
\begin_inset Quotes eld
\end_inset


\family typewriter
--enable-sctp-over-udp
\family default

\begin_inset Quotes erd
\end_inset

.
 The next step is to install the socketapi package:
\end_layout

\begin_layout Standard

\family typewriter
tar xzf socketapi-<version>.tar.gz
\end_layout

\begin_layout Standard

\family typewriter
cd socketapi-<version>
\end_layout

\begin_layout Standard

\family typewriter
./configure --enable-shared --enable-static <Options>
\end_layout

\begin_layout Standard

\family typewriter
make
\end_layout

\begin_layout Standard

\family typewriter
sudo make install
\end_layout

\begin_layout Standard
\noindent
Again, you can use 
\begin_inset Quotes eld
\end_inset


\family typewriter
--enable-static --disable-shared --enable-maintainer-mode
\family default

\begin_inset Quotes erd
\end_inset

 to generate a static library with debug symbols.
 If you want to use kernel SCTP and SCTP over UDP simultaneously, add 
\begin_inset Quotes eld
\end_inset


\family typewriter
--enable-sctp-over-udp
\family default

\begin_inset Quotes erd
\end_inset

.
 In this case, the socketapi will not abort if it finds a loaded kernel
 SCTP module.
\end_layout

\begin_layout Subsection
Installation of the
\noun on
 rsplib
\noun default
 Package
\end_layout

\begin_layout Standard
After installing SCTP support, the
\noun on
 rsplib
\noun default
 package can be installed.
\end_layout

\begin_layout Subsubsection
\begin_inset CommandInset label
LatexCommand label
name "subsec:Preparation-Work"

\end_inset

Preparation Work
\end_layout

\begin_layout Standard
In order to prepare your system for the installation of the 
\noun on
rsplib
\noun default
 package, it is recommended to do the following tasks:
\end_layout

\begin_layout Itemize
The Component Status Protocol
\begin_inset space ~
\end_inset

(CSP) can be used to send status messages of PRs, PEs and PUs to a central
 monitoring program (cspmonitor, to be explained later).
 This is a helpful feature to keep an overview of large, distributed test
 setups.
 You can set a default address and report interval for CSP by defining two
 environment variables:
\begin_inset Newline newline
\end_inset


\family typewriter
CSP_SERVER=<Address>:<Port>
\begin_inset Newline newline
\end_inset

CSP_INTERVAL=<Report interval in milliseconds>
\family default

\begin_inset Newline newline
\end_inset

Useful settings are CSP_SERVER=127.0.0.1:2960 and CSP_INTERVAL=333.
\end_layout

\begin_layout Itemize
For debugging, it is useful to turn on the generation of core dumps.
 Under the bash shell, this can be done by
\begin_inset Quotes eld
\end_inset

ulimit -c unlimited
\begin_inset Quotes erd
\end_inset

.
\end_layout

\begin_layout Standard
To make all settings above permanent, you can append them to your shell
 configuration (usually ~/.bashrc).
 Example (your settings may be different!):
\end_layout

\begin_layout Standard

\family typewriter
...
\end_layout

\begin_layout Standard

\family typewriter
export CSP_SERVER=127.0.0.1:2960
\end_layout

\begin_layout Standard

\family typewriter
export CSP_INTERVAL=333
\end_layout

\begin_layout Standard

\family typewriter
ulimit -c unlimited
\end_layout

\begin_layout Standard
In order to use RSerPool, your host needs at least one multicast-capable
 network interface with at least a private IP address (i.e.
\begin_inset space ~
\end_inset

192.168.x.y; 10.a.b.c; 172.16.n.m - 172.31.i.j).
 If your host is already connected to a network and has an IP address, everythin
g should be fine.
 For testing with a non-connected host, you can just set up a dummy interface:
\end_layout

\begin_layout Standard

\family typewriter
sudo ifconfig dummy0 10.255.255.1 netmask 255.255.255.0 broadcast 10.255.255.255
 up multicast
\end_layout

\begin_layout Standard
In order to permanently set up a dummy interface, you can add the following
 lines to /etc/network/interfaces (Debian/Ubuntu Linux; may be different
 for other distributions!):
\end_layout

\begin_layout Standard

\family typewriter
auto dummy0
\end_layout

\begin_layout Standard

\family typewriter
iface dummy0
\end_layout

\begin_layout Standard

\family typewriter
inet static address 172.31.249.1 netmask 255.255.255.252
\begin_inset space ~
\end_inset


\begin_inset space ~
\end_inset


\begin_inset space ~
\end_inset


\family default
(You may need to change this!)
\end_layout

\begin_layout Standard

\family typewriter
post-up ip link set dummy0 up multicast on
\end_layout

\begin_layout Standard

\family typewriter
pre-down ip link set dummy0 up multicast off
\end_layout

\begin_layout Standard
After appending these lines, they will be loaded automatically each time
 a new bash shell is started.
 Your system should now be ready to install the
\noun on
 rsplib
\noun default
 package.
\end_layout

\begin_layout Subsubsection
\begin_inset CommandInset label
LatexCommand label
name "subsec:Configuration-and-Installation"

\end_inset

Configuration and Installation
\end_layout

\begin_layout Standard
In order to install
\noun on
 rsplib
\noun default
, get the latest version from
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "RSerPoolPage"
literal "true"

\end_inset

 (
\begin_inset Flex URL
status collapsed

\begin_layout Plain Layout

https://www.nntb.no/~dreibh/rserpool
\end_layout

\end_inset

), unpack, configure and compile it:
\end_layout

\begin_layout Standard

\family typewriter
tar xzf rsplib-<version>.tar.gz
\end_layout

\begin_layout Standard
cd
\family typewriter
 rsplib-<version>
\end_layout

\begin_layout Standard

\family typewriter
cmake .
 <Options>
\end_layout

\begin_layout Standard

\family typewriter
make
\end_layout

\begin_layout Standard

\family typewriter
sudo make install
\begin_inset space ~
\end_inset


\begin_inset space ~
\end_inset


\begin_inset space ~
\end_inset


\family default
(This step is optional and not needed to run the examples!)
\end_layout

\begin_layout Standard
\noindent
You may use the following options:
\end_layout

\begin_layout Description

\family typewriter
-DUSE_KERNEL_SCTP=1
\family default
 Enables usage of kernel SCTP (
\series bold
default
\series default
).
\end_layout

\begin_layout Description

\family typewriter
-DUSE_KERNEL_SCTP=0
\family default
 Use userland SCTP (i.e.
\begin_inset space ~
\end_inset


\noun on
sctplib
\noun default
/
\noun on
socketapi
\noun default
) instead of kernel SCTP.
\end_layout

\begin_layout Description

\family typewriter
-DMAX_LOGLEVEL=
\begin_inset Formula $n$
\end_inset


\family default
 Allows for reduction of the maximum logging verbosity to 
\begin_inset Formula $n$
\end_inset

.
 Setting a lower value here makes the programs smaller, at cost of reduces
 logging capabilities (
\series bold
default: 9
\series default
).
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_QT=1
\family default
 Enables Qt usage; this is necessary for the Fractal Generator client.
 Without Qt, the client's compilation will be skipped.
 The ./configure script expects the environment variable QTDIR set to the
 Qt directory.
 You may need to set it appropriately, e.g.
\begin_inset space ~
\end_inset

"export QTDIR=/usr/share/qt5" for Ubuntu Linux.
 This setting depends on your distribution; use "locate qwidget.h" to find
 out the directory.
 It is recommended to add the setting of QTDIR to your shell configuration
 (usually ~/.bashrc).
 (
\series bold
default
\series default
)
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_QT=0
\family default
 Disables Qt usage; the Fractal Generator client will
\series bold
 not
\series default
 be available.
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_REGISTRAR_STATISTICS=1
\family default
 Adds registrar option to write statistics file.
 (
\series bold
default
\series default
)
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_REGISTRAR_STATISTICS=0
\family default
 Do not compile in the statistics option.
 In this case, the dependency on 
\noun on
libbz2
\noun default
 is removed.
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_HSMGTVERIFY=1
\family default
 Enable Handlespace Management verification.
 This is useful for debugging only; it makes the very PR slow!
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_HSMGTVERIFY=0
\family default
 Turns off Handlespace Management verification.
 (
\series bold
default
\series default
)
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_CSP=1
\family default
 Enable the Component Status Protocol support (strongly recommended!) (
\series bold
default
\series default
)
\end_layout

\begin_layout Description

\family typewriter
-DENABLE_CSP=0
\family default
 Turns the Component Status Protocol support off.
\end_layout

\begin_layout Description

\family typewriter
-DBUILD_TEST_PROGRAMS=1
\family default
 Enable building of test programs.
\end_layout

\begin_layout Description

\family typewriter
-DBUILD_TEST_PROGRAMS=0
\family default
 Disable building of test programs.
 (
\series bold
default
\series default
)
\end_layout

\begin_layout Standard
\noindent
The
\noun on
 rsplib
\noun default
 package also provides filter and coloring rules for
\noun on
 Wireshark
\noun default

\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "WiresharkUsersGuide"
literal "true"

\end_inset

.
 You can find them in the rsplib/wireshark/ subdirectory.
 Just copy the files 
\begin_inset Quotes eld
\end_inset

dfilters
\begin_inset Quotes erd
\end_inset

 and 
\begin_inset Quotes eld
\end_inset

colorfilters
\begin_inset Quotes erd
\end_inset

 to your
\noun on
 Wireshark
\noun default
 settings directory: ~/.wireshark (Ubuntu/Debian) or /root/.wireshark (you
 need root permission to do so, i.e.
\begin_inset space ~
\end_inset

use 
\begin_inset Quotes eld
\end_inset

sudo
\begin_inset Quotes erd
\end_inset

!).
 Optionally, you can also copy the file 
\begin_inset Quotes eld
\end_inset

preferences
\begin_inset Quotes erd
\end_inset

 (if you do not have your own preferences configured yet, otherwise this
 would overwrite them!).
 You do
\series bold
 not
\series default
 need to install the provided dissectors, they have already contributed
 to the
\noun on
 Wireshark
\noun default
 developers and are included already!
\end_layout

\begin_layout Subsection
\begin_inset CommandInset label
LatexCommand label
name "subsec:Testing-the-Installation"

\end_inset

Testing the Installation
\end_layout

\begin_layout Standard
To perform a test of the installation, start the following programs in the
 rsplib/ subdirectory of the
\noun on
 rsplib
\noun default
 package:
\end_layout

\begin_layout Enumerate
Start the CSP monitor, it will print out useful information about the components
 started:
\family typewriter

\begin_inset Newline newline
\end_inset

./cspmonitor
\end_layout

\begin_layout Enumerate
First, start a registrar:
\family typewriter

\begin_inset Newline newline
\end_inset

./rspregistrar
\end_layout

\begin_layout Enumerate
Start a PE for the Fractal Generator service:
\family typewriter

\begin_inset Newline newline
\end_inset

./rspserver -fractal
\begin_inset Newline newline
\end_inset


\family default
The PE should find the PR and show its PE
\begin_inset space ~
\end_inset

ID upon startup.
 When it shows the ID, it has successfully registered.
 If something does not work, use the parameter -loglevel=5 to increase the
 verbosity of the log output.
 Also refer to subsection
\begin_inset space ~
\end_inset


\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Preparation-Work"

\end_inset

 to check your system configuration.
\begin_inset Newline newline
\end_inset

Have a look at the CSP monitor output.
 It should show the PR and PE.
\end_layout

\begin_layout Enumerate
Start a PU for the Fractal Generator service:
\family typewriter

\begin_inset Newline newline
\end_inset

./fractalpooluser
\family default

\begin_inset Newline newline
\end_inset

You should now see the calculation progress in the PU's window.
 Also have a look at the CSP monitor output; it should show the PU.
\end_layout

\begin_layout Enumerate
Start more PEs, PUs and PRs.
 You can turn on the 
\begin_inset Quotes eld
\end_inset

unreliable mode
\begin_inset Quotes erd
\end_inset

 of the PE using the parameter -fgpfailureafter=20.
 When all PEs are in unreliable mode, you should see the failovers.
 You can also abort and restart the PRs.
 Also have a look at the CSP monitor output.
\end_layout

\begin_layout Enumerate
Start
\noun on
 Wireshark
\noun default
, sniff on the 
\begin_inset Quotes eld
\end_inset

lo
\begin_inset Quotes erd
\end_inset

 (loopback, only local traffic) or the 
\begin_inset Quotes erd
\end_inset

any
\begin_inset Quotes erd
\end_inset

 interface.
 If you have set up the filter and coloring rules (see subsection
\begin_inset space ~
\end_inset


\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Testing-the-Installation"

\end_inset

), you can select some useful filters and get the RSerPool traffic nicely
 colorized.
\end_layout

\begin_layout Section
The Programs
\end_layout

\begin_layout Standard
All installable programs in the rsplib/ subdirectory also have a manual
 page (suffix:
\begin_inset space ~
\end_inset

.8).
 You can view the manual page in the rsplib/ directory using
\end_layout

\begin_layout Standard

\family typewriter
man ./<program name>.8
\end_layout

\begin_layout Standard
\noindent
After installation (make install, see subsection
\begin_inset space ~
\end_inset


\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Configuration-and-Installation"

\end_inset

), the manual pages will also be available directly.
\end_layout

\begin_layout Standard
The programs included in rsplib/ subdirectory have the following purposes:
\end_layout

\begin_layout Description
rspregistrar The PR implementation.
\end_layout

\begin_layout Description
rspserver A PE which provides multiple services.
 The actual service started is given by command-line parameter.
\end_layout

\begin_layout Description
rspterminal A simple PU for services like Echo, Discard, Daytime and CharGen.
\end_layout

\begin_layout Description
pingpongclient A simple PU for a request-response example service with cookie-ba
sed failover
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "LCN2002,IJAIT2009"
literal "true"

\end_inset

.
\end_layout

\begin_layout Description
calcappclient The PU for the CalcApp service used for performance measurements
 (see
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "Dre2006,KiVS2007,Contel2009"
literal "true"

\end_inset

).
\end_layout

\begin_layout Description
fractalpooluser The PU for the FractalGenerator service.
\end_layout

\begin_layout Description
scriptingclient The PU for the scripting service (remote script execution
 with input/output data transfer; see also
\begin_inset space ~
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "OMNeT++Workshop2008"
literal "true"

\end_inset

).
\end_layout

\begin_layout Description
cspmonitor The CSP monitor program to view status information of running
 components.
\end_layout

\begin_layout Description
hsdump A ENRP-based test utility to dump the handlespace of a PR.
\end_layout

\begin_layout Section
The
\noun on
 rsplib
\noun default
 API
\end_layout

\begin_layout Subsection
Initialization/Clean-Up
\end_layout

\begin_layout Subsubsection
rsp_initinfo()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_freeinfo()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_initarg()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_initialize()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_cleanup()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsection
Basic Mode API
\end_layout

\begin_layout Subsubsection
rsp_pe_registration()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_pe_deregistration()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_pe_failure()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getaddrinfo()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_freeaddrinfo()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsection
Enhanced Mode API Socket Functions
\end_layout

\begin_layout Subsubsection
rsp_socket()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_update_session_parameters()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_bind()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_listen()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getsockname()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getpeername()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_close()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_poll()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_select()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getsockopt()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_setsockopt()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsection
Enhanced Mode API Pool Element Functions
\end_layout

\begin_layout Subsubsection
rsp_register()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_deregister()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_accept()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_connect()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsection
Enhanced Mode API Pool User Functions
\end_layout

\begin_layout Subsubsection
rsp_has_cookie()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_forcefailover()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_sendmsg()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_send_cookie()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_recvmsg()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_recvfullmsg()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_read()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_recv()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_write()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_send()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsection
Enhanced Mode API Miscellaneous Functions
\end_layout

\begin_layout Subsubsection
rsp_mapsocket()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_unmapsocket()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_print_notification()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getpolicybytype()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_getpolicybyname()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Subsubsection
rsp_csp_setstatus()
\end_layout

\begin_layout Standard
...
\end_layout

\begin_layout Section*
Testbed Platform
\end_layout

\begin_layout Standard
A large-scale and realistic Internet testbed platform with support for the
 multi-homing feature of the underlying SCTP protocol is NorNet.
 A description of NorNet is provided in
\begin_inset space \thinspace{}
\end_inset


\begin_inset CommandInset citation
LatexCommand cite
key "PAMS2013-NorNet,ComNets2013-Core,CAIA2015,NNUW2-Dreibholz-NorNetCore-Tutorial"
literal "true"

\end_inset

, some further information can be found on the project website at
\begin_inset space \thinspace{}
\end_inset


\begin_inset Flex URL
status collapsed

\begin_layout Plain Layout

https://www.nntb.no
\end_layout

\end_inset

.
\end_layout

\begin_layout Standard
\begin_inset CommandInset bibtex
LatexCommand bibtex
bibfiles "Referenzarchiv"
options "bibtotoc,alphaurl"

\end_inset


\end_layout

\end_body
\end_document
