LTCPMON 0.1a
(L3DGEWorld Transmission Control Protocol Monitoring) demonstrates the
use of combining L3DGEWorld
with SIFTR
(Statistical Information For TCP Research)
to provide an insight into how multiple outbound TCP flows interact on
the FreeBSD TCP/IP stack. LTCPMON is designed to playback or read live
data as generated by the SIFTR kernel module. The tool supports
multiple playback speeds for recorded data and live data, and supports
a number of custom mappings between the TCP state variables and the
visual characteristics displayed on 3D entities inside L3DGEWorld.
LTCPMON is built as
an plugin for L3DGEWorld. L3DGEWorld is a network
monitoring and control application based on Open Arena (a game
built on the GPL'd Quake III Arena engine). Inspired by other
applications such as LCMON
1.1 and LupsMON,
LTCPMON utilises the L3DGEComms interface which sends messages into the
virtual world updating various visual characteristics for a given
entity.
The following
screenshots capture the view seen by a single user after logging into a
L3DGEWorld virtual world. When the user first logs into the L3DGEWorld
server, they are placed inside the 3D world, floating above a platform
(see figure 1). On the platform there is a matrix of pyramids. Each of
the pyramids can be used to represent a TCP flow, and as the user
approaches these pyramids, detailed information about that flow is
displayed. If user does not want to approach the object, there is an
inspector weapon, which when fired at a pyramid will bring up the
information dialog. Once the LTCPMON daemon is started the pyramids can
be configured (see Quick Start
Guide for LTCPMON) to bounce, change colour and spin etc.
Each of these characteristics is automatically scaled depending on
network metrics.
As shown in figure 2,
once LTCPMON is loaded and connected the
L3DGEWorld server, updates will occur causing the pyramids to up
around, change colour and spin.
LTCPMON is flexible
and allows most options to be configured on the
command line. These parameters determine the playback speed, update
period and offset, as well as providing three files which define the
source of the SIFTR data, the custom mappings and a list of the
entities available on the map. If no command line switches are given
the defaults for LTCPMON are used. The default values assume L3DGEWorld
is running on port 27960 of the local host (127.0.0.1). The playback
speed will be set to half, updating the virtual world every 2 seconds
until all the data in the log file has been displayed.
For a quick start /
demo of how LTCPMON works, start by compiling the source code on your
local machine. In the tarball you should find a folder called samples.
these are the files which can be loaded into LTCPMON to generate a
quick demo with multiple flows present. install L3DGEWorld on your
local machine and run the script in the installation directory. this
will start an instance of the server. In the background, start LTCPMON
using the command "ltcpmon path/to/mappings.map path/to/entities.conf
path/to/siftr.log". this will start LTCPMON on the local machine, and
will attempt to connect to the server which is assumed to be on the
local host (can be overriden with the '-a' switch). Switching back to
L3DGEWorld you should now be able to see the pyramids (or possibly
other entities) bouncing etc.
When LTCPMON
starts it parses the command line to find the
required files and any additional command line switches.
These command line switches are shown above in Figure 3 and
are optionally used to configure the location and port of
L3DGEWorld server (by default 127.0.0.1 on 27960), the
playback speed, the start time offset and the duration of
playback as desired.
The application sets up it's environment using the
optional command line switches before parsing the provided
files. This gives LTCPMON a complete configuration.
LTCPMON then creates a connection with
L3DGEWorld Server and enters it's main loop. Inside
the main loop the program parses a variable number lines
of the SIFTR log file. The number of lines parsed is
dependant on how much traffic was flowing in and out
of the TCP/IP stack over a given interval. This is because
LTCPMON looks at the timestamps inside the log file
to determine when a finite amount of time has expired.
Once this time has expired the application waits for an
update timer to expire, before calculating the statistics on
the data. Hence, the playback ratio switch controls the
speed at which the log file data is parsed and displayed,
while the update period switch controls the resolution of
the updates.
LTCPMON will terminate once it has reached the end
of the log file, or in case of a pipe, when it has consumed
it's buffer. This flow is illustrated in figure 4.
For people familiar with Quake III Arena, L3DGEWorld is essentially a
custom map running on a modified Quake III Arena game engine. As with a
normal Quake III Arena game, one or more clients may be connected to a
single server, each one rendering a separately controlled view of the
virtual environment. Clients may connect and disconnect from the server
at any time without disrupting the server's virtual environment, and
may do so from where ever there is UDP/IP connectivity to the
L3DGEWorld Server.
LTCPMON 0.1a has only
been tested under the FreeBSD 8.0-RELEASE operating system.
[In
2007 L3DGEWorld 2.3 (both client and server sides) were initially
verified to run on FreeBSD 6.2, Mac OS X 10.4.9, Linux and Windows XP
Platforms (with the addition of cygwin). In July 2010 it has
been
confirmed L3DGEWorld 2.3 client will run as-is under Mac OS X
10.6.4 Snow Leopard, and the win32 binary will run under FreeBSD 8.x
using Wine 1.2-rc4. The native FreeBSD binaries (server and client)
must be recompiled to run under FreeBSD 8.x (as currently built they
look for older versions of libm.so and libc.so). Recompilation
instructions are in the L3DGEWorld
2.3 tarballs.]
LTCPMON
Requirements:
Unix installation (including source tree)
L3DGEWorld Client Requirements:
Video card supporting OpenGL acceleration.
libSDL and libOpenAL are required on
FreeBSD and Linux.
Dedicated L3DGEWorld
Server Requirements:
Unix
BASH (Bourne Again Shell)
libSDL and libOpenAL are only required
if you run a dedicated server using the ioquake3 binaries. This is
because they contain both the client and server components of
L3DGEWorld, the ioq3ded binaries contain only the server component
which does not require SDL or OpenAL.