Code Monkey home page Code Monkey logo

onos-p4-tutorial's Introduction

P4+ONOS SRv6 Tutorial

Welcome to the P4+ONOS SRv6 tutorial! The goal of this tutorial is to teach you how to use ONOS as the control plane of a network of P4-capable devices, controlled using P4Runtime. The tutorial is organized around a sequence of hands-on exercises that show how to build a leaf-spine data center fabric based on a simplified version of Segment Routing over IPv6 (SRv6). Exercises will include activities such as:

  • P4 implementation of basic forwarding behaviors (bridging and routing) as well as SRv6
  • Writing P4 unit tests using the Packet Test Framework (PTF)
  • Implementing an ONOS app providing the fabric control plane

Slides

Tutorial slides are available online. These slides provide an introduction to each exercise as well as the software tools used. We suggest you look at it before starting to work on the exercises.

P4 Cheat Sheet

A P4 language cheat sheet is also available online. It contains various P4 code examples that you can refer to.

Tutorial VM

To complete the exercises, you will need to download and run this tutorial VM (5.3 GB):

To run the VM you can use any modern x86 virtualization system. The VM has been tested with VirtualBox v6.0.6. To download VirtualBox and import the VM use the following links:

Recommended system requirements

The VM is configured with 4 GB of RAM and 4 CPU cores, while the disk has size of approx. 8 GB. These are the recommended minimum requirements to be able to run Ubuntu along with a Mininet network of 1-10 BMv2 devices controlled by 1 ONOS instance. For a flawless experience, we recommend running the VM on a host system that has at least the double of resources.

VM user credentials

Use the following credentials to log in the Ubuntu system:

  • Username: sdn
  • Password: rocks

Get this tutorial repo

To work on the exercises you will need to clone this repo inside the VM:

cd ~
git clone https://github.com/opennetworkinglab/onos-p4-tutorial tutorial

If the tutorial directory is already present, make sure to update its content:

cd ~/tutorial
git pull origin master

Generate SSH keys

ONOS uses SSH key-based authentication to access its command line interface (CLI). Before starting ONOS, generate public/private rsa key pair using the following command inside the VM:

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q

Upgrade ONOS to the latest version used in the tutorial

The VM may have shipped with an older version of ONOS than we would like to use for the exercises. You can upgrade to the latest version used for the tutorial using the following command:

make onos-upgrade

Using an IDE to work on the exercises

During the exercises you will need to write code in multiple languages such as P4, Python and Java. While the exercises do not prescribe the use of any specific IDE or code editor, the tutorial VM comes with Java IDE IntelliJ IDEA Community Edition, already pre-loaded with plugins for P4 syntax highlighting and Python development. We suggest using IntelliJ IDEA especially when working on the ONOS app, as it provides code completion for all ONOS APIs.

Repo structure

This repo is structured as follows:

  • p4src/ P4 implementation
  • app/ ONOS app Java implementation
  • mininet/ Mininet script to emulate a 2x2 leaf-spine fabric topology of stratum_bmv2 devices
  • ptf/ PTF-based unit tests

Tutorial commands

To facilitate working on the exercises, we provide a set of make-based commands to control the different aspects of the tutorial. Commands will be introduced in the exercises, here's a quick reference:

Make command Description
make p4 Builds the P4 program
make onos-run Runs ONOS on the current terminal window
make onos-cli Access the ONOS command line interface (CLI)
make app-build Builds the tutorial app and pipeconf
make app-reload Load the app in ONOS
make topo Starts the Mininet topology
make netcfg Pushes netcfg.json file (network config) to ONOS
make reset Resets the tutorial environment
make onos-upgrade Upgrades the ONOS version

Exercises

Click on the exercise name to see the instructions:

  1. Software tools basics and packet I/O
  2. L2 bridging
  3. IPv6 routing
  4. Segment Routing v6

Solutions

You can find solutions for each exercise in the solution directory. Feel free to compare your implementation to the reference one whenever you feel stuck. To use the solution code that is provided, simply use the same make commands in the solution directory.

onos-p4-tutorial's People

Contributors

bocon13 avatar ccascone avatar ray-milkey avatar yi-tseng avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.