Share

Introduction

The latest stable release (v17.10) of the Vector Packet Processing (VPP) framework (https://fd.io/technology/) is available as a package for the Tumbleweed release of openSUSE.

Leap 42.3 is also fully supported by the FD.io/VPP production environment upstream, with gating rights (Verified) on new patch submission.

If you are running Leap 42.3 you can still avail of the openSUSE packages by adding the repo network to the list of repos on your system.

$ zypper addrepo -f \
https://download.opensuse.org/repositories/network/openSUSE_Leap_42.3/network.repo

This blog post will describe two different approaches to deploy VPP:

  1. How to install and configure VPP using the available packages for Tumbleweed
  2. How to download, compile and create installable packages by yourself on openSUSE

Install and configure VPP via online packages

As previously mentioned, if you are running Tumbleweed then you are in the ideal situation to use zypper to install the packages required to run VPP.

The two main packages you require are vpp and vpp-plugins.

So, let’s proceed with the installation:

$ zypper install vpp vpp-plugins

You will notice that the vpp-plugins package will download and install the libdpdk-17_08-0 package too;

Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
 libdpdk-17_08-0 libvpp0 vpp vpp-plugins

4 new packages to install.
Overall download size: 4.3 MiB. Already cached: 0 B. After the operation, additional 16.5 MiB will be used.

That is required if you are running the VPP framework leveraging the DPDK infrastructure.

We will see shortly that the DPDK infrastructure is the default and preferred mechanism for running VPP but it can be easily disabled.

The vpp package takes care of creating the service file to start/stop VPP as a service, deploy the main VPP executable files (under /usr/bin) and add the VPP configuration file (startup.conf) under the /etc/vpp directory.

The two main executables are: vpp and vppctl. The former is the daemon which deals with the packet processing pipelines while the latter is the CLI allowing the end-user to configure the VPP framework (e.g. adding interfaces, creating/destroying tunnels, adding/deleting ACL rules, etc.).

The vpp-plugins package creates a new directory – named vpp_plugins – under the directory /usr/lib64/

The startup.conf file deployed by the vpp package is already written to work out-of-the-box with the installation of the other “linked” packages (i.e. vpp-plugins) and so the path to the plugin points to the /usr/lib64/vpp_plugins directory.

Snippet of the content of /etc/vpp/startup.conf:

plugins
{
    path /usr/lib64/vpp_plugins
    # Uncomment the following line to disable DPDK and use Linux Kernel infrastructure
    # plugin dpdk_plugin.so { disable }
}

It has to be said though, that deep and fine tuning of the VPP deployment requires knowledge of the platform where it is being deployed to thus configurations like thread affinitization, number of rx/tx queues per network interfaces are commented out in the startup.conf file and left to the end-users to properly configure them for their platforms.

For a complete list of parameters available for configuration in the startup.conf file, it is recommended to visit https://wiki.fd.io/view/VPP/Command-line_Arguments which is kept up-to-date.

The /usr/lib64/vpp_plugins directory contains libraries representing extra functionalities available for the VPP framework. An example is represented by the acl_plugin.so which implements ACL feature for VPP.

Once VPP has bootstrapped we can read/write network configuration by using the vppctl command which also offers an auto-completion mode to help end-users with the discovery of commands and parameters.

For a thorough list and explanation of commands/parameters to be passed to the vppctl, it is recommended to visit https://wiki.fd.io/view/VPP/Command-line_Interface_(CLI)_Guide

DPDK integration

It is interesting to notice how the DPDK infrastructure, which principally deals with reading/writing packets from/to the network interface, is handled in VPP as a plugin too.

In this regard, the file /etc/vpp/startup.conf can be edited and modified to disable the use of DPDK by following the instructions already contained in the startup.conf file deployed by the vpp package (see the startup.conf snippet above).

You may wonder “why shall I disable DPDK”? One reason might be that your platform does not support SSE4.2 instructions set; in fact, latest DPDK version (v.17.08) integrated into VPP 17.10 requires the support for SSE4.2 instructions. Another reason could be that you are just starting with VPP, there is a lot to learn and you may want to keep all the Linux user-space tools at your hand for debugging, etc. before moving to the better performing infrastructure.

Hugepages setup

There is also another configuration file, named 80-vpp.conf and deployed automatically by the vpp in /etc/sysctl.d.

That file takes care of allocating enough hugepages to run VPP. This also means you do not need to modify the kernel parameters (unless you want to use 1G hugepages) or perform any other operations after the OS bootstrapped, since memory is also reserved.

VPP Bootstrapping

To start VPP you simply need to run the following command:

$ sudo service vpp start

That will take care of loading the kernel module uio_pci_generic (required by DPDK) and invoke the vpp executable passing the configuration contained in /etc/vpp/startup.conf to it.

Contribute to VPP using openSUSE

Thanks to the work happened upstream in the VPP community, VPP can be compiled seamlessly for both x86_64 and aarch64 architectures on openSUSE distributions.

Having said that, the following steps have been run and verified on Leap 42.3 and Tumbleweed only (at the time of writing) so you may find some discrepancies on other openSUSE versions.

First of all, if you are interested in going down this route, you will have to download the source code for VPP.

That can be done anonymously by running:

$ git clone https://gerrit.fd.io/r/vpp

If you plan to contribute to VPP then you are required to perform few extra steps and download the source code by providing your credentials.

A full tutorial can be found at https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code

Once you have obtained the source code, you have the choice to decide whether you want to compile the tip of the master branch or instead compile code existing in any of the stable branches.

First of all, let’s move to the vpp local repo:

$ cd vpp

Now, you can retrieve the list of available tags by running:

$ git tag -l

At the time of writing the latest stable branch is the 17.10-release so we can access the source code on that branch by:

$ git checkout v17.10-release

For new features development and/or bug-fixing the best thing is to work on the master branch.

$ git checkout master

Now, let’s take care of installing system dependencies.

The below command takes care of installing all  software dependencies required to be satisfied to build VPP on openSUSE distributions.

$ make install-dep

Once the above task completes, you can proceed further with the actual code compilation:

$ make bootstrap
$ make build-release

If you are going to write new code into VPP or if you need to debug any of the implemented features then you may want to substitute the “make build-release with the following:

$ make build

That will enabled more verbose console output to help out with the debugging activity.

Once the compilation completes (it might take 10 mins or more depending on your hardware), you can also create packages for openSUSE by running:

$ cd extras/rpm
$ make RPM

At this point you have built and created RPMs for the openSUSE distribution you are running on, so you can decide to either run VPP from within the git directory or install the newly created packages and then execute.

Share
(Visited 1 times, 1 visits today)
Tags: , ,
Category: Technical Solutions
This entry was posted Tuesday, 31 October, 2017 at 5:56 am
You can follow any responses to this entry via RSS.

Leave a Reply

Your email address will not be published. Required fields are marked *

No comments yet