The previous implementation had a race conditiona between the socket check and the BMv2 startup. Sometimes, if the check happen just before (or as) BMv2 was trying to bind the port, it would not be able to bind it. This solution uses psutil's equivalent to 'netstat' to determine whether is BMv2 has bound the port yet. Also, some minor README and comment improvements.
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 four modules:
- Introduction and Language Basics
- P4 Runtime and the Control Plane
- Monitoring and Debugging
- Advanced Data Structures
- Dynamic Behavior
Obtaining required software
If you are starting this tutorial at the Fall 2017 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 and VirtualBox
cd vm
vagrant up
- Log in with username
p4
and passwordp4
and issue the commandsudo 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 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