P4 Tutorial


P4 Tutorial

Antonin Bas, Barefoot Networks

Andy Fingerhut, Cisco Systems, Inc.

This tutorial includes hands-on exercises; instructions for downloading the software is at https://p4.org/events/2019-02-19-nanog/

Download all software prior to the tutorial.

Attendees will learn how to express conventional and novel data-plane applications in the P4 language, and how to compile, execute, and evaluate P4 programs. We will provide a VM image containing all the necessary packages and tools. The P4 specification is publicly available at the P4 website under an Apache license. Key development tools are available as open-source tools (http://github.com/p4lang). P4 (www.p4.org) is a programming language for describing how network packets should be processed on a variety of targets, ranging from general-purpose CPUs to network processors, FPGAs, and custom ASICs.

P4 was designed with three goals in mind: (i) protocol independence: devices should not “bake in” specific protocols; (ii) field re-configurability: programmers should be able to modify the behavior of devices after they have been deployed; and (iii) portability: programs should not be tied to specific hardware targets. The P4 community maintains the language specifications, a set of open-source development tools, and sample P4 programs with the goal of making it easy for P4 users to quickly and correctly author new data-plane behaviors. P4 continues to be a transformative technology in networking and an increasingly popular choice for developing data-plane designs. Well-known data-plane features typically realized in a fixed-function logic are now being authored in P4, allowing network owners to understand and even verify their network devices’ behavior in an unambiguous manner. Meanwhile, new ideas are also being prototyped, evaluated, and productized in P4. We believe there are many opportunities for network operators to help evolve the design of the language, discover new implementation techniques, and develop their own custom use cases.

P4 Tutorial (pdf)