Creating VPP Startup Configuration
==================================

This document describes how to create the VPP startup configuration file
located at ``/etc/vpp/contiv-vswitch.conf``.

Hardware Interface Configuration
--------------------------------

Single-NIC Configuration
~~~~~~~~~~~~~~~~~~~~~~~~

You need to configure hardware interfaces for use by VPP. First, find
out the PCI address of the host’s network interface. On Debian-based
distributions, you can use ``lshw``:

::

   sudo lshw -class network -businfo
   Bus info          Device      Class          Description
   ========================================================
   pci@0000:03:00.0  ens160      network        VMXNET3 Ethernet Controller

In our case, it would be the ``ens3`` interface with the PCI address
``0000:00:03.0``

Now, add or modify the VPP startup config file
(``/etc/vpp/contiv-vswitch.conf``) to contain the proper PCI address:

::

   unix {
       nodaemon
       cli-listen /run/vpp/cli.sock
       cli-no-pager
       coredump-size unlimited
       full-coredump
       poll-sleep-usec 100
   }
   nat {
       endpoint-dependent
   }
   dpdk {
       dev 0000:00:03.0
   }
   api-trace {
      on
      nitems 500
   }

Multi-NIC Configuration
~~~~~~~~~~~~~~~~~~~~~~~

Similar to the single-NIC configuration, use command *lshw* to find the
PCI addresses of all the NICs in the system, for example:

::

   $ sudo lshw -class network -businfo
   Bus info          Device      Class      Description
   ====================================================
   pci@0000:00:03.0  ens3        network    Virtio network device
   pci@0000:00:04.0  ens4        network    Virtio network device

In the example above, ``ens3`` would be the primary interface and
``ens4`` would be the interface that would be used by VPP. The PCI
address of the ``ens4`` interface would be ``0000:00:04.0``.

Make sure the selected interface is *shut down*, otherwise VPP will not
grab it:

::

   sudo ip link set ens4 down

Now, add or modify the VPP startup config file in
``/etc/vpp/contiv-vswitch.conf`` to contain the proper PCI address:

::

   unix {
       nodaemon
       cli-listen /run/vpp/cli.sock
       cli-no-pager
       coredump-size unlimited
       full-coredump
       poll-sleep-usec 100
   }
   nat {
       endpoint-dependent
   }
   dpdk {
       dev 0000:00:04.0
   }
   api-trace {
      on
      nitems 500
   }

If assigning multiple NICs to VPP you will need to include each NIC’s
PCI address in the dpdk stanza in ``/etc/vpp/contiv-vswitch.conf``.

Assigning all NICs to VPP
^^^^^^^^^^^^^^^^^^^^^^^^^

On a multi-NIC node, it is also possible to assign all NICs from the
kernel for use by VPP. First, you need to install the STN daemon, as
described [here][1], since you will want the NICs to revert to the
kernel if VPP crashes.

You also need to configure the NICs in the VPP startup config file in
``/etc/vpp/contiv-vswitch.conf``. For example, to use both the primary
and secondary NIC, in a two-NIC node, your VPP startup config file would
look something like this:

::

   unix {
       nodaemon
       cli-listen /run/vpp/cli.sock
       cli-no-pager
       coredump-size unlimited
       full-coredump
       poll-sleep-usec 100
   }
   nat {
       endpoint-dependent
   }
   dpdk {
       dev 0000:00:03.0
       dev 0000:00:04.0
   }
   api-trace {
      on
      nitems 500
   }

Installing ``lshw`` on CentOS/RedHat/Fedora
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Note: On CentOS/RedHat/Fedora distributions, ``lshw`` may not be
available by default, install it by

::

   sudo yum -y install lshw

Power-saving Mode
-----------------

In regular operation, VPP takes 100% of one CPU core at all times (poll
loop). If high performance and low latency is not required you can
“slow-down” the poll-loop and drastically reduce CPU utilization by
adding the following stanza to the ``unix`` section of the VPP startup
config file:

::

   unix {
       ...
       poll-sleep-usec 100
       ...
   }

The power-saving mode is especially useful in VM-based development
environments running on laptops or less powerful servers.

VPP API Trace
-------------

To troubleshoot VPP configuration issues in production environments, it
is strongly recommended to configure VPP API trace. This is done by
adding the following stanza to the VPP startup config file:

::

   api-trace {
       on
       nitems 500
   }

You can set the size of the trace buffer with the attribute.

