.. toctree::

.. _vhost01:

Prerequisites
-------------

For this use case we will assume FD.io VPP is installed. We will also assume the user can create and start
basic virtual machines. This use case will use the linux virsh commands. For more information on virsh
refer to `virsh man page <https://linux.die.net/man/1/virsh>`_.

The image that we use is based on an Ubuntu cloud image downloaded from:
`Ubuntu Cloud Images <https://cloud-images.ubuntu.com/xenial/current>`_.

All FD.io VPP commands are being run from a su shell.

.. _vhosttopo:

Topology
---------

In this case we will use 2 systems. One system we will be running standard linux, the other will
be running FD.io VPP.

.. figure:: /_images/vhost-topo.png
   :alt:

   Vhost Use Case Topology

Creating The Virtual Interface
------------------------------

We will start on the system running FD.io VPP and show that no Virtual interfaces have been created.
We do this using the :ref:`showintcommand` command.

Notice we do not have any virtual interfaces. We do have an interface (TenGigabitEthernet86/0/0) that
is up. This interface is connected  to a system running, in our example standard linux. We will use
this system to verify our connectivity to our VM with ping.

.. code-block:: console

    $ sudo bash
    # vppctl
        _______    _        _   _____  ___
     __/ __/ _ \  (_)__    | | / / _ \/ _ \
     _/ _// // / / / _ \   | |/ / ___/ ___/
     /_/ /____(_)_/\___/   |___/_/  /_/

    vpp# clear interfaces
    vpp# show int
                  Name               Idx       State          Counter          Count
    TenGigabitEthernet86/0/0          1         up
    TenGigabitEthernet86/0/1          2        down
    local0                            0        down
    vpp#

For more information on the interface commands refer to: :ref:`intcommands`

The next step will be to create the virtual port using the ``createvhostuser`` command.
This command will create the virtual port in VPP and create a linux socket that the VM will
use to connect to VPP.

The port can be created using VPP as the socket server or client.

Creating the VPP port:

.. code-block:: console

    vpp# create vhost socket /tmp/vm00.sock
    VirtualEthernet0/0/0
    vpp# show int
                  Name               Idx       State          Counter          Count
    TenGigabitEthernet86/0/0          1         up
    TenGigabitEthernet86/0/1          2        down
    VirtualEthernet0/0/0              3        down
    local0                            0        down
    vpp#

Notice the interface **VirtualEthernet0/0/0**. In this example we created the virtual interface as
a client.

We can get more detail on the vhost connection with the ``showvhost`` command.

.. code-block:: console

    vpp# show vhost
    Virtio vhost-user interfaces
    Global:
      coalesce frames 32 time 1e-3
      number of rx virtqueues in interrupt mode: 0
    Interface: VirtualEthernet0/0/0 (ifindex 3)
    virtio_net_hdr_sz 12
     features mask (0xffffffffffffffff):
     features (0x58208000):
       VIRTIO_NET_F_MRG_RXBUF (15)
       VIRTIO_NET_F_GUEST_ANNOUNCE (21)
       VIRTIO_F_ANY_LAYOUT (27)
       VIRTIO_F_INDIRECT_DESC (28)
       VHOST_USER_F_PROTOCOL_FEATURES (30)
      protocol features (0x3)
       VHOST_USER_PROTOCOL_F_MQ (0)
       VHOST_USER_PROTOCOL_F_LOG_SHMFD (1)

     socket filename /tmp/vm00.sock type client errno "No such file or directory"

     rx placement:
     tx placement: spin-lock
       thread 0 on vring 0
       thread 1 on vring 0

     Memory regions (total 0)

Notice **No such file or directory** and **Memory regions (total 0)**. This is because the
VM has not been created yet.

