# P4 Tutorial ## Introduction Welcome to the P4 Tutorial! We've prepared a set of exercises to help you get started with P4 programming, organized into several modules: 1. Introduction and Language Basics * [Basic Forwarding](./exercises/basic) * [Basic Tunneling](./exercises/basic_tunnel) 2. P4Runtime and the Control Plane * [P4Runtime](./exercises/p4runtime) 3. Monitoring and Debugging * [Explicit Congestion Notification](./exercises/ecn) * [Multi-Hop Route Inspection](./exercises/mri) 4. Advanced Data Structures * [Source Routing](./exercises/source_routing) * [Calculator](./exercises/calc) 5. Dynamic Behavior * [Load Balancing](./exercises/load_balance) ## Obtaining required software If you are starting this tutorial at the Spring 2018 P4 Developer Day, then we've already provided you with a virtual machine that has all of the required software installed. Otherwise, to complete the exercises, you will need to either build a virtual machine or install several dependencies. To build the virtual machine: - Install [Vagrant](https://vagrantup.com) and [VirtualBox](https://virtualbox.org) - `cd vm` - `vagrant up` - Log in with username `p4` and password `p4` and issue the command `sudo shutdown -r now` - When the machine reboots, you should have a graphical desktop machine with the required software pre-installed. To install dependencies by hand, please reference the [vm](../vm) installation scripts. They contain the dependencies, versions, and installation procedure. You can run them directly on an Ubuntu 16.04 machine: - `sudo ./root-bootstrap.sh` - `sudo ./user-bootstrap.sh`