VPP Container Test Bench
========================

This project spins up a pair of Docker containers, both of which are running
Ubuntu 20.04 "Focal Fossa" (x86_64) along with VPP. At run-time, the containers
will attempt to create various links between each other, using both the Linux
networking stack as well as VPP, and will then send some simple traffic
back-and-forth (i.e. ICMP echo/ping requests and HTTP GET requests).

The intent of this example is to provide a relatively simple example of
connecting containers via VPP and allowing others to use it as a springboard of
sorts for their own projects and examples. Besides Docker and a handful of
common Linux command-line utilities, not much else is required to build this
example (due to most of the dependencies being lumped inside the containers
themselves).

Instructions - Short Version
----------------------------

The use of an Ubuntu 20.04 LTS Linux distro, running on x86_64 hardware, is
required for these labs. If your current workstation/PC/laptop/etc. is
unable to run such a setup natively, the reader is now tasked with figuring out
how to get such a setup in order. This can be accomplished, for example,
through the use of virtual machines  via tools like VirtualBox, or ``vagrant``.
As this can be a time consuming task for readers new to virtual machines, we
leave it as an exercise for the reader, as it is impractical to provide support
for such a task in this narrow/focused set of labs and tutorials.

This being said, it's quite probable that one could use these labs on different
flavors/distros of Linux, since the bulk of the work involved takes place
inside containers which are always set to use an Ubuntu 20.04 baseline.
However, for the sake of these labs, any other such setup is not supported.

- Replicate the file listings at the end of this document
  (:ref:`sec_file_listings_vpp_testbench`).  You can also directly acquire a
  copy of these files by cloning the VPP repo, and navigating to the
  ``docs/usecases/vpp_testbench/src`` path to save yourself the hassle of
  copy-pasting and naming the files. Once that's done, open a shell, and
  navigate to the location housing the project files.
- To build the project, simply run: ``make``
- To start up the containers and have all the initialization logic take place,
  run: ``make start``
- To trigger some basic traffic tests, run: ``make poll``
- To terminate the containers and clean-up associated resources, run ``make stop``
- To launch an interactive shell for the "client" container, run ``make
  shell_client``
- To launch an interactive shell for the "server" container, run ``make
  shell_server``

Instructions - Long Version
---------------------------

Directory Structure and File Purposes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

First, let's quickly review the purpose of the various files used in this
project.

* ``vpp_testbench_helpers.sh``: shell variables and helper functions re-used in
  other scripts in this project. Intended to be sourced (i.e. not intended to
  be run directly). Some of the helper functions are used at run-time within
  the containers, while others are intended to be run in the default namespace
  on the host operating system to help with run-time configuration/bring up of
  the testbench.
* ``Dockerfile.vpp_testbench``: used to build the various Docker images used in
  this project (i.e. so VPP, our test tools, etc.; are all encapsulated within
  containers rather than being deployed to the host OS).
* ``Dockerfile.vpp_testbench.dockerignore``: a "permit-list" to restrict what
  files we permit to be included in our Docker images (helps keep image size
  down and provides some minor security benefits at build time, at least in
  general).
* ``entrypoint_client.sh``: entrypoint script used by the "client" Docker
  container when it is launched.
* ``entrypoint_server.sh``: entrypoint script used by the "server" Docker
  container when it is launched.
* ``Makefile``: top-level script; used to trigger the artifacts and Docker
  image builds, provides rules for starting/testing/stopping the containers,
  etc.

Getting Started
^^^^^^^^^^^^^^^

First, we'll assume you are running on a Ubuntu 20.04 x86_64 setup (either on a
bare metal host or in a virtual machine), and have acquired a copy of the
project files (either by cloning the VPP git repository, or duplicating them
from :ref:`sec_file_listings_vpp_testbench`). Now, just run ``make``. The
process should take a few minutes as it pulls the baseline Ubuntu Docker image,
applies system/package updates/upgrades via ``apt``, and installs VPP.

Next, one can start up the containers used by the project via ``make start``.
From this point forward, most testing, experiments, etc.; will likely involve
modifying/extending the ``poll_containers`` definition inside ``Makefile``
(probably easiest to just have it invoke a shell script that you write for your
own testing). Once you've completed various test runs, the entire deployment
can be cleaned-up via ``make stop``, and the whole process of starting,
testing, stopping, etc.; can be repeated as needed.

In addition to starting up the containers, ``make start`` will establish
various types of links/connections between the two containers, making use of
both the Linux network stack, as well as VPP, to handle the "plumbing"
involved. This is to allow various types of connections between the two
containers, and to allow the reader to experiment with them (i.e. using
``vppctl`` to configure or trace packets going over VPP-managed links, use
traditional Linux command line utilities like ``tcpdump``, ``iproute2``,
``ping``, etc.; to accomplish similar tasks over links managed purely by the
Linux network stack, etc.). Later labs will also encourage readers to compare
the two types of links (perhaps some performance metrics/profiling, or similar
tasks). This testbench project is effectively intended as a baseline workspace
upon which one may design and run the labs (or your own projects and examples,
whichever works for you).

Labs
----

.. toctree::
   labs/intro_to_vpp/index

Future Labs
-----------

.. note::

   Coming soon.

- Lab: Writing your First CLI Application (Querying Statistics)
- Lab: MACSWAP Plugin Revisited

.. _sec_file_listings_vpp_testbench:

File Listings
-------------

Makefile
^^^^^^^^

.. literalinclude:: src/Makefile
   :caption: Makefile
   :language: Makefile
   :linenos:

Dockerfile.vpp_testbench
^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: src/Dockerfile.vpp_testbench
   :caption: Dockerfile.vpp_testbench
   :language: Dockerfile
   :linenos:

Dockerfile.vpp_testbench.dockerignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: src/Dockerfile.vpp_testbench.dockerignore
   :caption: Dockerfile.vpp_testbench.dockerignore
   :language: Dockerfile
   :linenos:

vpp_testbench_helpers.sh
^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: src/vpp_testbench_helpers.sh
   :caption: vpp_testbench_helpers.sh
   :language: shell
   :linenos:

entrypoint_client.sh
^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: src/entrypoint_client.sh
   :caption: entrypoint_client.sh
   :language: shell
   :linenos:

entrypoint_server.sh
^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: src/entrypoint_server.sh
   :caption: entrypoint_server.sh
   :language: shell
   :linenos:
