EXP: Add scripts for creating/destroying XIA lxc

xlxc-create is a Ruby script that creates at least one IP or
XIA linux container, depending on the options given.

It is assumed that any linux containers created should be stored
in /var/lib/lxc; if this is not the case, the script should be
manually amended. It is also assumed that the type of containers
created should be running 64-bit Ubuntu Quantal Quetzal (12.10).

The script uses bind mounts to re-use key applications in the
containers that are present in the host. The script also installs
lxc and Ruby in the container so that the host may run lxc-execute
on ruby scripts in the container. In order to communicate with
the containers, xlxc-create adds a separate ethernet bridge to
every container from the host.

The username/password for the container is set to ubuntu/ubuntu.

xlxc-destroy is also a Ruby script that stops and destroys any
IP or XIA linux containers matching the given command-line
arguments.
EXP: Add scripts for running network experiments

net-eval-setup is a Ruby script that allows the user to specify a
series of network tests by choosing options representing various
types of experiments performed on either an IP or XIA network
stack. The user must explicitly specify which stack(s) to use and
at least one experiment to perform. The number of trials for each
experiment and the time that each experiment runs are also required
parameters.

net-eval-setup creates several temporary files. net-eval-tests is
a temporary file that lists all of the commands required for the
experiments requested. net-eval-status is a temporary file that
lists all required information for a given run of the experiment,
and is updated after each experiment to reflect the information
necessary for the next experiment.

There is an option in net-eval-setup for the experiments to be run
as boot scripts. If enabled, the system will enter a state of
running scripts and restarting the machine for every experiment.

net-eval-run si a Ruby script that uses the information present
in net-eval-status to perform an experiment listed in net-eval-tests.
It sets up the required containers and creates temporary scripts
for them to run. To synchronize the start of the scripts,
net-eval-run creates a temporary file start that reads "1" when
the experiments may begin, and "0" otherwise. The containers
repeatedly check this file to see when they may begin the pw program.

When the experiments have completed, the containers and bridges
are destroyed and the system is rebooted. If the boot script option
was enabled in net-eval-setup, upon rebooting the experiments will
continue running and restarting cyclically.

To better organize the experiments, the temporary files that are
created during the experiments are now placed in a directory
"tmp" which is created the first time that net-eval-setup is run.
EXP: Alter how scripts output error information

At the end of every run of net-eval-run, the kernel ring buffer
is read, written to a file net-eval-log in the tmp directory,
and cleared. This log of the output of dmesg may serve as a
history of the experiments performed and a debugging tool.

This log is sufficient to track what occurs during each
experiment, so many of the print statments that show the
progress of the experiments are removed. For net-eval-run,
stderr is redirected to the kernel ring buffer and then reset
to stdout after it is completed.
EXP: Add reverse-path filtering and IP forwarding options

Since the source address of the packets in the experiments is not
in the routing table of the router, reverse-path filtering has to
be disabled. Therefore, an option is added to net-eval-setup to
enable (some non-zero argument) or disable (argument of zero)
reverse-path filtering.

IP forwarding should be enabled for the experiments as well.
Therefore, an option is added to net-eval-setup to enable (some
non-zero argument) or disable (argument of zero) IP forwarding.
EXP: bind mount ruby and lxc for faster experiments

Before this patch, ruby and lxc were downloaded using apt-get,
which took some time (in addition to the time required for
doing an apt-get update). For a large number of containers (>4),
the time it took to install ruby and lxc on the containers was
too long.

This patch locates the various files needed by lxc and ruby on
the host's filesystem and bind mounts them into each container.
This way, network connection is not necessary to run the
experiments, and the container setup process is much faster.

This patch depends on the hosts's ruby interpreter being version
1.9.1. For other versions, the code to bind mount the ruby files
will need to be manually amended.