* Updated the utils/run_exercise.py to allow exercises to customize host configuration from the topology.json file. Now hosts and `ping` each other in the basic exercise. Other Linux utilities should work as well (e.g. iperf). ``` mininet> h1 ping h2 PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data. 64 bytes from 10.0.2.2: icmp_seq=1 ttl=62 time=3.11 ms 64 bytes from 10.0.2.2: icmp_seq=2 ttl=62 time=2.34 ms 64 bytes from 10.0.2.2: icmp_seq=3 ttl=62 time=2.15 ms ^C --- 10.0.2.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.153/2.540/3.118/0.416 ms mininet> pingall *** Ping: testing ping reachability h1 -> h2 h3 h2 -> h1 h3 h3 -> h1 h2 *** Results: 0% dropped (6/6 received) ``` Only updated basic exercise, still need to update other exercises. Also, updated the root-bootstrap.sh because I was running into issues with latest version of vagrant. * Accidentially added the solution to the basic exercise in the previous commit. Undoing that here ... * Updated the topology.json file and table entries for the basic_tunnel exercise. * Updated P4Runtime exercise with new topology and table entries. * Fixed MAC addresses in P4Runtime exercise. It is working now. * Fixed MAC addresses in P4Runtime exercise starter code * Updated ECN exercise to use new topology.json file. Updated the table entries / MAC addresses as well. * Updated the topology.json file and table entries for the MRI exercise. * Updated source_routing exercise with new topology file and verified correct functionality. * Updated load_balance exercise with new topology. * Moved basic exercise triangle topology into a separate folder * Added new topology for the basic exercise: a single pod of a fat-tree. * Updated Makefiles and run_exercise.py to allow exercises to configure each switch with a different P4 program. This is mainly for the firewall exercise. * Updated Makefiles of project to work with new utils/Makefile * Updated load_balance and p4runtime exercise Makefiles * Initial commit of the firewall exercise, which is a simple stateful firewall that uses a bloom filter. Need to update README files * Initial commit of the path_monitor exercise. It is working but still need to update the README and figure out what we want the tutorial attendees to implement. * Updated README file in firewall exercise. Also removed the bits from the starter code that we want the tutorial attendees to implement * Renamed path_monitor exercise to link_monitor * Updated the README in the link_monitor exercise and removed the bits from the starter code that we want the tutorial attendees to implement. * Updated README for the firewall exercise * Adding pod-topo.png image to basic exercise * Added firewall-topo.png image to firewall exercise * Added link-monitor-topo.png to link_monitor exercise * Updated README files to point to topology images * Updated top-level README to point to new exercises. * Fixed link for VM dependencies script in README * Updated bmv2/pi/p4c commits * Updated README files for exercises to fix some typos and added a note about the V1Model architecture. * Added a note about food for thought in the link_monitor README * Updated the firewall.p4 program to use two register arrays rather than a single one. This is to make the design more portable to high line rate devices which can only support a single access to each register array. * Minor fix to firewall exercise to get rid of compiler warning. * Updated comment in firewall exercise. * Minor (typo) fixes in the firewall ReadMe * More info in firewall exercise ReadMe step 2 * Updated firewall.p4 to reuse direction variable * More testing steps, small fixes in firewall exercise Readme * Added food for thought to firewall Readme * Cosmetic fixes to firewall ReadMe * Made a few updates to the basic exercise README and added more details to the link_monitor exercise README. Also added a command to install grip when provisioning the VM. This could be useful for rendering the markdown README files offline. * Updated top level README so it can be merged into the master branch. * Moved cmd to install grip from root-bootstrap to user-bootstrap
64 lines
3.0 KiB
Markdown
64 lines
3.0 KiB
Markdown
# 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 Behavior
|
|
* [Source Routing](./exercises/source_routing)
|
|
* [Calculator](./exercises/other/calc)
|
|
* [Load Balancing](./exercises/load_balance)
|
|
|
|
5. Stateful Packet Processing
|
|
* [Firewall](./exercises/firewall)
|
|
* [Link Monitoring](./exercises/link_monitor)
|
|
|
|
## Presentation
|
|
|
|
The slides are available [online](http://bit.ly/p4d2-2018-spring) and
|
|
in the P4_tutorial.pdf in the tutorial directory.
|
|
|
|
A P4 Cheat Sheet is also available [online](https://drive.google.com/file/d/1Z8woKyElFAOP6bMd8tRa_Q4SA1cd_Uva/view?usp=sharing)
|
|
which contains various examples that you can refer to.
|
|
|
|
## Obtaining required software
|
|
|
|
If you are starting this tutorial at one of the proctored tutorial events,
|
|
then we've already provided you with a virtual machine that has all of
|
|
the required software installed. Ask an instructor for a USB stick with
|
|
the VM image.
|
|
|
|
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)
|
|
- Clone the repository
|
|
- `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.
|
|
|
|
*Note*: Before running the `vagrant up` command, make sure you have enabled virtualization in your environment; otherwise you may get a "VT-x is disabled in the BIOS for both all CPU modes" error. Check [this](https://stackoverflow.com/questions/33304393/vt-x-is-disabled-in-the-bios-for-both-all-cpu-modes-verr-vmx-msr-all-vmx-disabl) for enabling it in virtualbox and/or BIOS for different system configurations.
|
|
|
|
You will need the script to execute to completion before you can see the `p4` login on your virtual machine's GUI. In some cases, the `vagrant up` command brings up only the default `vagrant` login with the password `vagrant`. Dependencies may or may not have been installed for you to proceed with running P4 programs. Please refer the [existing issues](https://github.com/p4lang/tutorials/issues) to help fix your problem or create a new one if your specific problem isn't addressed there.
|
|
|
|
To install dependencies by hand, please reference the [vm](./vm) installation scripts.
|
|
They contain the dependencies, versions, and installation procedure.
|
|
You should be able to run them directly on an Ubuntu 16.04 machine:
|
|
- `sudo ./root-bootstrap.sh`
|
|
- `sudo ./user-bootstrap.sh`
|