For any information or to join the brigade please contact Carmelo Cascone (email@example.com) or David Boswell (firstname.lastname@example.org).
P4 is a domain-specific language (DSL) designed to allow the programming of packet forwarding devices. P4 can be used to program different targets such as software switches, FPGA-based NICs or switches based on reconfigurable ASICs. P4 enables protocol-independent programmability at different levels, for example:
Parsing and modification (actions) of new, non-standard headers.
Configure table properties such as size, type of match (exact, ternary, longest-prefix), counters, etc.
Stateful processing, i.e. per-packet custom actions that can access and manipulate state maintained by the switch.
P4 allows programming of many devices in a target-independent manner, using high-level constructs. In principle, P4 programs should be portable. The same program, when compiled for different targets, should produce the same forwarding behavior. Finally, P4 allows for reconfigurability in the field. In other words, once deployed, a P4-enabled device can be reconfigured with a new P4 program to provide support for new forwarding capabilities.
In ONOS we are ultimately interested in the capabilities of networking devices and ways to ease the configuration and control of such capabilities. P4 is becoming the common language spoken by switch vendors and operators to agree on what the data plane can or should do. Indeed, P4 is meant as both a specification language, e.g. to formally specify how a fixed-function switch ASIC works, and a programming language. In its mission to ease the life of operators, and to promote faster innovation in the network, ONOS should be able to understand and potentially speak P4. Understand, to be aware of the capabilities of a given device and to expose higher-level APIs to control them. Speak, to deploy new capabilities, e.g. generating or modifying existing P4 programs, that can be later controlled to satisfy application needs.
P4 is not a protocol or device API for runtime control, i.e. once a P4 program is deployed to a device, P4 doesn’t tell us how that device can be controlled, for example, to add or remove entries in match+action tables, or to read the value of a counter. How can ONOS control a P4-enabled device? P4Runtime is an effort in the P4 community to create a standard control-plane API portable across targets, they propose a gRPC-based APIs (p4runtime.proto). The brigade will focus on P4Runtime as a southbound control protocol, however, different devices supporting P4 might expose different APIs. Similarly to how ONOS today deals with different flavors of OpenFlow, heterogeneity of control protocol/APIs should be abstracted from applications.
The scope of this brigade is to make ONOS aware of this new dimension of programmability, in which support for new forwarding/processing capabilities can be added by writing and deploying P4 programs.
[work in progress]
Support for P4 will affect the whole ONOS platform, from the southbound to the northbound. The P4 brigade is looking for members willing to contribute! Contact Carmelo Cascone (email@example.com) or David Boswell (firstname.lastname@example.org) if you are interested.