.. _routing:

.. toctree::

Routing
=======

Skills to be Learned
---------------------

In this exercise you will learn these new skills:

#. Add route to Linux Host routing table
#. Add route to FD.io VPP routing table

And revisit the old ones:

#. Examine FD.io VPP routing table
#. Enable trace on vpp1 and vpp2
#. ping from host to FD.io VPP
#. Examine and clear trace on vpp1 and vpp2
#. ping from FD.io VPP to host
#. Examine and clear trace on vpp1 and vpp2

VPP command learned in this exercise
-------------------------------------

#. `ip route
   add <https://docs.fd.io/vpp/17.04/clicmd_src_vnet_ip.html#clicmd_ip_route>`__

Topology
---------

.. figure:: /_images/Connecting_two_vpp_instances_with_memif.png
   :alt: Connect two FD.io VPP topology

   Connect two FD.io VPP topology

Initial State
--------------

The initial state here is presumed to be the final state from the
exercise `Connecting two FD.io VPP
instances <VPP/Progressive_VPP_Tutorial#Connecting_two_vpp_instances>`__

Setup host route
-----------------

.. code-block:: console

   $ sudo ip route add 10.10.2.0/24 via 10.10.1.2
   $ ip route
   default via 10.0.2.2 dev enp0s3 
   10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15 
   10.10.1.0/24 dev vpp1host  proto kernel  scope link  src 10.10.1.1 
   10.10.2.0/24 via 10.10.1.2 dev vpp1host 

Setup return route on vpp2
---------------------------

.. code-block:: console

   $ sudo vppctl -s /run/vpp/cli-vpp2.sock
    vpp# ip route add 10.10.1.0/24  via 10.10.2.1

Ping from host through vpp1 to vpp2
------------------------------------

The connection from vpp1 to vpp2 uses the **memif** driver, the connection to the host
uses the **af-packet** driver. To trace packets from the host we use **af-packet-input** from
vpp1 to vpp2 we use **memif-input**.

#. Setup a trace on vpp1 and vpp2
#. Ping 10.10.2.2 from the host
#. Examine the trace on vpp1 and vpp2
#. Clear the trace on vpp1 and vpp2