Difference between revisions of "VPP/Progressive VPP Tutorial"
(→Exercise: Setting up your environment) |
(→Exercise: Install vpp) |
||
Line 72: | Line 72: | ||
== Exercise: Install vpp == | == Exercise: Install vpp == | ||
+ | |||
+ | === Objectives === | ||
+ | |||
+ | In this first exercise you will learn how to install vpp using apt-get. | ||
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. | 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. | ||
+ | |||
+ | The installation mechanism is very similar to the standard [[VPP/Installing_VPP_binaries_from_packages|Install VPP from Binary Packages]] instructions. | ||
=== Add key for apt repo === | === Add key for apt repo === |
Revision as of 22:25, 30 January 2017
Contents
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
Objectives
In this first exercise you will learn how to install vpp using apt-get.
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.
The installation mechanism is very similar to the standard Install VPP from Binary Packages instructions.
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.2.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
Cleanup previous exercises
Note: You will lose all your existing config in your vpp instances!
ps -ef | grep vpp | awk '{print $2}'| xargs sudo kill sudo ip link del dev vpp1host sudo ip link del dev vpp1vpp2