Difference between revisions of "VPP/Progressive VPP Tutorial"

From fd.io
< VPP
Jump to: navigation, search
(Setup return route on vpp2)
(Setup route host)
Line 184: Line 184:
 
<pre style="background-color:palegreen">
 
<pre style="background-color:palegreen">
 
sudo ip route add 10.10.2.0/24 via 10.10.1.2
 
sudo ip route add 10.10.2.0/24 via 10.10.1.2
 +
ip route
 
</pre>
 
</pre>
  

Revision as of 19:03, 30 January 2017

Exercise: Setting up your environment

All of these exercises are designed to be performed on an Ubuntu 16.04 (Xenial) box.

If you have an Ubuntu 16.04 box on which you have sudo, you can feel free to use that.

If you do not, a Vagrantfile is provided to setup a basic Ubuntu 16.04 box for you

Vagrant Set up

Install Virtualbox

If you do not already have virtualbox on your laptop (or if it is not up to date), please download and install it:

https://www.virtualbox.org/wiki/Downloads

Install Vagrant

If you do not already have Vagrant on your laptop (or if it is not up to date), please download it:

https://www.vagrantup.com/downloads.html

Create a Vagrant Directory

Create a directory on your laptop:

mkdir fdio-tutorial
cd fdio-tutorial/

Create a Vagrantfile containing:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "puppetlabs/ubuntu-16.04-64-nocm"
  config.vm.box_check_update = false

  vmcpu=(ENV['VPP_VAGRANT_VMCPU'] || 2)
  vmram=(ENV['VPP_VAGRANT_VMRAM'] || 4096)

  config.ssh.forward_agent = true

  config.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--ioapic", "on"]
      vb.memory = "#{vmram}"
      vb.cpus = "#{vmcpu}"
      #support for the SSE4.x instruction is required in some versions of VB.
      vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"]
      vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"]
  end
end

Vagrant Up

Bring up your Vagrant VM:

vagrant up

ssh to Vagrant VM

vagrant ssh

Exercise: Install vpp

This tutorial is using a special packaging of vpp called vpp_lite that allows you to run multiple vpp processes simultaneously. We will be building topologies of these vpp processes to allow us to perform labs which require multiple instances of 'routers' or 'switches'. Because of this, we will be getting our vpp packages from a slightly non-standard apt repository.

Add key for apt repo

curl -L https://packagecloud.io/fdio/tutorial/gpgkey | sudo apt-key add -

Add repo to apt sources.list.d

With your favorite text editor (and sudo), create a file:

/etc/apt/sources.list.d/fdio_tutorial.list

containing

deb https://packagecloud.io/fdio/tutorial/ubuntu/ xenial main
deb-src https://packagecloud.io/fdio/tutorial/ubuntu/ xenial main

apt-get install vpp

Run

sudo apt-get update
sudo apt-get install vpp

Exercise: Create an Interface

Run vpp

sudo vpp api-segment { prefix vpp1 }

Create veth interfaces on host

sudo ip link add name vpp1out type veth peer name vpp1host
sudo ip link set dev vpp1out up
sudo ip link set dev vpp1host up
sudo ip addr add 10.10.1.1/24 dev vpp1host
sudo ip addr show vpp1host

Create vpp host- interface

sudo vppctl -p vpp1 create host-interface name vpp1out
sudo vppctl -p vpp1 set int state host-vpp1out up
sudo vppctl -p vpp1 set int ip address host-vpp1out 10.10.1.2/24
sudo vppctl -p vpp1 show hardware
sudo vppctl -p vpp1 show int
sudo vppctl -p vpp1 show int addr

Test interface

sudo vppctl -p vpp1 trace add af-packet-input 10
ping -c 1 10.10.1.2
sudo vppctl -p vpp1 show trace
sudo vppctl -p vpp1 clear  trace
sudo vppctl -p vpp1 show ip arp
sudo vppctl -p vpp1 show ip fib

Connecting two vpp instances

Running a second vpp instances

sudo vpp api-segment { prefix vpp2 }

Create veth interface on host to connect the two vpp instances

Using skills from the previous exercise, create a veth interface on the host with one end named vpp1vpp2 and the other named vpp2vpp1. Don't assign an ip address to either end on the host.

Create vpp host interfaces

Using skills from the previous exercise, create a host interface on vpp1 connected to vpp1vpp2. Assign it the address 10.10.2.1/30 Using skills from the previous exercise, create a host interface on vpp2 connected to vpp2vpp1. Assign it the address 10.10.2.2/30

Ping from vpp1 to vpp2

sudo vppctl -p vpp1 ping 10.10.2.2
sudo vppctl -p vpp2 ping 10.10.2.1
sudo vppctl -p vpp1 ping 10.10.2.3

Routing

Setup route host

sudo ip route add 10.10.2.0/24 via 10.10.1.2
ip route

Setup return route on vpp2

sudo vppctl -p vpp2 ip route add 10.10.1.0/24  via 10.10.1.1
sudo vppctl -p vpp2 show ip fib

Ping from host through vpp1 to vpp2

ping -c1 10.10.2.2

Ping from vpp2 through vpp1 to host

sudo vppctl -p vpp2 ping 10.10.1.1

Switching

Configure Switching

Verify Switching

Test Switching

Routing

Configure Routing

Verify Routing

Test Routing

Source NAT

Configure Source NAT

Verify Source NAT

Test Source NAT

LW46

Configure LW46

Verify LW46

Test LW46